我在练习期中有这个问题,我不明白。
void main(void){
int i;
for(i=0; i< gl_VerticesIn; i++){
gl_Position = gl_PositionIn[i];
EmitVertex();
}
EndPrimitive();
for(i=0; i< gl_VerticesIn; i++){
gl_Position = gl_PositionIn[i];
gl_Position.xy = gl_Position.yx;
EmitVertex();
}
EndPrimitive();
}
我一直在阅读文档,我认为这是几何着色器的一部分,我认为它反转了每个点的x和y坐标,但我没有任何方法来验证这一点。我尝试在一个程序中检查它,它在场景的颜色上略有不同,但它似乎根本没有改变几何,所以如果有人可以帮助解释这将是很棒的。谢谢!
答案 0 :(得分:0)
这确实是几何着色器的一部分。
着色器的第一部分(以第一个EndPrimitive()
结尾)是最简单的直通几何着色器,它几乎不对几何进行任何操作。
第二部分几乎相同,除了xy
的混合。它复制了几何图形,但更改了x
和y
坐标,因此它有效地镜像了连接屏幕左下角和右上角的线条上的图像。
因此,几何体在屏幕的对角线上被复制和镜像。