3D 장면을 렌더링하는 QGLWidget의 "GLWidget"하위 클래스가 있습니다. 나는 회전을하고 그것을 확대 할 수 있습니다. 이미이 GLWidget에 2D 텍스트 (통계)를 렌더링 한Qt/OpenGL - 3D 장면 위에 2D "눈금 선"그리기
void GLWidget::draw()
{
if (isDisplayFirst)
{
isDisplayFirst = false;
glViewport(0, 0, w_width, w_height);
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrixi
gluPerspective(45.0f, (float)w_width/w_height, g_nearPlane, g_farPlane);
gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glScalef(0.03f, 0.03f, 0.03f);
}
rotateScene();
glClearColor(0.0 ,0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_POINT_SPRITE);
glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_NV);
glEnable(GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE);
GLuint vbo_disk = 0;
glBindBuffer(GL_ARRAY_BUFFER, vbo_disk);
glVertexPointer(4, GL_DOUBLE, 4*sizeof(double), Galaxy->pos);
glEnableClientState(GL_VERTEX_ARRAY);
glColor4f(1.0f, 1.0f, 1.0f, 0.2f);
glDrawArrays(GL_POINTS, 0, Galaxy->getNumParticles_disk());
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_BLEND);
glDisable(GL_POINT_SPRITE);
}
:이다 "draw()
을"기능을 렌더링
void GLWidget::processCurrent()
{
draw();
printStats();
glFlush();
swapBuffers();
}
메인의 OpenGL :
은 내가 QTimer
다음과 같은 함수를 호출 "printStats()
"기능이 있습니다. 이 3D 장면에 "2D scale line"을 그려 보겠습니다.
나는 printStats()
으로 수행하여 무승부로이 줄을 성공 :
glDisable(GL_TEXTURE_2D);
glColor3f(1.0f, 1.0f, 1.0f);
glLineWidth(3.0f);
glBegin(GL_LINES);
glVertex2d(5, 40);
glVertex2d(20, 40);
glEnd();
glEnable(GL_TEXTURE_2D);
하지만 내 문제는 내가 회전 또는 줌을 할 때,이 라인은 3D 장면으로 이동하는 것입니다.
3D 객체에 대한 작업을 수행하는 동안이 2D 라인을 잠그는 방법은 무엇입니까?
"overpainting"을 사용하여 paintEvent
을 덮어 쓰지 않으려합니다.
또한 glPush/Pop Matrix를 사용하려고하지만 2D와 3D간에 충돌이 있습니다.
나에게 조언을 해 주시겠습니까?