我试图使用GLSL顶点着色器移动我的3D对象。它有点工作,它会在x和y轴上移动细粒但是它并没有真正在z轴上移动但是它确实做了一些事情,因为如果我向前或向后走太远,它会使对象消失。我想我可能使用了错误的方法。
我的顶点着色器文件:
uniform vec3 offset;
void main(){
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform() + vec4(offset, 0);
}
我用来发送坐标的行:
GL20.glUniform3f(offsetUniformLocation, x, y, z);
我只想移动物体。就像glTranslatef一样(但是这已被弃用,所以我试图避免使用它)。感谢。
答案 0 :(得分:1)
gl_Position
位于屏幕坐标。
x
或y
会在屏幕上水平或垂直移动顶点(分别)。z
将更改深度值(用于深度检查),并可能将顶点移出相机的框。在屏幕坐标中,世界的可见部分是一个[-1,1] x [-1,1] x [-1,1]的框。因此,如果z超出此范围,则您的顶点不再可见。 (确切地说,将position.w替换为1)您可能想要在世界坐标中移动顶点。如何操作取决于ftransform()
功能。