#include <windows.h>
#include <gl\gl.h>
typedef struct
{
GLfloat x,y,z;
} Ponto3D;
// ***********************************************
// void calcula_ponto(Ponto3D *p, Ponto3D *out)
//
// Esta função calcula as coordenadas
// de um ponto no sistema de referência do
// universo (SRU), ou seja, aplica as rotações,
// escalas e translações a um ponto no sistema
// de referência do objeto SRO.
//
// ***********************************************
void calcula_ponto(Ponto3D *p, Ponto3D *out)
{
GLfloat ponto_novo[4];
GLfloat matriz_gl[4][4];
int i;
glGetFloatv(GL_MODELVIEW_MATRIX,&matriz_gl[0][0]);
for(i=0;i<4;i++)
{
ponto_novo[i]= matriz_gl[0][i] *
p->x+
matriz_gl[1][i] * p->y+
matriz_gl[2][i] * p->z+
matriz_gl[3][i];
}
out->x=ponto_novo[0];
out->y=ponto_novo[1];
out->z=ponto_novo[2];
}
Ponto3D p1, p2;
// ***********************************************
// void Desenha ()
//
//
// ***********************************************
void Desenha ()
{
Ponto3D p1_new, p2_new;
p1.x = 10; p1.y =
10;
p1.z = 20;
p1.x = 20; p1.y =
10;
p1.z = 20;
glRotate3f(10,0,0,1);
glBegin(GL_LINES);
//desenha a linha
glVertex3f(p1.x,
p1.y, p1.z);
glVertex3f(p2.x,
p2.y, p2.z);
// aplica as
transformações
geométricas
// aos pontos
da linha
calcula_ponto(&p1,
&p1_new);
calcula_ponto(&p2,
&p2_new);
//imprime p1_new
e p2_new
// .......
glEnd();
}