现代 OpenGL 颜色
我注意到旧代码有 GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR 等带有 glMaterialfv 的输入。这些在现代 GLSL 代码中是如何替换的?
例如,假设导入模型的库(Assimp)为此类颜色类别提供直接值,它们仍然可以直接使用(在核心上下文上)吗?
I noticed old code has GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR etc. inputs with glMaterialfv. How are those replaced in modern GLSL code?
e.g. Assuming a library importing models (Assimp) gives direct values to such color categories , can they be still used directly (on core Context)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,至少是这样(当然,在现代代码中,您在着色器中处理大部分计算)。
一种典型的可能性是对环境颜色、灯光位置、眼睛位置等使用
uniform
。然后设置几个variable
将用于将漫反射颜色和镜面反射颜色从顶点着色器传递到片段着色器。您的顶点着色器根据uniform
输入计算这些变化
的值。然后,片段着色器接收(例如)纹理和上面提到的
变化
,并将它们组合在一起(以及您可能需要的任何其他输入)以生成片段的最终颜色(它是分配给gl_FragColor
)。Yes, at least sort of (though, of course, in modern code, you handle most of that computation in shaders).
One typical possibility is to use
uniform
s for your ambient color(s), light position(s), eye position, etc. Then set up a couple ofvarying
s that will be used to pass a diffuse color and specular color from your vertex shader to your fragment shader. Your vertex shader computes values for thosevarying
s based on theuniform
inputs.The fragment shader then receives (for example) a texture and the
varying
s mentioned above, and combines them together (along with any other inputs you might want) to produce a final color for the fragment (which it assigns togl_FragColor
).