我对glsl编程很陌生。据我所知,片段着色器中的变量是从顶点着色器给出的线性插值值。这就是为什么当你把不同的颜色设置到不同的顶点时,你有一个颜色梯度。
假设我想渲染一个多边形数较低的曲面,例如一个立方体,并且我定义了顶点法线。我希望每个表面都有相同的法线,因为当法线被内插时,照明可能看起来很糟糕。
它真的像这样工作吗?是否有可能干涉这一插值过程?
发布于 2015-11-13 22:53:23
如果将法线赋值为“每个顶点”,则会对其进行内插。但这不是你为立方体所做的。立方体包含8个顶点,但你需要24个法线,这取决于你的脸。因此,对于左-下前顶点,你会为下脸,左脸和前脸指定一个自己的法线。
这和给立方体着色一样。如果希望对立方体的每个角落进行内插颜色,则只为每个顶点指定颜色。如果你想让每一面都以自己的方式着色,你需要给每个脸分配颜色。
对于操纵的部分:你可以操纵你得到的每一个输入。如果这是有意义的话是值得怀疑的。例如,为了防止插值,您可以为0..1之间的每个值设置一个if条件,并将负值设置为1.相同,如果正好为0,则设置为1。那么它应该适用于每个顶点的分配。可能需要一些尝试和错误。
为了更清楚:着色器从3个顶点的值中画出三角形。每一个都包含位置,正常,颜色,你想要的。因此,对于着色器来说,在不同的三角形中,具有相同位置的顶点是否有不同的颜色值等并不重要。插值只发生在三角形内部,因此,如果每个三角形中顶点的法线是相同的,则整个三角形具有这个法线。但要小心:使用其他绘图风格,如三角形条,使这更困难,因为他使用一个顶点定义的多个三角形。
https://stackoverflow.com/questions/33702991
复制相似问题