본문 바로가기
학교/프로그래밍 언어

OpenGL #0

by ehei 2024. 4. 30.

설치

dev윈도우즈에서도 편리하게 OpenGL 개발 환경을 설정할 수 있다. Visual Studio Installer를 실행시켜 vcpkg가 설치되었는지 확인한다

 

Visual Studio Developer Command Prompt를 열고 vcpkg를 실행시켜 본다.

C:\Program Files\Microsoft Visual Studio\2022\Professional>vcpkg
usage: vcpkg <command> [--switches] [--options=values] [arguments] @response_file
  @response_file         Contains one argument per line expanded at that location
  ...

 

vcpkg를 사용하려면 초기 작업이 필요하다. 해당 로컬 폴더로 가서 다음과 같이 입력한다

C:\testOpenGL> vcpkg new --application

 

다음 파일을 확인할 수 있다

24-04-29  20:18               348 vcpkg-configuration.json
24-04-29  20:18                 3 vcpkg.json

 

 

vcpkg.json을 열고 다음과 같이 편집한다

{
	"dependencies": [
		"opengl",
		"glew",
		"glfw3"
	]
}

 

 

저장한 후 해당 프로젝트를 연다. 프로젝트 설정에 다음과 같은 설정을 확인한다

 

빌드하면 자동으로 관련한 의존성이 처리된다. 헤더/라이브러리 경로 설정이 필요 없어 편리하다.

#include <GL/glew.h>
#include <GLFW/glfw3.h>


int main()
{
	glfwInit();

	auto window = glfwCreateWindow( 300, 300, "Hello, World", {}, {} );
	glfwMakeContextCurrent( window );

	glewInit();

	while ( !glfwWindowShouldClose( window ) ) {
		glClear( GL_COLOR_BUFFER_BIT );
		glfwSwapBuffers( window );
		glfwPollEvents();
	}

	glfwTerminate();
	return{};
}

 

위 코드를 컴파일하면 빈 윈도우가 표시된다.

 

GLFW

  • 모든 플랫폼의 윈도우 시스템에서 작동하는 추상 윈도우 처리.  이로 인한 매우 낮은 사용자 경험 제공.
  • 좌표계는 좌측 상단을 원점으로 삼는다. 반면 3D 좌표계에서는 좌측 하단 또는 중앙을 원점으로 삼는다.

주요 함수

// 종료 여부 확인
int glfwWindowShouldClose( GLFWwindow* );
// 종료 처리
void glfwSetWindowShouldClose( GLFWwindow*, int );
// 프레임 버퍼 갱신
void glfwSwapBuffers( GLFWwindow* );
// 이벤트를 처리
void glfwPollEvents( void );

콜백

리프레시 콜백 Refresh Callback

화면을 새로 고칠 때 사용된다. 예를 들어 최대화, 최소화, 전체 화면으로 윈도우가 전환될 경우 사용된다.

// 콜백 함수 서명
typedef void (*GLFWwindowrefreshfun)( GLFWindow* );

// 등록
GLFWwindowrefreshfun glfwSetWindowRefreshCallback( GLFWwindow*, GLFWwindowrefreshfun );

키 콜백

// 콜백 함수 서명
// key: 'A', 'B' ... 
// action: GLFW_PRESS ...
// mods: modifiers - GLFW_MOD_SHIFT ...
typedef void (*GLFWkeyfun)(GLFWwindow* win, int key, int scancode, int action, int mods );

// 등록
GLFWkeyfun glfwSetKeyCallback( GLFWwindow*, GLFWkeyfun );

초기화

// 색상으로 화면 초기화
void glClearColor( GLfloat, ... );

// 특정 버퍼를 초기화
void glClear( GLbitfield );

지연 실행

OpenGL을 비롯한 최신 그래픽 라이브러리는 병렬 처리를 위해 명령어 큐에 기록하고 처리한다. 렌더링 파이프라인이 비면 이때 큐에서 꺼내 처리한다. 허나 다음 함수를 이용하여 즉시 확인도 가능하다.

void glFinish();
void glFlush();

소스

https://github.com/ehei1/learnOpenGL/tree/main/01%20HelloWorld

'학교 > 프로그래밍 언어' 카테고리의 다른 글

OpenGL #1  (0) 2024.05.04
C# ready  (0) 2024.04.21