2013-07-22 1 views
1

OpenGL과 Glut을 처음 사용했습니다. Glut에 의해 구현 된 프로젝트가 있습니다. 내가 봤 거든 QGLWidget라는 Qt에 OpenGL을 구현하는 것으로 나타났습니다. 그러나 Qt에서 Glut 함수에 상응하는 함수를 찾는 법을 모르기 때문에 오래된 Glut 코드를 새로운 Qt 코드로 변환하는 것은 어렵습니다. 코드의 일부는 다음과 같습니다.QGLWidget에서 OpenGL의 동등한 기능을 찾는 방법은 무엇입니까?

glutInit(&argc,argv); 
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); 
glutInitWindowSize(gray1->width,gray1->height); 
glutInitWindowPosition(100,100); 
glutCreateWindow("hello"); 
init(); 
glutDisplayFunc(&display); 
glutReshapeFunc(reshape); 
glutMouseFunc(mouse); 
glutMotionFunc(mouse_move); 
glutMainLoop(); 

위의 glut * 함수는 Qt의 문서에 없습니다. 그래서 내 문제는 어떻게 QGLWidget의 기능에 상응하는 glut 기능을 찾을 수 있습니까?

답변

0

확인. HelloGL 샘플을 보셨습니까? QGLWidget을 표시하고 마우스 입력을 처리하는 방법을 배우게됩니다. 나는 이것이 당신이 찾고있는 것이라고 생각합니다. Qt는 SIGNAL 및 SLOTS를 제공하기 때문에 입력 처리는 매우 다양하지만 매우 직관적입니다. 따라서 마우스 시그널을 SLOTS에 연결해야합니다. 그 SLOTS는 마우스 이벤트를 처리합니다.

하지만 샘플을 보면 매우 직관적입니다.

6

당신은 예를 들어, 자신의 클래스 QGLWidget로부터 상속 구현해야합니다

또한 세 가지 중요한 기능을 재정의해야
class GLWidget : public QGLWidget 
    { 
     Q_OBJECT 

    public: 
     GLWidget(QWidget *parent = 0); 

    protected: 
     void initializeGL(); 
     void resizeGL(int w, int h); 
     void paintGL(); 

     void mousePressEvent(QMouseEvent *event); 
     void mouseMoveEvent(QMouseEvent *event); 
     void mouseReleaseEvent(QMouseEvent *event); 

    }; 

, initializeGL()를 당신이 당신의 OpenGL을 준비하고있는 곳. resizeGL() 패널의 크기가 조정 된 경우 뷰포트 및 프로젝션 매트릭스를 업데이트하고 paintGL() 실제 렌더링을 수정합니다.

창 초기화는 물론 Qt에서 처리합니다.

마우스 이벤트

, 세 가지 기능은 대체 할 수있다 : mousePressEvent(), mouseMoveEvent()mouseReleaseEvent()

void GLWidget::initializeGL() 
{ 
    glClearColor(0.5, 0.5, 0.5, 1.0); 
} 

void GLWidget::resizeGL(int width, int height) 
{ 
    glViewport(0, 0, width(), height()); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0, width(), 0, height()); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

void GLWidget::paintGL() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 

    // draw a red triangle 
    glColor3f(1,0,0); 
    glBegin(GL_POLYGON); 
    glVertex2f(10,10); 
    glVertex2f(10,600); 
    glVertex2f(300,10); 
    glEnd(); 
}