我正在尝试让LOD使用镶嵌着色器。我有一个简单的球体,在开始时用5个环和5个扇区进行镶嵌。我希望球体在相机处理时增加其细节。但是,由曲面细分产生的新原始图被映射到一个平面上,我试图改变它的位置,但我无法让它工作。
以下是问题的说明:
正如你所看到的,当摄像机处于混合状态时,我没有得到一个球体。当我靠近球体时,这就是我想要的:
以下是曲面细分评估着色器中的代码:
void main(void){
float u = gl_TessCoord.x;
float v = gl_TessCoord.y;
vec4 pos0 = gl_in[0].gl_Position;
vec4 pos1 = gl_in[1].gl_Position;
vec4 pos2 = gl_in[2].gl_Position;
vec4 pos3 = gl_in[3].gl_Position;
vec4 a = mix(pos1,pos0, u);
vec4 b = mix(pos2, pos3, u);
float l = length(a - b);
vec4 position = mix(a, b, v);
gl_Position = u_transformMatrix * position;
tes_positions = (u_transformMatrix * position).xyz;
}
几何着色器:
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;
void main(void){
for(int i=0; i<3; i++){
vec4 pos = gl_in[i].gl_Position;
vec4 normal = normalize(pos);
pos = normal * u_radius;
gl_Position = u_projectionMatrix * u_viewMatrix * pos;
EmitVertex();
}
EndPrimitive();
}
感谢您的帮助!如果您还需要其他任何东西,请问我,我会发布它。
答案 0 :(得分:0)
所以@ slicer4ever找到了答案,所有的归功于他。 (顺便说一句,谢谢!)他没有SO帐户,所以他不能自己发布。
我引用他:your normalizing the vec4, which might be messing up the w component of your vertex?
就是这样,w坐标就是问题所在。
现在是输出: