【发布时间】:2021-10-07 09:36:13
【问题描述】:
据我了解,在顶点中计算的顶点的输入属性将根据当前像素的重心坐标进行插值。并且能够插值attributes 或计算当前像素的重心坐标是因为顶点流在顶点着色器之后转换为三角形流。当前像素点的重心坐标可以通过gl_Position提供的三角形顶点的屏幕位置和像素点位置得到。
但我很困惑如何在片段着色器中插入 in 变量。这是一个着色器的例子:
- 顶点着色器
layout(binding = 0) uniform WorldMVP {
mat4 worldMvp;
};
layout(binding = 0) uniform LightMVP{
mat4 lightMvp;
};
layout(location = 0) in vec3 aVertexPosition;
layout(location = 1) in vec3 aVertexNormal;
layout(location = 2) in vec2 aTextureCoord;
layout(location = 0) out vec4 vPositionFromLight;
layout(location = 1) out vec2 vTextureCoord;
layout(location = 2) out vec3 vNormal;
void mian()
{
gl_Position = worldMvp * vec4(aVertexPosition, 1.0);
vPositionFromLight = lightMvp * vec4(aVertexPosition, 1.0);
vTextureCoord = aTextureCoord;
vNormal = aVertexNormal;
}
- 片段着色器
layout(location = 0) in vec4 vPositionFromLight;
layout(location = 1) in vec2 vTextureCoord;
layout(location = 2) in vec3 vNormal;
layout(location = 0) out vec4 outColor;
void main()
{
outColor = vec4(1.0, 1.0, 1.0, 1.0);
}
如果插值vPositionFromLight时使用的重心坐标与插值vTextureCoord和vNormal等属性时使用的重心坐标相同,则似乎异常。因为vPositionFromLight和gl_Position被不同的MVP转化为不同的剪辑空间。
vPositionFromLight 是如何插值的?插值vPositionFromLight时使用的重心坐标是多少。
【问题讨论】:
-
@KaiBurjack 感谢您的解释。轻型MVP变换的剪辑空间的重心坐标与世界MVP变换的剪辑空间的重心坐标是否相同?
标签: opengl graphics glsl vulkan