
Шустрый

Профиль
Группа: Участник
Сообщений: 66
Регистрация: 1.6.2006
Репутация: нет Всего: нет
|
Здравствуйте! Сразу к сути: на форме имеется четыре компнента типа TOpenGLPanel, в каждом рисуется одно и то же, но вид с разных сторон. (это в идеале так) Все панели имеют общие функции: Код | void __fastcall TfrmMain::glPro3dInit(TObject *Sender) { glViewport(0,0,(GLsizei)glPro3d->Width,(GLsizei)glPro3d->Height); kglInit(); }
void __fastcall TfrmMain::glPro3dResize(TObject *Sender) { glViewport(0,0,(GLsizei)glPro3d->Width,(GLsizei)glPro3d->Height); kglResize(); }
void __fastcall TfrmMain::glPro3dPaint(TObject *Sender) { glMatrixMode(GL_PROJECTION); glLoadIdentity();
glOrtho(-MaxSize,MaxSize,-MaxSize,MaxSize,-MaxSize,MaxSize);
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix();
glTranslated(0.0, 0.0, -Dal); glRotatef(RotX, 1.0, 0.0, 0.0); glRotatef(RotY, 0.0, 1.0, 0.0); glRotatef(RotZ, 0.0, 0.0, 1.0);
kglPaint();
glPopMatrix(); }
|
RotX,RotY,RotZ - устанавливаются ползунками MaxSize считатеся при перерисовке. в принципе такой же параметр. Используемые функции: Код | void __fastcall TfrmMain::kglInit() { glMatrixMode(GL_PROJECTION); glLoadIdentity();
glOrtho(-MaxSize,MaxSize,-MaxSize,MaxSize,-MaxSize,MaxSize);
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glEnable(GL_DEPTH_TEST); glClearColor(1.0,1.0,1.0,1.0);
if (optVerticies->Checked) glPolygonMode(GL_FRONT_AND_BACK,GL_POINT); else if (optWireframe->Checked) glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); else if (optSolid->Checked) glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); if(chkAliasing->Checked) { glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_POINT_SMOOTH); glHint(GL_POINT_SMOOTH_HINT,GL_NICEST); glEnable(GL_LINE_SMOOTH); glHint(GL_LINE_SMOOTH_HINT,GL_NICEST); glEnable(GL_POLYGON_SMOOTH); glHint(GL_POLYGON_SMOOTH_HINT,GL_NICEST); glLineWidth(1.0); } else { glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); glDisable(GL_POINT_SMOOTH); glDisable(GL_LINE_SMOOTH); glDisable(GL_POLYGON_SMOOTH); glLineWidth(1.0); }
glShadeModel(GL_SMOOTH); }
void __fastcall TfrmMain::kglResize() { glMatrixMode(GL_PROJECTION); glLoadIdentity();
glOrtho(-MaxSize,MaxSize,-MaxSize,MaxSize,-MaxSize,MaxSize);
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }
void __fastcall TfrmMain::kglPaint() { // Оси координат glColor3f(0.0,0.0,0.0); glBegin(GL_LINES); glVertex3f(-MaxSize,0.0,0.0); glVertex3f( MaxSize,0.0,0.0); glEnd(); glBegin(GL_LINES); glVertex3f(0.0,-MaxSize,0.0); glVertex3f(0.0, MaxSize,0.0); glEnd(); glBegin(GL_LINES); glVertex3f(0.0,0.0,-MaxSize); glVertex3f(0.0,0.0, MaxSize); glEnd();
//Рисование куба glBegin(GL_POLYGON); glColor3f(0.0,0.0,1.0); glVertex3f( 1.0, 1.0, 1.0); glVertex3f( -1.0, 1.0, 1.0); glVertex3f( -1.0, -1.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); glEnd();
glBegin(GL_POLYGON); glColor3f(0.0,1.0,0.0); glVertex3f( -1.0, -1.0, 1.0); glVertex3f( -1.0, 1.0, 1.0); glVertex3f( -1.0, 1.0, -1.0); glVertex3f( -1.0, -1.0, -1.0); glEnd();
glBegin(GL_POLYGON); glColor3f(0.0,1.0,1.0); glNormal3f( 0.0, -1.0, 0.0); glVertex3f( -1.0, -1.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); glVertex3f( 1.0, -1.0, -1.0); glVertex3f( -1.0, -1.0, -1.0); glEnd();
glBegin(GL_POLYGON); glColor3f(1.0,0.0,0.0); glVertex3f(-1.0, 1.0,-1.0); glVertex3f( 1.0, 1.0,-1.0); glVertex3f( 1.0,-1.0,-1.0); glVertex3f(-1.0,-1.0,-1.0); glEnd();
glBegin(GL_POLYGON); glColor3f(1.0,0.0,1.0); glVertex3f( 1.0, 1.0, 1.0); glVertex3f( 1.0,-1.0, 1.0); glVertex3f( 1.0,-1.0,-1.0); glVertex3f( 1.0, 1.0,-1.0); glEnd();
glBegin(GL_POLYGON); glColor3f(1.0,1.0,0.0); glVertex3f( 1.0, 1.0, 1.0); glVertex3f( -1.0, 1.0, 1.0); glVertex3f( -1.0, 1.0, -1.0); glVertex3f( 1.0, 1.0, -1.0); glEnd(); }
|
И на картинке показано что у меня выходит: http://www.funkyimg.com/u/453/414/scrgl.gifПервые два рисунка одинаковые, четвертый - тот же, но в рисовании стоит glTranslated(0.0, 0.0, -10); Как видно, происходит отсечение граней. как бы от этого избавиться?
|