2014-09-07 4 views
0

Я пытаюсь переместить мой 3D-объект с помощью вершинного шейдера GLSL. Это вроде работает, и он перемещает штрафы на оси x и y, но на самом деле он не движется по оси z, но он делает что-то, поскольку он заставляет объект исчезать, если я иду слишком далеко вперед или назад. Я думаю, что я использую неправильный метод.GLSL перемещение позиции 3D-модели

Мой вершинные шейдеры файл:

uniform vec3 offset; 

void main(){ 
    gl_TexCoord[0] = gl_MultiTexCoord0; 
    gl_Position = ftransform() + vec4(offset, 0); 
} 

Линия я использую, чтобы отправить координаты: GL20.glUniform3f(offsetUniformLocation, x, y, z);

Я просто хочу, чтобы переместить объект. Как и glTranslatef (однако это устарело, поэтому я стараюсь избегать его использования). Благодарю.

ответ

1

gl_Position находится в координатах экрана .

  • Изменение x или y будет перемещать вершину (соответственно) по горизонтали или вертикали на экране.
  • Изменение z изменит значение глубины (используется для проверки глубины) и может перемещать вершину из коробки. Видимая часть мира в координатах экрана представляет собой поле [-1,1] x [-1,1] x [-1,1]. Поэтому, если z вне этого диапазона, ваша вершина больше не видна. (Заменить 1 на position.w, чтобы быть точным)

Вы, вероятно, хотите, чтобы переместить вершину в мировых координатах. Как это сделать, зависит от функции ftransform().

Смежные вопросы