繁体   English   中英

如何为2D和3D调整顶点着色器?

[英]How to adapt vertex shader for 2D and 3D?

我正在研究2D中的粒子模拟,我需要将其扩展到3D。 仅通过更改标志就可以很好地适应C ++代码以支持2D和3D,但是,我刚刚开始学习OpenGL和着色器,并且想知道是否有使我的顶点着色器通用的好方法。

到目前为止,我的着色器看起来像

in vec3 vertexPosition;
uniform mat4 MVP;

void main()
{
   gl_Position = MVP * vec4(vertexPosition.xyz,1.0);
}

在3D模式下效果很好,但是如果我使用2D模式,则需要对其进行修改。 我想解决这个问题的一种方法是仅使用2个不同的着色器,一个用于2D,一个用于3D,并用C ++中的标记选择合适的着色器,但我想知道是否有更好的方法来实现此目的,而又没有两个单独的着色器文件。

有什么建议吗?

您只需要将Z坐标设置为0,当您仅为该属性传递2个分量时,Z坐标会自动发生。

请参阅openGL Wiki上顶点规范页面的“ 顶点格式”部分:

每个属性索引代表某种类型的向量,长度为1到4个分量。 glVertexAttribPointer函数的size参数定义属性数组提供的向量中的组件数。 可以是1-4的任意数字。 请注意,大小不一定要与顶点着色器使用的大小完全匹配。 如果顶点着色器的组件少于该属性提供的组件,则多余的组件将被忽略。 如果顶点着色器具有比数组提供的组件更多的组件, 则会从XYZW组件的矢量(0,0,0,1)中为附加组件指定值 请注意,对于双精度输入(GL 4.1或ARB_vertex_attrib_64bit),具有比提供的分量更多的分量会使多余的分量具有不确定的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM