现代3D图形编程学习系列翻译地址

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();
}

最新文章

  1. JS简单解决并发量
  2. Coursera Machine Learning: Regression 证书
  3. 在windows 下安装启动redis
  4. 每天一个linux命令(52):ifconfig命令
  5. 十一个行为模式之责任链模式(Responsible Chain Pattern)
  6. MFCButton Memory leak(内存泄露问题)
  7. 写sql语句分别按日,星期,月,季度,年统计
  8. swift:创建集合视图UICollectionView
  9. Database and models
  10. postgresql 字符串拼接"||“的使用
  11. Mediator 模式
  12. Memory Region
  13. 利用border和伪类画出三角形 ps:好久没写博客了。。。
  14. Cortex-M3 动态加载一(地址无关代码实现)
  15. 2-SAT 及 一点习题
  16. Xib学习之(1)
  17. ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)
  18. Chapter 4 Invitations——17
  19. socket.io 实现简易聊天
  20. getResource()和getResourceAsStream以及路径问题【转】【补】

热门文章

  1. CGContext 解释
  2. 说说分析bug的一些心得
  3. JAVA基础知识之网络编程——-基于NIO的非阻塞Socket通信
  4. OC 实例方法和类方法区别
  5. 【Android 界面效果18】Android软件开发之常用系统控件界面整理
  6. 使用Express搭建服务器
  7. 场景示例 Nginx 访问日志
  8. Gradle学习之使用java plugin
  9. ice使用过程遇到的问题
  10. 关于Monkey的一切都在这里
  11. 听翁恺老师mooc笔记(14)--格式化的输入与输出
  12. pythong+selenium自动创建随笔
  13. matlab练习程序(旋转矩阵、欧拉角、四元数互转)
  14. Learning WCF:Life Cycle of Service instance
  15. Python集成开发工具Pycharm的使用方法:复制,撤销上一步....
  16. deeplearning.ai学习seq2seq模型
  17. 【leetcode 简单】 第九十六题 最长回文串
  18. 使用 log4js UDP 发送数据到 logstash
  19. Web Api 端点设计 与 Oauth
  20. [C++基础] tips