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的映射
这被称为swizzlingpoint=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);
因此,它只是从输入顶点选择两个坐标。我说不清它为什么要这么做