将一组 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约束以适应矩形内的视图,保持一定的纵横比(以编程方式)