Вписывание в экран
Вот пример кода
Цитата:
void CALLBACK resize(int width,int height)
{
glViewport(0,0,width,height);
if(height==0)
height=1;
GLfloat aspectRatio;
aspectRatio=(GLfloat)width/(GLfloat)height;
glMatrixMode(GL_PROJECTION );
glLoadIdentity();
if(width<=height)
glOrtho(-5.0,5.0, -5.0/aspectRatio,5.0/aspectRatio, 10.0,-10.0);
else
glOrtho(-5.0*aspectRatio,5.0*aspectRatio, -5.0,5.0, 10.0,-10.0);
gluLookAt( 0,0,5.0, 0,0,0, 0,1.0,0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}
void CALLBACK display(void)
{
GLfloat m[] = { 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f };
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glKordOs();
m[1]=glMove;
m[15]=glSceneInto;
// m[2]=glMove;
// m[3]=glMove;
if(y==false)
{
glPushMatrix();
glLoadMatrixf(m);
glTranRotMatrix();//[COLOR="Red"] в этой функции происходит преобразование сцены т.е. вращение и перемещение и маштабирование и построение, для него какбы и нужно организовать вписывание после произвольного действия над сценой[/COLOR]
glPopMatrix();
}
{
glViewport(0,0,width,height);
if(height==0)
height=1;
GLfloat aspectRatio;
aspectRatio=(GLfloat)width/(GLfloat)height;
glMatrixMode(GL_PROJECTION );
glLoadIdentity();
if(width<=height)
glOrtho(-5.0,5.0, -5.0/aspectRatio,5.0/aspectRatio, 10.0,-10.0);
else
glOrtho(-5.0*aspectRatio,5.0*aspectRatio, -5.0,5.0, 10.0,-10.0);
gluLookAt( 0,0,5.0, 0,0,0, 0,1.0,0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}
void CALLBACK display(void)
{
GLfloat m[] = { 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f };
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glKordOs();
m[1]=glMove;
m[15]=glSceneInto;
// m[2]=glMove;
// m[3]=glMove;
if(y==false)
{
glPushMatrix();
glLoadMatrixf(m);
glTranRotMatrix();//[COLOR="Red"] в этой функции происходит преобразование сцены т.е. вращение и перемещение и маштабирование и построение, для него какбы и нужно организовать вписывание после произвольного действия над сценой[/COLOR]
glPopMatrix();
}
я в этом деле еще не очень секу, поэтому хелпми.
спасибо, если появятся сочуствующие по этому вопросу :)
Вписать конечно же в gui окно, а не в экран :\
Задача имеет бесконечное множество решений. Одно из них - направить камеру на объект, после чего совершить над камерой те же самые преобразования.
Ладно, как сделать так чтобы после произвольного действия над обьектом спроецировать на плоскость Оху. У меня есть банальная идея найти максимвально удаленные точки по х и у затем отмасштабировать прямоугольник и его вписать както :\