Удаление невидимых линий с помощью Алгоритма Робертса
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
int alpha=0, beta=0;
void CALLBACK mouse(AUX_EVENTREC *event)
{
static int x0,y0=-12345;
if(y0!=-12345)
{
alpha += event->data[AUX_MOUSEX] - x0;
beta += event->data[AUX_MOUSEY] - y0;
}
x0 = event->data[AUX_MOUSEX];
y0 = event->data[AUX_MOUSEY];
}
void CALLBACK Key_LEFT(void)
{
alpha -= 5;
}
void CALLBACK Key_RIGHT(void)
{
alpha += 5;
}
void CALLBACK Key_UP(void)
{
beta += 5;
}
void CALLBACK Key_DOWN(void)
{
beta -= 5;
}
void CALLBACK resize(int width,int height)
{
glViewport(0,0,width,height);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(-5,5, -5,5, 2,12);
gluLookAt(0,0,5, 0,0,0, 0,1,0);
glMatrixMode( GL_MODELVIEW );
}
void cubic()
{
glPushMatrix();
glColor3d(1,1,1);
auxWireCube(3);
glPopMatrix();
}
void CALLBACK display(void)
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
glRotated(alpha, 0,1,0);
glRotated(beta, -1,0,0);
cubic();
glPopMatrix();
auxSwapBuffers();
}
int main()
{
float pos[4] = {3,3,3,1};
float dir[3] = {-1,-1,-1};
GLfloat mat_specular[] = {1,1,1,1};
auxInitPosition( 50, 10, 400, 400);
auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
auxInitWindow( "Cub Seregi" );
auxIdleFunc(display);
auxReshapeFunc(resize);
auxKeyFunc(AUX_LEFT, Key_LEFT);
auxKeyFunc(AUX_RIGHT, Key_RIGHT);
auxKeyFunc(AUX_UP, Key_UP);
auxKeyFunc(AUX_DOWN, Key_DOWN);
auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSELOC, mouse);
auxMainLoop(display);
}
Помогите, пожалуйста... :)
Вполне можешь сам управлять отрисовкой.
Нет. Координаты преобразовываются. После вызова glRotated все объекты отрисовываются с поворотом (преобразованием координат по мартице). Это сделано для того чтобы не пересчитывать вручную координаты всех объектов. Вот пример вращений от NeHe