opengl coordinate-transformation opengl-compat

Traducción OpenGL antes y después de una rotación



coordinate-transformation opengl-compat (1)

Ahora, mi pregunta es para el codo. ¿Por qué hay una traslación hacia adelante en el eje x antes y después de la rotación?

Si desea imaginar cómo las operaciones matriciales cambian el modelo, entonces debe "leer" las operaciones en el orden inverso. Esto se debe a que la matriz actual de la pila de matrices se multiplica por la matriz especificada por la nueva operación y las matrices se almacenan en el orden de columnas principales (canal de función fija).

Comience con el cubo del codo

glutWireCube(1.0f);

Escalar el codo

glPushMatrix(); glScalef(2.0f, 0.4f, 1.0f); glutWireCube(1.0f); glPopMatrix();

Moverlo a la derecha

glTranslatef(1.0f, 0.0f, 0.0f);

Girar el codo

glRotatef(45.0f, 0.0f, 0.0f, 1.0f);

Mueve el codo girado hacia la derecha

glTranslatef(1.0f, 0.0f, 0.0f);

Dibuja el cubo del hombro

glutWireCube(1.0f);

Escalar el hombro

glPushMatrix(); glScalef(2.0f, 0.4f, 1.0f); glutWireCube(1.0f); glPopMatrix();

Mueva el brazo (codo y hombro) hacia la derecha.

glTranslatef(1.0f, 0.0f, 0.0f);

Girar el brazo

glRotatef(-15.0f, 0.0f, 0.0f, 1.0f);

Mueva el brazo a su posición final (a la izquierda)

glTranslatef(-1.0f, 0.0f, 0.0f);

El siguiente es un código (tomado de http://www.glprogramming.com/red/chapter03.html ) con respecto a cómo dibujar el brazo y el hombro de un robot y rotarlos mediante alguna entrada del usuario:

glPushMatrix(); glTranslatef (-1.0, 0.0, 0.0); glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0); glTranslatef (1.0, 0.0, 0.0); glPushMatrix(); glScalef (2.0, 0.4, 1.0); glutWireCube (1.0); glPopMatrix(); glTranslatef (1.0, 0.0, 0.0); glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0); glTranslatef (1.0, 0.0, 0.0); glPushMatrix(); glScalef (2.0, 0.4, 1.0); glutWireCube (1.0); glPopMatrix(); glPopMatrix(); glutSwapBuffers();

Entiendo el código para dibujar el hombro y rotarlo. Para el hombro: primero lo trasladamos una unidad hacia atrás a lo largo del eje x para que cuando hagamos la rotación, gire a lo largo del origen como un pivote. Luego lo trasladamos hacia atrás (hacia adelante una unidad en el eje x). Esta transformación se aplicará al cubo que se ha escalado.

Ahora, mi pregunta es para el codo. ¿Por qué hay una traslación hacia adelante en el eje x antes y después de la rotación?