现代3D图形编程学习--opengl使用不同的缓存对象(译者添加)
2017-04-15 09:29
429 查看
现代3D图形编程学习系列翻译地址
http://www.cnblogs.com/grass-and-moon/category/920962.html
于是将上一章中的
同时display中的代码也需要进行如下的修改:
http://www.cnblogs.com/grass-and-moon/category/920962.html
opengl使用不同的缓存对象
在设置颜色一章中,我们使用了一个缓存对象来存储点和颜色的信息。那么我们有没有可能,将点和颜色的信息分开存储呢?这在实际应用中也许可以使得各个属性之间保持相互的独立。本章补充内容需要做的事情就是这个。相对于上一章需要改变的内容有
顶点属性和颜色分别独立存储:const float vertex[] = { 0.0f, 0.5f, 0.0f, 1.0f, 0.5f, -0.366f, 0.0f, 1.0f, -0.5f, -0.366f, 0.0f, 1.0f, }; const float color[] = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f };
Vertex Array Object
上一章中,绘制图像所需的数据都存储在Vertex Buffer Object中,然后利用glVertexAttribPointer来告诉opengl该缓存对象中的哪个数据段是顶点位置属性,哪些数据段是颜色属性。如果想要将多个属性分别存储于独立的VBO中,那么此处就需要VAO出马上任了。VAO能够用来存储多个VBO对象的对象。它被设计用来存储用于完成对象渲染所需要的信息:这里包括,数据,数据格式,以及不同的数据对应的着色器中的location。
于是将上一章中的
InitializeVertexBuffer改成
InitializeVAO
void InitializeVAO() { glGenVertexArrays(1, &vao); glBindVertexArray(vao); glGenBuffers(1, &positionBufferObject); glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject); glBufferData(GL__ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW); glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0); glGenBuffers(1, &colorBufferObject); glBindBuffer(GL_ARRAY_BUFFER, colorBufferObject); glBufferData(GL_ARRAY_BUFFER, sizeof(colorData), colorData, GL_STATIC_DRAW); glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); }
同时display中的代码也需要进行如下的修改:
void display() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); program.UseProgram(); glBindVertexArray(vao); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glDrawArrays(GL___TRIANGLES, 0, 3); glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); glUseProgram(0); glutSwapBuffers(); }
相关文章推荐
- 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
- Qt OpenGL:学习现代3D图形编程之四,透视投影
- Qt OpenGL:学习现代3D图形编程之一,画一个三角形
- Qt OpenGL:学习现代3D图形编程之三,移动三角形
- Qt OpenGL:学习现代3D图形编程之四,透视投影浅析
- Qt OpenGL:学习现代3D图形编程之二,玩转色彩
- 现代3D图形编程学习-关于本书(译)
- 现代3D图形编程学习-关于本书(译)
- 现代3D图形编程学习-基础简介(1) (译)
- 现代3D图形编程学习-环境设置
- 现代3D图形编程学习-关于本书(译)
- 现代3D图形编程学习-设置三角形颜色(译)
- 现代3D图形编程学习-你好,三角形(译)
- 现代3D图形编程学习-基础简介(2) (译)
- 使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝
- 使用Python和Blender来学习3D编程
- OpenGL_Qt学习笔记之_04(3D图形的绘制和旋转)
- 自己在项目中的学习总结:利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口
- 瓦片地图学习笔记一 编辑器使用及地图添加,对象层应用
- 使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝