我有一组3d点,我想将每个点渲染为矩形(为方便起见)。我希望这些矩形从某种意义上模拟3d对象的行为,以确保它们相对于相机保持宽高比。基本上我希望他们做这样的事情:
这是我的工作:在顶点着色器中,我基本上什么也不做,只是将顶点向下传递到管道中
gl_Position = vec4(vtx_position, 1.0);
[在几何着色器中,我尝试通过将输入顶点投影到模型视图空间来生成这些矩形,然后生成与输入具有相同偏移量的4个输出顶点,并在将它们与投影矩阵相乘后发出它们:
uniform mat4 MV;
uniform mat4 PROJ;
uniform float size;
position = MV * gl_in[0].gl_Position;
gl_Position = position;
gl_Position.xy += vec2(-size, -size);
gl_Position = PROJ * gl_Position;
EmitVertex();
gl_Position = position;
gl_Position.xy += vec2(-size, size);
gl_Position = PROJ * gl_Position;
EmitVertex();
gl_Position = position;
gl_Position.xy += vec2(size, -size);
gl_Position = PROJ * gl_Position;
EmitVertex();
gl_Position = position;
gl_Position.xy += vec2(size, size);
gl_Position = PROJ * gl_Position;
EmitVertex();
最后在片段着色器中,我只用颜色填充它们。但是在输出上我得到这样的东西:
虽然每个矩形的位置正确,但是它们的大小已关闭。我做错什么了?要如何获得如第一张图所示的结果?
事实证明,当我在阴影中搜索问题时,我也在C ++代码中将大小均匀乘以宽高比。