OpenGL 강좌1 - MFC 윈도우창에 띄우기 (32비트, 64비트 설정 포함) 및 예제코드
윈도우 프로그래밍/OpenGL2022. 9. 30. 08:49
300x250
이번 내용은 OpenGL을 윈도우 창과 연동하는 방법을 작성하였습니다.
주 내용은 간단합니다.
예제 파일에 있는 GlRender.cpp, GlRender.h 파일을 사용해서
GlRender클래스는 자체 OpenGLCreate 관련 함수와, 쓰레드 생성 함수들이 있습니다.
나중에 GlStart()를 호출하게되면 MFC 화면에 영상이 출력됩니다.
RenderTest라는 클래스를 만들었습니다.
RenderTest.h
#pragma once
#include "GlRender.h"
class RenderTest : public GlRender
{
public:
RenderTest();
~RenderTest();
private:
void GlInit() override;
void GlDraw() override;
};
헤더는 GlRender를 상속받습니다.
GlRender 클래스에 가상함수로 호출되기 때문에 GlInit(), GlDraw() 함수는 오버라이드!
RenderTest.cpp
#include "stdafx.h"
#include "RenderTest.h"
RenderTest::RenderTest(){}
RenderTest::~RenderTest(){}
void RenderTest::GlInit(){}
void RenderTest::GlDraw()
{
glViewport(0, 0, gl_window_width, gl_window_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho((double)-gl_window_width / 2, (double)gl_window_width / 2,
(double)-gl_window_height / 2, (double)gl_window_height / 2,
1, -1);
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0, 0, 0, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glPushMatrix();
{
glBegin(GL_LINES);
glColor4f(0, 1, 0, 1);
glVertex2d(0, 0);
glVertex2d(200, 100);
glEnd();
}
glPopMatrix();
glDisable(GL_BLEND);
glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_PROJECTION);
}
RenderTest의 GlDraw() 함수 내용을 보면
중요한 내용은 아니지만 대략적으로 설명을 해보겠습니다.
1. glViewport를 사용하여 그릴 화면 영역을 잡고
2. 공간 메트릭스 행렬 초기화
3. glOrtho를 사용하여 화면 Viewport 영역 좌표계를 설정 했습니다.
4. GL_BLEND를 사용하여 투명도 적용
GlBegin ~ GlEnd() 내용에 색상을 정하고, 점2개로 직선을 그리는 OpenGL 코드를 작성하였습니다.
이제 MFC 화면에 연동을 해볼께요
0. stdafx.h에 OpenGL 환경설정 추가
#pragma comment ( lib, "OpenGL32.lib" )
#ifdef _WIN32
#include "OpenGL_lib/core/x86/glew.h"
#include "OpenGL_lib/core/x86/wglew.h"
#endif
#ifdef _WIN64
#include "OpenGL_lib/core/x64/glew.h"
#include "OpenGL_lib/core/x64/wglew.h"
#endif
1. 먼저 출력할 Dialog 클래스 헤더에 객체 선언
RenderTest m_render_test;
2. OnInitDialog() 함수에
m_render_test.Create(this);
m_render_test.GlStart();
3. OnSize() 함수에
m_render_test.GlResize(cx, cy);
4. OnClose() 함수에
m_render_test.GlClose();
프로그램을 실행한 결과!
예시 코드는 아래에서 받을 수 있습니다.
VisualStudio 2012에서 작성되었습니다.
300x250
'윈도우 프로그래밍 > OpenGL' 카테고리의 다른 글
OpenGL 강좌3 - EBO + VAO + VBO (0) | 2022.10.26 |
---|---|
OpenGL 강좌2 - VBO (VertexBufferObject) (0) | 2022.10.26 |
OpenGl SuperBible 6 [예제 3-9] 지오메트리 쉐이더 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-8] 테셀레이션 이벨류에이션 쉐이더 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-4] 프래그먼트 쉐이더에서 입력받기 (0) | 2020.07.27 |
댓글()