位置: 编程技术 - 正文

OpenGL入门二(opengl入门教程(精))

编辑:rootadmin
本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念。一、点、直线和多边形我们知道数学(具体的说,是几何学)中有点、直线和多边形的概念,但这些概念在计算机中会有所不同。数学上的点,只有位置,没有大小。但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的点。另一方面,无论图形输出设备(例如,显示器)如何精确,始终不能输出一个无穷小的点。一般情况下,OpenGL中的点将被画成单个的像素(像素的概念,请自己搜索之~),虽然它可能足够小,但并不会是无穷小。同一像素上,OpenGL可以绘制许多坐标只有稍微不同的点,但该像素的具体颜色将取决于OpenGL的实现。当然,过度的注意细节就是钻牛角尖,我们大可不必花费过多的精力去研究“多个点如何画到同一像素上”。同样的,数学上的直线没有宽度,但OpenGL的直线则是有宽度的。同时,OpenGL的直线必须是有限长度,而不是像数学概念那样是无限的。可以认为,OpenGL的“直线”概念与数学上的“线段”接近,它可以由两个端点来确定。多边形是由多条线段首尾相连而形成的闭合区域。OpenGL规定,一个多边形必须是一个“凸多边形”(其定义为:多边形内任意两点所确定的线段都在多边形内,由此也可以推导出,凸多边形不能是空心的)。多边形可以由其边的端点(这里可称为顶点)来确定。(注意:如果使用的多边形不是凸多边形,则最后输出的效果是未定义的——OpenGL为了效率,放宽了检查,这可能导致显示错误。要避免这个错误,尽量使用三角形,因为三角形都是凸多边形)可以想象,通过点、直线和多边形,就可以组合成各种几何图形。甚至于,你可以把一段弧看成是很多短的直线段相连,这些直线段足够短,以至于其长度小于一个像素的宽度。这样一来弧和圆也可以表示出来了。通过位于不同平面的相连的小多边形,我们还可以组成一个“曲面”。二、在OpenGL中指定顶点由以上的讨论可以知道,“点”是一切的基础。如何指定一个点呢?OpenGL提供了一系列函数。它们都以glVertex开头,后面跟一个数字和1~2个字母。例如:glVertex2dglVertex2fglVertex3fglVertex3fv等等。数字表示参数的个数,2表示有两个参数,3表示三个,4表示四个(我知道有点罗嗦~)。字母表示参数的类型,s表示位整数(OpenGL中将这个类型定义为GLshort), i表示位整数(OpenGL中将这个类型定义为GLint和GLsizei), f表示位浮点数(OpenGL中将这个类型定义为GLfloat和GLclampf), d表示位浮点数(OpenGL中将这个类型定义为GLdouble和GLclampd)。 v表示传递的几个参数将使用指针的方式,见下面的例子。这些函数除了参数的类型和个数不同以外,功能是相同的。例如,以下五个代码段的功能是等效的:(一)glVertex2i(1, 3);(二)glVertex2f(1.0f, 3.0f);(三)glVertex3f(1.0f, 3.0f, 0.0f);(四)glVertex4f(1.0f, 3.0f, 0.0f, 1.0f);(五)GLfloat VertexArr3[] = {1.0f, 3.0f, 0.0f}; glVertex3fv(VertexArr3);以后我们将用glVertex*来表示这一系列函数。

推荐整理分享OpenGL入门二(opengl入门教程(精)),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl2d,opengl教程48讲,opengl入门教程(精),opengl入门书,opengl入门书,opengl入门视频教程,opengl从入门到精通,opengl入门教程(精),内容如对您有帮助,希望把文章链接给更多的朋友!

注意:OpenGL的很多函数都是采用这样的形式,一个相同的前缀再加上参数说明标记,这一点会随着学习的深入而有更多的体会。

OpenGL入门二(opengl入门教程(精))

三、开始绘制假设现在我已经指定了若干顶点,那么OpenGL是如何知道我想拿这些顶点来干什么呢?是一个一个的画出来,还是连成线?或者构成一个多边形?或者做其它什么事情?为了解决这一问题,OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略)。并由glBegin来指明如何使用这些点。例如我写:glBegin(GL_POINTS); glVertex2f(0.0f, 0.0f); glVertex2f(0.5f, 0.0f);glEnd();则这两个点将分别被画出来。如果将GL_POINTS替换成GL_LINES,则两个点将被认为是直线的两个端点,OpenGL将会画出一条直线。我们还可以指定更多的顶点,然后画出更复杂的图形。另一方面,glBegin支持的方式除了GL_POINTS和GL_LINES,还有GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN等.我并不准备在glBegin的各种方式上大作文章。大家可以自己尝试改变glBegin的方式和顶点的位置,生成一些有趣的图案。程序代码:void myDisplay(void){ glClear(GL_COLOR_BUFFER_BIT); glBegin( /* 在这里填上你所希望的模式 */ ); /* 在这里使用glVertex*系列函数 */ /* 指定你所希望的顶点位置 */ glEnd(); glFlush();}把这段代码改成你喜欢的样子,然后用它替换第一课中的myDisplay函数,编译后即可运行。两个例子例一、画一个圆/*正四边形,正五边形,正六边形,……,直到正n边形,当n越大时,这个图形就越接近圆当n大到一定程度后,人&#;将无法把它跟真正的圆相区别这时我们已经成功的画出了一个“圆”(注:画圆的方法很多,这里使用的是比较简单,但效率较低的一种)试修改下面的const int n的&#;,观察当n=3,4,5,8,,,,,等不同数&#;时输出的变化情况将GL_POLYGON改为GL_LINE_LOOP、GL_POINTS等其它方式,观察输出的变化情况*/#include <math.h>const int n = ;const GLfloat R = 0.5f;const GLfloat Pi = 3.f;void myDisplay(void){ int i; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); for(i=0; i<n; &#;&#;i) glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i)); glEnd(); glFlush();}例二、画一个五角星/*设五角星的五个顶点分布位置关系如下: AE B D C首先,根据余弦定理列方程,计算五角星的中心到顶点的距离a(假设五角星对应正五边形的边长为.0)a = 1 / (2-2*cos(*Pi/));然后,根据正弦和余弦的定义,计算B的x坐标bx和y坐标by,以及C的y坐标(假设五角星的中心在坐标原点)bx = a * cos( * Pi/);by = a * sin( * Pi/);cy = -a * cos( * Pi/);五个点的坐标就可以通过以上四个量和一些常数简单的表示出来*/#include <math.h>const GLfloat Pi = 3.f;void myDisplay(void){ GLfloat a = 1 / (2-2*cos(*Pi/)); GLfloat bx = a * cos( * Pi/); GLfloat by = a * sin( * Pi/); GLfloat cy = -a * cos( * Pi/); GLfloat PointA[2] = { 0, a }, PointB[2] = { bx, by }, PointC[2] = { 0.5, cy }, PointD[2] = { -0.5, cy }, PointE[2] = { -bx, by }; glClear(GL_COLOR_BUFFER_BIT); // 按照A->C->E->B->D->A的顺序,可以一笔将五角星画出 glBegin(GL_LINE_LOOP); glVertex2fv(PointA); glVertex2fv(PointC); glVertex2fv(PointE); glVertex2fv(PointB); glVertex2fv(PointD); glEnd(); glFlush();}例三、画出正弦函数的图形/*由于OpenGL默认坐标&#;只能从-1到1,(可以修改,但方法留到以后讲)所以我们设置一个因子factor,把所有的坐标&#;等比例缩小,这样就可以画出更多个正弦周期试修改factor的&#;,观察变化情况*/#include <math.h>const GLfloat factor = 0.1f;void myDisplay(void){ GLfloat x; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glVertex2f(-1.0f, 0.0f); glVertex2f(1.0f, 0.0f); // 以上两个点可以画x轴 glVertex2f(0.0f, -1.0f); glVertex2f(0.0f, 1.0f); // 以上两个点可以画y轴 glEnd(); glBegin(GL_LINE_STRIP); for(x=-1.0f/factor; x<1.0f/factor; x&#;=0.f) { glVertex2f(x*factor, sin(x)*factor); } glEnd(); glFlush();}小结本课讲述了点、直线和多边形的概念,以及如何使用OpenGL来描述点,并使用点来描述几何图形。大家可以发挥自己的想象,画出各种几何图形,当然,也可以用GL_LINE_STRIP把很多位置相近的点连接起来,构成函数图象。如果有兴趣,也可以去找一些图象比较美观的函数,自己动手,用OpenGL把它画出来。

OpenGL编程逐步深入(九)插值处理 注:文中VS代指顶点着色器,FS代指片段着色器。准备知识这个教程和大家展示3d管道中非常重要的部分,即Interpolation(插值)。光栅化程序执行的插值

OpenG: 光照 1.绘制带有光照效果的场景;2.场景包含3个茶壶,通过键盘1,2,3可以分别选中三个茶壶,然后用鼠标对每个茶壶进行分别的旋转;3.使用点光源,点光源

OpenGL教程翻译 第十七课 环境光(Ambient Lighting) OpenGL教程翻译第十七课环境光(AmbientLighting)原文地址:

标签: opengl入门教程(精)

本文链接地址:https://www.jiuchutong.com/biancheng/369588.html 转载请保留说明!

上一篇:OpenGL入门一(opengl入门教程(精))

下一篇:OpenGL编程逐步深入(九)插值处理(opengl编程宝典)

  • 固定资产处置损益怎么算
  • 社保个人承担部分
  • 季节性临时工是不是可以不上社保
  • 户外公司招牌
  • 跨区预缴增值税怎么做账
  • 运费单独开票的账务处理
  • 商业银行的下列哪些行为违反了法律规定?给存款大户
  • 有限合伙企业分红个人所得税
  • 以前年度记错的费用怎么调整?
  • 企业收回报废产品合法吗
  • 税控盘这个月没有反写会怎么样
  • 企业作为股东分红上税吗怎么算
  • 开增值税专用发票需要合同吗
  • 利润表中所得税费用为负数是什么意思
  • 政府机构可以开对外营业的餐饮吗
  • 普通纳税人的条件
  • 转口贸易是否缴增值税
  • 股权转让的公允价值
  • 个人借款取得的利息收入要交税吗
  • 企业未成立工会需要交工会经费吗
  • 废料出售收入
  • 高新企业所得税税率10%
  • 管理费用企业所得税标准
  • 给员工租房会承担什么责任
  • u盘ghost下载
  • 非正常损失含义
  • 电脑中病毒有什么危害
  • 债务重组账务处理会计分录
  • 土豆发芽了能吃吗有没有毒
  • 收回已确认的坏账准备
  • 土地价款扣除会计分录
  • 金融企业的贷款准备金
  • 用php做计算
  • vue引用svg矢量图
  • 企业缴纳职工社保比例的规定
  • 新成立公司建账
  • idea可以编写vue吗
  • 售后租回交易形成融资租赁,销售时不确认处置损益
  • 税控设备抵减增值税必须当月抵减吗
  • 贴现需要什么手续
  • 公司购买办公家具可以抵扣吗
  • 帝国cms界面
  • 计提工资大于实发工资企业所得税怎么算
  • 税控盘每年要交年费吗
  • 网上更正增值税申报表
  • 印花税怎么交,在哪里交
  • sql20054n
  • 企业自查补税怎么报税
  • 扣供应商的货款进项税要转出吗
  • 收到所得税退税现金流量选哪个
  • 纺织品业务
  • 现金流量表的编制公式 计算公式
  • 域名 续费
  • 销售费用工资是什么科目
  • 企业所得税汇算表
  • 代收会计分录
  • 事业单位利息收入
  • 农业免税企业开票有限额吗
  • 向非金融企业借款会计分录
  • 公司与股东的往来款
  • 结存材料实际成本计算公式
  • 从业人数和资产总额指标,应按企业
  • linux配置mysql数据库远程连接失败的解决方法
  • Mac下mysql 5.7.13 安装配置方法图文教程
  • winxp系统纯净版
  • 怎么关闭windows更新提示
  • win7升级win10之后视频解码能力变弱
  • win7一直处于开机界面
  • 网站备份是什么意思
  • win7系统怎么设置开机启动项
  • 修改win7
  • 表单提交servlet
  • Node.js中的什么模块是用于处理文件和目录的
  • andriod 控件
  • js中的垃圾回收机制有哪些方法
  • 命令适用于
  • python抓视频保存本地
  • 上海市税务局领导简介
  • 张家港市有什么好吃的美食
  • 常设机构怎么缴纳所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设