【问题标题】:Sphere tessellation new primitves position球体镶嵌新的基元位置
【发布时间】:2015-06-23 13:52:37
【问题描述】:

我正在尝试让 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();
}

感谢您的帮助!如果您需要其他任何东西,请问我,我会发布它。

【问题讨论】:

    标签: opengl tessellation tesselation


    【解决方案1】:

    所以@slicer4ever 找到了答案,所有功劳归他所有。 (顺便谢谢你!)。不幸的是,他没有 SO 帐户,因此他不能自己发布它。 我引用他的话:your normalizing the vec4, which might be messing up the w component of your vertex?

    就是这样,w 坐标就是问题所在。

    这是现在的输出:

    【讨论】:

      猜你喜欢
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多