1
A
回答
5
取决于你想什么来实现的,什么是您当前的知识,你可以采取不同的方法。
如果您在学习GLSL的同时学习OpenGL 2.0,我建议您将Red book和Orange book作为一个集合,因为它们并驾齐驱。
如果你需要一个不太全面的指南,只是让你开始,请查看OpenGL bible。
如果我误解了你的问题,并且你已经知道OpenGL,并且想特别研究GLSL,下面是一个很好的phong shading示例,它显示了基本知识。
编译着色器源是非常简单的,
首先,你需要分配一个着色器插槽为源,就像你分配一个纹理,使用glCreateShader
:
GLuint vtxShader = glCreateShader(GL_VERTEX_SHADER);
GLuint pxlShader = glCreateShader(GL_FRAGMENT_SHADER);
之后,你需要以某种方式加载您的源代码。由于这是一个真正依赖于平台的解决方案,因此这取决于您。
获取源后,将其设置使用glShaderSource
:
glShaderSource(vtxShader, 1, &vsSource, 0);
glShaderSource(pxlShader, 1, &psSource, 0);
然后你glCompileShader
编译来源:
glCompileShader(vtxShader);
glCompileShader(pxlShader);
链接着色器给对方,首先分配使用glCreateProgram
程序,使用glAttachShader
将着色器附加到程序中,并使用glLinkProgram
链接它们:
GLuint shaderId = glCreateProgram();
glAttachShader(shaderId, vtxShader);
glAttachShader(shaderId, pxlShader);
glLinkProgram(shaderId);
然后,就像一个纹理,你把它绑定到使用glUseProgram
当前呈现阶段:
glUseProgram(shaderId);
要解除绑定,使用0的ID或其他着色器ID。
对于清理:
glDetachShader(shaderId, vtxShader);
glDetachShader(shaderId, pxlShader);
glDeleteShader(vtxShader);
glDeleteShader(pxlShader);
glDeleteProgram(shaderId);
而这大多是一切,你可以一起使用glUniform
功能的家庭与glGetUniform
设置参数为好。
相关问题
- 1. virtualenvwrapper设置有问题
- 2. GLSL 2.0属性问题
- 3. OpenGL ATI与NVIDIA GLSL问题
- 4. 耙设计有问题:设置
- 5. 有关iPhone SDK设置包的问题
- 6. 带有注释的问题
- 7. 带有Firebase问题的facebookLogin.logInWithReadPermissions
- 8. 预定义变量的GLSL设置值
- 9. 设置问题找到在没有设置案例的赢家
- 10. Ironfan设置问题
- 11. nginx设置问题
- 12. uvm_config_db设置问题
- 13. 设置python问题
- 14. IIS设置问题
- 15. 问题设置DocumentElement
- 16. Gsuite设置问题
- 17. 问题设置Virtualenv
- 18. 笨设置问题
- 19. 设置gettext问题()
- 20. 设置python问题
- 21. Siverlight设置问题
- 22. NavigationBarBarTintColor设置问题
- 23. 设置jFlex问题
- 24. Grails设置问题
- 25. Ajax设置问题
- 26. 问题设置cookies
- 27. Tomcat设置问题
- 28. 由于PHP'allow_url_fopen'设置而生成带有图像的pdf的FPDF问题
- 29. 设置属性的问题
- 30. Coin-CLP的设置问题