Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Algunos problemas al dibujar un brazo robótico con opengl

Algunos problemas al dibujar un brazo robótico con opengl

Respuesta primero

Pregunta 3. La llamada a este par de funciones es para garantizar que la transformación entre ellas no afectará a ningún otro dibujo. Por ejemplo, no se llamará cuando. dibujando el primer cubo. glPushMatrix() y glPopMatrix(); Puedes ver el efecto de dibujo más tarde. De hecho, es para guardar la matriz actual y restaurar la matriz actual. . . Si no lo he explicado claramente, vuelva a preguntar.

Pregunta 1. OpenGL es un mecanismo de canalización y las transformaciones se aplican a los dibujos posteriores en orden, por lo que glutWireCube?(1.0);

glScalef? (2.0,?0.4,?1.0);//Esta transformación no actuará en su punto de coordenadas anterior

Pregunta 2, en lo que respecta a la parte superior del brazo, la dirección X del El cubo escalado tiene dos unidades de largo. Si haces la rotación directamente, girará alrededor del centro de la dirección X del cubo, así que primero muévelo una unidad hacia la derecha, luego gíralo alrededor del extremo izquierdo del cubo y luego muévelo. retroceda una unidad. . . Gracias a la combinación de glPushMatrix() y glPopMatrix();, la transformación de la parte superior del brazo actúa en realidad sobre el antebrazo. Al dibujar el antebrazo, primero muévalo hacia la derecha para asegurarse de que gire alrededor del extremo izquierdo en lugar del centro, y luego muévalo una unidad hacia la derecha para conectarlo al extremo derecho del cubo de la parte superior del brazo.

El código publicado a continuación tiene sangría según glPushMatrix() y glPopMatrix() para ver si es más fácil de ver 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();