将一组3d点渲染为矩形,同时保持宽高比

问题描述 投票:0回答:1

我有一组3d点,我想将每个点渲染为矩形(为方便起见)。我希望这些矩形从某种意义上模拟3d对象的行为,以确保它们相对于相机保持宽高比。基本上我希望他们做这样的事情:

enter image description here

这是我的工作:在顶点着色器中,我基本上什么也不做,只是将顶点向下传递到管道中

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();

最后在片段着色器中,我只用颜色填充它们。但是在输出上我得到这样的东西:

enter image description here

虽然每个矩形的位置正确,但是它们的大小已关闭。我做错什么了?要如何获得如第一张图所示的结果?

c++ opengl glsl shader
1个回答
0
投票

事实证明,当我在阴影中搜索问题时,我也在C ++代码中将大小均匀乘以宽高比。

© www.soinside.com 2019 - 2024. All rights reserved.