C++ 这个顶点着色器在做什么?

C++ 这个顶点着色器在做什么?,c++,opengl,glsl,vertex-shader,C++,Opengl,Glsl,Vertex Shader,我最近接手了一个项目,但几个月前一个团队成员退出了这个项目。当我试图让自己跟上速度时,我遇到了这个顶点着色器,我很难理解它在做什么: uniform int axes; varying vec4 passcolor; void main() { // transform the vertex vec4 point; if (axes == 0) { point = gl_Vertex; } else if (axes == 1) { point = gl_V

我最近接手了一个项目,但几个月前一个团队成员退出了这个项目。当我试图让自己跟上速度时,我遇到了这个顶点着色器,我很难理解它在做什么:

uniform int axes;
varying vec4 passcolor;

void main()
{
  // transform the vertex
  vec4 point;
  if (axes == 0) {
     point = gl_Vertex;
  } else if (axes == 1) {
     point = gl_Vertex.xzyw;

  } else if (axes == 2) {
     point = gl_Vertex.xwzy;

  } else if (axes == 3) {
      point = gl_Vertex.yzxw;

  } else if (axes == 4) {
     point = gl_Vertex.ywxz;

  } else if (axes == 5) {
     point = gl_Vertex.zwxy;
  }

  point.z = 0.0;
  point.w = 1.0;

  // eliminate w point
  gl_Position = gl_ModelViewProjectionMatrix * point;

 passcolor = gl_Color;
}
我想更好地理解以下几行:

point = gl_Vertex.xwzy;
我似乎找不到解释这一点的文档


有人能快速解释一下这个着色器在做什么吗?

后面的x、y、z和w的顺序。确定从gl_顶点的x、y、z和w到点的x、y、z和w的映射


这被称为swizzling
point=gl_顶点
相当于
point=gl_顶点.xyzw
point=gl_顶点。yxzw
生成一个与gl_顶点等价的点,x和y值交换。

后的x、y、z和w顺序。确定从gl_顶点的x、y、z和w到点的x、y、z和w的映射

这被称为swizzling
point=gl_顶点
相当于
point=gl_顶点.xyzw
point=gl_顶点。yxzw
生成一个与gl_顶点等价的点,x和y值交换

我似乎找不到解释这一点的文档

这一点非常清楚

着色器的基本功能是从
vec4
中拾取两个轴。请注意,
点的Z和W在选择后被覆盖。根据所有权利,可以将其改写为:

vec2 point;
if (axes == 0) {
   point = gl_Vertex.xy;
} else if (axes == 1) {
   point = gl_Vertex.xz;
} else if (axes == 2) {
   point = gl_Vertex.xw;
} else if (axes == 3) {
   point = gl_Vertex.yz;
} else if (axes == 4) {
   point = gl_Vertex.yw;
} else if (axes == 5) {
   point = gl_Vertex.zw;
}

gl_Position = gl_ModelViewProjectionMatrix * vec4(point.xy, 0.0, 1.0);
因此,它只是从输入顶点选择两个坐标。我说不清它为什么要这么做

我似乎找不到解释这一点的文档

这一点非常清楚

着色器的基本功能是从
vec4
中拾取两个轴。请注意,
点的Z和W在选择后被覆盖。根据所有权利,可以将其改写为:

vec2 point;
if (axes == 0) {
   point = gl_Vertex.xy;
} else if (axes == 1) {
   point = gl_Vertex.xz;
} else if (axes == 2) {
   point = gl_Vertex.xw;
} else if (axes == 3) {
   point = gl_Vertex.yz;
} else if (axes == 4) {
   point = gl_Vertex.yw;
} else if (axes == 5) {
   point = gl_Vertex.zw;
}

gl_Position = gl_ModelViewProjectionMatrix * vec4(point.xy, 0.0, 1.0);
因此,它只是从输入顶点选择两个坐标。我说不清它为什么要这么做