본문 바로가기
Solution/Qt Programming

[Qt] Mdiwindow 상태에서 '.obj' file 을 읽고 OpenGL 로 그리기

by 이센 2023. 10. 7.

#1 상황

한달동안 헤메다 문제는 해결되었는데, 너무 정신없이 진행하다 보니, 어찌해결 됬는지 점점 희미해진 상황.

어찌되었건 목표대로 Mdiwindow 적용 후, File Menu에서 '.obj' file을 읽고, OpenGL 명령을 사용하여(Shader 프로그래밍 없이) 삼각형 Mesh를 가지는 구조를 그리는데 성공함.

 

#2 기존 문제점

QGLWidget 의 상속을 받는 OpenGLWindow Class 의 memeber 함수들 (triangles, m_triangles, v, vn ... )이 Mainwindow 에서 '.obj' 를 읽어온 후,  OpenGLWindow 에서 그림을 그릴 때 그 정보를 잃어버리는 문제가 계속 발생했다. 

 

#define QMDIMAINWINDOW_H

#include <QMainWindow>
#include <QObject>
#include "openglwindow.h"
#include <QMdiArea>

class MDIMainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MDIMainWindow(QWidget *parent = nullptr);
    OpenGLWindow* oglWin;

private:
    QMdiArea* area;
    QMdiSubWindow* subWindow1;
    QMdiSubWindow* subWindow2;
};

#endif // QMDIMAINWINDOW_H

 여러 문제들은 MDIMainWindow 함수에서 OpenGLWindow 와 QMdiSubWindow를 Pointer 를 사용해서 위와 같이 재정의해서 해결되었다. 

#3 프로그램 실행 모습

프로그램 시작 후의 모습은 아래와 같다. 이 후, 파일 메뉴에서 적정한 '.obj' (여기서는 release folder 안의 diamond.obj) file 을 읽어오면, OpenGL 함수에 의해서 다각형이 그려진다.

#4 느낀점, 향후 진행 계획

도형을 Scale 통해서 쉽게 볼 수 있게 하는 것, 마우스를 사용한 Interface 등등 순간 순간 업데이트 해야 할 것이 많아 보이지만, 핵심은 OpenGL 함수에 대해 좀 더 공부해 보는 것과, 실제로 읽어야 되는 '.obj' 가 아니라, '.grd' 와 '.dat' 에 대한 Parcer를 잘 살펴보는 것이 핵심인 것 같다.

그래서 다음 단계는 OpenGL 함수를 사용하여 이 두 파일을 읽어서 Display 하는 Project 가 될 것이다.

DrawObj03.zip
5.60MB