gpt4 book ai didi

c++ - 如何在三角形 segmentation 评估着色器中插入 UV 贴图坐标?

转载 作者:行者123 更新时间:2023-11-30 05:03:35 25 4
gpt4 key购买 nike

我试图在我的 TES 中以这种方式插入 UV 坐标,但没有成功。进行UV坐标插值的正确方法是什么?我说我正在使用三角形镶嵌。

#version 450 core

layout (triangles, equal_spacing, cw) in;

in vec2 UV_tcs[];
out vec2 UV_tes;

void main()
{
gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position +
gl_TessCoord.y * gl_in[1].gl_Position +
gl_TessCoord.z * gl_in[2].gl_Position );

UV_tes = gl_TessCoord.x * UV_tcs[0] + gl_TessCoord.y * UV_tcs[1];

}

最佳答案

在您的情况下,曲面 segmentation 基元的类型是 triangle

layout (triangles, equal_spacing, cw) in;

并且输入变量 UV_tcs 是每个顶点(而不是每个面片)。参见 Tessellation Control Shader - OutputsTessellation Evaluation Shader - Inputs .

in vec2 UV_tcs[];


参见 Khronos OpenGL wiki - Tessellation - Triangles

Each vertex generated and sent to the TES will be given Barycentric coordinates as the gl_TessCoord input. This coordinate defines where this vertex is located within the abstract triangle patch. The barycentric coordinates for the 3 vertices of the abstract triangle patch are shown in the diagram. All other vertices will be specified relative to these.

To perform linear interpolation between 3 values, at each of the three vertices, you would do this:

vec3 accum = vec3(0.0f)
accum += gl_TessCoord[0] * value[0]
accum += gl_TessCoord[1] * value[1]
accum += gl_TessCoord[2] * value[2]


这意味着必须根据 Barycentric coordinates 对属性进行插值。 (gl_TessCoord.xyz) 的三角形基元,独立于属性的类型。

你必须像你为位置 (gl_in[].gl_Position) 那样做,像这样改变你的代码:

UV_tes = 
gl_TessCoord.x * UV_tcs[0] +
gl_TessCoord.y * UV_tcs[1] +
gl_TessCoord.z * UV_tcs[2];

关于c++ - 如何在三角形 segmentation 评估着色器中插入 UV 贴图坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49351951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com