经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » OpenGL » 查看文章
LearnOpenGL笔记(2)三角形
来源:cnblogs  作者:Lxliiin  时间:2019/11/5 10:19:14  对本文有异议

这是学习LearnOpenGL CN教程的笔记,包括我遇到的问题和我的烂笔头。文章名与网站小节对应。

------------------------------------分割线--------------------------------------------------------------------------------------------

摆张重要的图先,蓝色的是可以编写着色器控制的部分。

 

着色器在C++字符串中的形式

 

  1. "#version 330 core\n"
  2.  
  3. "layout (location = 0) in vec3 aPos;\n"
  4.  
  5. "void main()\n"
  6.  
  7. "{\n"
  8.  
  9. "gl_Position=vec4(aPos.x,aPos.y,aPos.z,1.0);\n"
  10.  
  11. "}\n";

绘制流程

  1. //初始化缓冲数组对象
  2. unsigned int VAO; //顶点数组对象VAO
  3. unsigned int VBO; //顶点缓冲对象VBO
  4. //创建VAO
  5. glGenVertexArrays(1, &VAO);
  6. //绑定VAO
  7. glBindVertexArray(VAO);
  8. //创建VBO
  9. glGenBuffers(1, &VBO); //生成vbo和缓冲ID
  10. //缓冲绑定
  11. glBindBuffer(GL_ARRAY_BUFFER, VBO);
  12. //将数据传输到当前绑定缓冲
  13. glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  14. //第四个参数:如何管理给定的数据
  15. // GL_STATIC_DRAW :数据不会或几乎不会改变。
  16. // GL_DYNAMIC_DRAW:数据会被改变很多。
  17. // GL_STREAM_DRAW :数据每次绘制时都会改变。
  18. //解析顶点数据,设置顶点属性指针
  19. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
  20. glEnableVertexAttribArray(0);
  21. //创建着色器程序
  22. //顶点着色器
  23. unsigned int vertexShader;
  24. vertexShader = glCreateShader(GL_VERTEX_SHADER);
  25. //附加
  26. glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
  27. //编译
  28. glCompileShader(vertexShader);
  29. //检测失败
  30. int success;
  31. char infoLog[512];
  32. glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
  33. if (!success)
  34. {
  35. glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
  36. std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
  37. }
  38. //片段着色器
  39. unsigned int fragmentShader;
  40. fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  41. glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
  42. glCompileShader(fragmentShader);
  43. //片段着色器
  44. unsigned int fragmentShaderY;
  45. fragmentShaderY = glCreateShader(GL_FRAGMENT_SHADER);
  46. glShaderSource(fragmentShaderY, 1, &fragmentShaderYellowSource, NULL);
  47. glCompileShader(fragmentShaderY);
  48. shaderProgram = glCreateProgram();
  49. //附加
  50. glAttachShader(shaderProgram, vertexShader);
  51. glAttachShader(shaderProgram, fragmentShader);
  52. //链接
  53. glLinkProgram(shaderProgram);
  54. shaderYellowProram = glCreateProgram();
  55. //附加
  56. glAttachShader(shaderYellowProram, vertexShader);
  57. glAttachShader(shaderYellowProram, fragmentShaderY);
  58. //链接
  59. glLinkProgram(shaderYellowProram);
  60. //链接成功后,释放着色器对象
  61. glDeleteShader(vertexShader);
  62. glDeleteShader(fragmentShader);
  63. glDeleteShader(fragmentShaderY);
  64. //在循环渲染中绘制
  65. //渲染循环
  66. while (!glfwWindowShouldClose(window)) {
  67. //渲染指令
  68. glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
  69. glClear(GL_COLOR_BUFFER_BIT);
  70. glUseProgram(shaderProgram);
  71. glBindVertexArray(VAO);
  72. glDrawArrays(GL_TRIANGLES, 0, 3);
  73. //交换颜色缓冲,绘制显示
  74. glfwSwapBuffers(window);
  75. }

原文链接:http://www.cnblogs.com/lxliiin/p/11795272.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号