2013-08-15 1 views
0

У меня есть 3D-куб (8 вершин), хранящийся в gl.glCallList(i) (i положения), каждый из которых display() вызова изменяет его вершины местоположения константы (для все его х, у, z зоны) с использованием gl.glTranslatef() -Как gl.glTranslatef() влияет на определенную координату вершин?

float tranX , tranY , tranZ ; 
public void display(GLAutoDrawable gLDrawable) { 
    final GL gl = gLDrawable.getGL(); 
    gl.glLoadIdentity(); 
    gl.glPushMatrix(); 
    gl.glTranslatef(tranX ,tranY ,tranZ); 
    gl.glCallList(i); 
    gl.glPopMatrix(); 
    tranX += 0.05; 
    tranY += 0.05; 
    tranZ += 0.05; 
} 

Давайте посмотрим на определенную вершину, состоящую из x, y и z, как ее координата будет затронута после одного вызова gl.glTranslatef(tranX ,tranY ,tranZ)?

Мне это нужно, чтобы узнать новые координаты местоположения куба.

ответ

2

прочитал этот учебник первый: http://www.songho.ca/opengl/gl_transform.html

Вершины находится в списке отображения выталкиваются в ГПУ и преобразуются зрения модели и матриц проекции. В вашем коде используется фиксированный конвейер (старый OpenGL), и эти преобразования «магически» выполняются GL для вас.

Если вы хотите вычислить конечное положение вершин, вам нужно умножить положение вершины (каждой вершины) на нужную матрицу.

for (i = 0; i < vertex_list.length; ++i) 
    v_transformed[i] = transformation_matrix * vertex_list[i] 
+0

Итак, для 'gl.glTranslatef (tranX, tranY, tranZ)' что такое 'transform_matrix'? – URL87

+0

@ URL87 http://www.songho.ca/opengl/gl_matrix.html, матрица - это массив 4x4 поплавков, в вашем случае вы можете переводить объекты просто addig transX, transY, transZ в положение вершин. – fen