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

Posted

技术标签:

【中文标题】将一组 3d 点渲染为矩形,同时保持纵横比【英文标题】:Render a set of 3d points as rectangles while maintaining aspect ratio 【发布时间】:2020-06-16 14:49:57 【问题描述】:

我有一组 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();

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

虽然每个矩形的位置都正确,但它们的大小是关闭的。我做错什么了?应该怎么做才能达到第一张图片的效果?

【问题讨论】:

【参考方案1】:

事实证明,当我在阴影中搜索问题时,我还在 c++ 代码中将大小统一与纵横比相乘。

【讨论】:

以上是关于将一组 3d 点渲染为矩形,同时保持纵横比的主要内容,如果未能解决你的问题,请参考以下文章

AutoLayout约束以适应矩形内的视图,保持一定的纵横比(以编程方式)

jquery animate 使用方形矩形图像创建缩小效果以适应窗口宽度或高度并保持纵横比

重建图像中矩形对象的纵横比

iMessage App如何调整图像大小并保持纵横比

枕头调整图像大小 - 保持纵横比

ImageView 填充父母的宽度或高度,但保持纵横比