OpenGL 入门基础教程 —— 基本术语篇【3】

1:物体法线向量是一条垂直于某个表面的方向向量,在OpenGL中,可以对每个顶点都设置不同的法线(曲面),物体的法线向量定义了它的表面在空间中的方向,也就是说定义了它相对于光源的方向,在OpenGL中使用法线向量确定该物体的各个顶点所接收的光照,如果需要使用光照,则需要为每个顶点指定一条法线向量。


2:使用glNormal *()函数,将当前的法线向量设置为这个函数的参数所表示的值,之后调用glVertex*()时,就会将当前的法线向量分配给它所指定的顶点,由于每个顶点通常会具有不同的法线,所以这两个函数一般要交替使用
glBegin(GL_PLOYGON);
glNormal3fv(n0); //带V指的是向量版本,接受一个法线向量,不带V的版本接受三个指定的参数
glNormal3{bsidf};//这个b,s,i版本会对参数值进行线性缩放在[-1.0,1.0]之间

glVertex3fv(v0);


3:我们约定,法线向量的方向指向的是表面的外侧,此时想翻转表面的外侧内侧,将法线的正负改变一下即可


4:法线向量只表示方向,在光照计算时,它的长度会转换为1,若需要对法线向量进行规范化,可以启用glEnable(GL_NORMALIZE)功能,将其恢复为单位长度


5:OpenGL中的图元绘制未免过于复杂,每个顶点需要指定,还需要指定法线向量等等信息,为了解决这样复杂的代码,OpenGL中提供了一些顶点数组函数,允许只使用少数几个数组指定大量与顶点相关的数据,并使用少量的函数调用访问这些函数,这样只需要两个数组就能指定一个多边形的顶点的位置和法线向量了,这样还避免了共享顶点的冗杂性


6:使用顶点数组对图元进行渲染的步骤:
       1:激活(最多可达8个)数组glEnableClientState(),用于存储不同类型的数据,包括:顶点坐标、表面法线、RGBA颜色、辅助颜色、颜色索引、雾坐标、纹理坐标、多表性的边界标识
例如:需要光照时,需要启用法线向量数组glEnableClientState(GL_NORMAL_ARRAY),关闭光照状态时,可以禁用此数组,使用Client是因为这些数组被保存在客户端中
       2:将数据放入数组中,这些数组是通过他们的内存地址(指针)进行访问的,一般是glXXXPointer,如glVertexPointer(),每个顶点的间隔是利用一个数组来实现的,glVertexPointer(2,GL_INT,0,Vertices),size:2指的是顶点的坐标数量,GL_INT是数据类型,stride:0是连续顶点之间的字节偏移量,若为0,则顶点为紧密相连,Vertices为数组指针(数组名即为数组的指针)
        3:OpenGL通过这些指针从被激活的数组中获取数据

glArrayElement()通常在glBegin()和glEnd()之间调用,否则该函数就会设置所有的启用的数组的当前状态。一般情况下,在这两个函数之间,使用自启用的数组。参数为GL_INT ith,取启用的顶点数组的第i个顶点的数据(0开始)进行绘图

7:重启图元函数:glPrimitiveRestartIndex(),当开始操作大量成组的顶点数据时,可能会需要多次的调用OpenGL的绘图函数,通常可能是在渲染之前的绘图调用中所用过的相同类型的图元:比如三角形(GL_TRIANGLE_STRIP)。重启图元,可以在绘图过程中遇到图元重启索引时,从紧接着索引的顶点开始对相同类型的图元进行一次新的渲染、


8:缓冲区对象:在OpenGL中,我们需要向OpenGL传递数据,由于OpenGL是按照客户机—服务器模式设计的,所以在OpenGL需要数据的任何时候,都必须把数据从客户机内存传输到服务器。如果数据并没有被修改,或者客户机和服务器位于不同的计算机,数据的传输可能就会比较慢或是冗余的。所以OpenGL中增加了缓冲区对象(buffer object),允许应用程序显示的指定把那些数据存储在图形服务器中,3.1版本增加了统一缓冲对象(uniform buffer object)以存储成块的、用于着色器的统一变量数据。


9:顶点数组对象:由于程序增大使用更多的模型,在每帧之间需要多组顶点数组之间切换,这样对顶点的操作就会大量且重复,顶点数组对象捆绑了调用的集合,以设置顶点数组的状态,我们可以通过单次调用在不同的顶点数组之间进行修改


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python的OpenGL库是一个用于渲染图形和实现3D图形应用的强大工具。如果你是一个初学者,以下是一些学习OpenGL的指南: 1. 学习基本的计算机图形学概念:在深入学习OpenGL之前,了解一些基本的计算机图形学概念是很重要的。你可以学习像坐标系、向量、矩阵变换等基础知识。 2. 学习Python语言基础:作为一个初学者,你需要先掌握Python的基本语法和编程概念。这将帮助你更好地理解和使用OpenGL库。 3. 安装OpenGL库:在开始之前,你需要确保你的计算机上已经安装了OpenGL库。你可以使用pip来安装PyOpenGL库。 4. 学习OpenGL的核心知识:一旦你准备好了,可以开始学习OpenGL的核心知识,如顶点缓冲对象(VBO)、着色器(programs)、着色器语言(GLSL)等。掌握这些基本概念对于理解和使用OpenGL非常重要。 5. 编写简单的OpenGL程序:接下来,你可以开始编写一些简单的OpenGL程序来实践所学的知识。你可以从简单的绘制一些基本图形开始,然后逐渐扩展到更复杂的场景和效果。 6. 学习OpenGL的高级特性:一旦你熟悉了OpenGL基本知识,你可以探索一些更高级的主题,如光照、纹理映射、深度测试、投影等。这将帮助你创建更逼真和交互式的3D图形应用。 7. 参考文档和教程:除了上述的自学方法外,你还可以参考一些优秀的OpenGL文档和教程。一些推荐的资源包括OpenGL官方文档、PyOpenGL官方文档、学习OpenGL的在线教程等。 记住,学习OpenGL需要时间和实践。通过不断地编写代码和实验,你将逐渐掌握OpenGL的技能并创建出令人惊叹的图形应用。祝你好运!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MISAYAONE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值