처음 쓰는 opengl

코린이·2023년 9월 28일
1

컴퓨터 그래픽스

목록 보기
1/3
post-thumbnail

1. c를 이용한 opengl 다루기

opengl을 사용하기 위한 기본 setting 하기

  • visual studio project를 생성해 solution을 생성한다.
  • 솔루션 탐색기에서 project를 우클릭해 프로젝트의 속성을 바꿔야한다.
  • 일반 -> 출력 디렉터리 -> $(SolutionDir)\bin\x64\
    생성되는 exe 파일은 freeglut.dll과 같은 폴더에 있어야 하기 때문에
  • 링커 -> 일반 -> 추가 라이브러리 디렉터리 -> .\lib\x64
    freeglut.lib 를 사용하기 위해
  • 링커 -> 입력 -> 추가 종속성 -> freeglut.lib; 맨 앞에 추가
    freeglut.lib 를 사용하기 위해
  • 제일 중요한 freeglut 폴더를 생성된 프로젝트 폴더로 복사해야한다!!!

----------------------↓----------------------

2. opengl을 이용할 때 필요한 가장 기본적인 코드를 작성하고 공부해보자.

#include <iostream>
#include".\include\GL\freeglut.h"

//전역 변수
int Width = 600, Height = 600;
void Render();  //화면을 그릴 때 자동으로 호출되는 함수
void Reshape(int w, int h);//윈도우가 처음 생성되거나 크기가 변할 때 자동으로 호출되는 함수

int main(int argc, char** argv) //argc는 인자의 개수 argv는 인자의 이름
{
	// Freeglut 초기화
	glutInit(&argc, argv);

	// 윈도우 크기 조정
	glutInitWindowSize(Width, Height);
	
	//칼라버퍼의 속성 지정
	glutInitDisplayMode(GLUT_RGB);
	
	//윈도우 생성
	glutCreateWindow("Hello OpenGL");

	//콜백 함수 등록
	glutDisplayFunc(Render);
	glutReshapeFunc(Reshape); //콜백함수(윈도우 시스템으로 인해 내가 호출하지 않아도 알아서 호출)

	//메세지 처리 루프 진입
	glutMainLoop();
	return 0;
}
void Render() {
	// R,G,B로 색상 설정 가능
	glClearColor(1.0f, 0.0f, 1.0f, 1.0f);

여기서 glClearColor 함수의 인자 중 하나인 1.0f는 알파 채널 값을 나타낸다.
RGBA (빨강, 녹색, 파랑, 알파) 형식으로 색상을 표현하며,
각 채널은 0부터 1까지의 부동소수점 값으로 표현된다.
- 빨강 (Red): 1.0f은 최대 빨강 값을 나타낸다.
- 녹색 (Green): 0.0f은 녹색을 나타내지 않음을 나타낸다.
- 파랑 (Blue): 1.0f은 최대 파랑 값을 나타낸다.
- 알파 (Alpha): 이 값은 투명도를 나타낸다.
1.0f은 완전히 불투명한 색상을 나타내며,
0.0f은 완전히 투명한 색상을 나타낸다.

	//칼라버퍼 초기화
	glClear(GL_COLOR_BUFFER_BIT);

	//관측공간 지정(좌표계)
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(-10.0, 10.0, -10.0, 10.0);
	
	//모델링 좌표계 설정(좌표계를 이용해서 그리기
	glMatrixMode(GL_MODELVIEW);

	//빨간색 삼각형 그리기
	glColor3d(1.0, 0.0, 0.0);
	glBegin(GL_TRIANGLES);
	glVertex2d(-2.0, -1.0);
	glVertex2d(2.0, -1.0);
	glVertex2d(0.0, 3.0);
	glEnd();
    
	//파란색 삼각형 그리기
	glColor3d(0.0, 0.0, 1.0);
	glBegin(GL_TRIANGLES);
	glVertex2d(-2.0, 1.0);
	glVertex2d(0.0, -3.0);
	glVertex2d(2.0, 1.0);
	glEnd();



	//X축 그리기
	glColor3d(0.0, 0.0, 0.0);
	glBegin(GL_LINES);
	glVertex2d(-10.0, 0.0);
	glVertex2d(10.0, 0.0);
	glEnd();
	//Y축 그리기
	glColor3d(0.0, 0.0, 0.0);
	glBegin(GL_LINES);
	glVertex2d(0.0, 10.0);
	glVertex2d(0.0, -10.0);
	glEnd();

	glutSwapBuffers();
}

void Reshape(int w, int h) {
	//관측공간을 윈도우에 매핑
	glViewport(0, 0, w, h);
	Width = w;
	Height = h;
}

❗ 여기서 2번째 줄인 #include".\include\GL\freeglut.h" 에 자신의 경로를 잘 설정해야 한다.

실행화면

3. 기본 도형 그리는 법을 알아보자


위 코드에서 빌려오자면
glColor3d(1.0, 0.0, 0.0); --- r,g,b를 이용해 색상을 정해준다.
glBegin(GL_TRIANGLES); --- 위 사진에서 원하는 도형을 골라주면 된다.
glVertex2d(-2.0, -1.0); --- 자신이 그리고 싶은 위치에 좌표를 설정해준다.
glVertex2d(2.0, -1.0);
glVertex2d(0.0, 3.0);
glEnd(); --- 도형을 그릴 때는 항상 glBegin와 glEnd();을 시작과 끝에 써줘야 한다.

❗ 이때 라인함수, 다각형함수를 잘 이용해야 한다.

ex) 라인함수

ex) 다각형 함수


4. 마무리

오늘은 간단하게 opengl 세팅과 기본 도형 그리는 법을 알아보았고 다음에는 opengl에서 정말 중요한 래스터화(Rastreization) 기법에 대해 알아보자!

profile
코린이

0개의 댓글