繁体   English   中英

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

[英]What is this vertex shader doing?

我最近接手了一个几个月前被团队成员停滞不前的项目。 在尝试提高自己的速度时,我遇到了这个顶点着色器,我很难理解它的作用:

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;

我似乎找不到解释此问题的文档。

有人可以快速说明此着色器的功能吗?

我似乎找不到解释此问题的文档。

GLSL规范非常清楚选择毛刺的方式。

着色器基本上是在从vec4中拾取两个轴的钝化方式。 请注意,选择后该point的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);

因此,仅从输入顶点中选择两个坐标。 我不能说为什么需要这样做。

之后的x,y,z和w的顺序。 确定从gl_Vertex的x,y,z和w到点的x,y,z和w的映射。

这称为sw流。 point = gl_Vertex等效于point = gl_Vertex.xyzw point = gl_Vertex.yxzw产生一个等效于gl_Vertex的点,其中x和y值互换。

暂无
暂无

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

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