【问题标题】:OpenGL Per Pixel Coloring with GLSL Shaders使用 GLSL 着色器的 OpenGL 每像素着色
【发布时间】:2014-02-24 02:12:53
【问题描述】:

是否可以使用 GLSL 着色器来计算每个像素而不是每个顶点的顶点颜色?因为它看起来有点像逐顶点光照(有点丑)。

例如

我有什么:

它应该是什么样子:

【问题讨论】:

    标签: opengl colors glsl pixel vertex


    【解决方案1】:

    是否可以使用 GLSL 着色器来计算每个像素的顶点颜色 [...]

    “每个像素的顶点颜色”实际上没有意义。计算的是片段的颜色(这是像素​​光栅的光栅化结果,但尚未影响帧缓冲区像素)。并且该颜色总是按片段计算 - 在“每个顶点照明”设置中,该颜色只是通过在图元的每个顶点处插入来自照明的颜色来计算的(又名 Gouraud 着色) ,可能会进一步操作它(例如通过纹理映射)。

    您在这里的意思可能是“是否可以使用 GLSL 着色器来计算每个片段的光照均衡(Phong 着色,每像素光照)?”答案是:是的。这可以在片段着色器中完成。

    因为它看起来有点像逐顶点光照(有点丑)。

    什么看起来像这样?固定功能GL?是的,它是这样指定的。旧的固定功能照明是按顶点完成的,当时只支持平面和 Gouraud 着色。着色器确实改变了这一点。

    【讨论】:

    • 感谢您的回答。能给我一个代码示例吗?
    • @user3075425:你应该看看arcsynthesis tutorialIllumination Chapter,尤其是关于Vertex Point LightsFragment Lighting 的部分,它们都带有两个变体的示例着色器。
    • 我仍然不太明白如何准确地做到这一点。因为在每像素光照中,计算是在片段着色器中进行的,但在 glColor 片段着色器中则不需要计算。我错了吗?
    • @user3075425:我不确定你的问题是否正确,什么是“glColor 着色器”?当你不做光照时,你不必计算它,这应该是显而易见的。
    • 例如,如果我将 gl_FragColor 设置为 gl_Color。我想你的问题有点不对劲,我没有照明问题。问题是我使用 glColor3f(...) 设置的顶点颜色。
    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多