我刚刚在Win32 C++中开始使用OpenGL编程,所以对我来说不要太难:)我现在一直在徘徊NeHe教程和"红皮书",但我很困惑.到目前为止,我已经能够设置一个OpenGL窗口,绘制一些三角形等,没问题.但是现在我想建立一个模型并从不同角度查看它.我们也是:
将模型加载到内存中(在堆上的结构中保存三角形/四边形坐标),在每个场景渲染中,我们使用所有东西绘制到屏幕上glVertex3f,依此类推.
使用glVertex3f等加载/绘制模型一次,我们只需更改每个场景中的查看位置即可.
其他...?
在我看来,从我到目前为止阅读的所有内容来看,选项1是最合理的,但它似乎有点呃......愚蠢!我们必须决定哪些对象是可见的,并且只绘制那些对象.这不是很慢吗?选项2可能看起来更有吸引力:)
编辑:感谢所有帮助,我决定做的事:从文件中读取我的模型,然后将其加载到使用GPU的内存glBufferData,然后使用数据反馈到渲染功能glVertexPointer和glDrawArrays.
首先你需要了解的是,OpenGL实际上并不理解术语"模型",所有OpenGL看到的都是一个顶点流,并且根据当前模式,它使用这些顶点流将三角形绘制到屏幕上.
每个框架绘制迭代遵循一些这样的轮廓:
OpenGL不记得那里发生了什么.有一些设施,称为显示列表,但它们无法存储所有类型的命令 - 它们也被弃用并从最近的OpenGL版本中删除.立即模式命令glBegin,glEnd,glVertex,glNormal和glTexCoord也已被删除.
因此,我们的想法是将一些数据(纹理,顶点数组等)上传到OpenGL缓冲区对象中.但是,只有纹理才能被OpenGL直接理解为它们(图像).所有其他类型的缓冲区都要求您告诉OpenGL如何处理它们.这是通过调用 gl {Vertex,Color,TexCoord,Normal,Attrib}指针来设置数据访问参数和glDraw {Arrays,Elements}来触发OpenGL获取要提供给光栅化器的顶点流来完成的.
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |