반응형

 

앞으로 OpenGl과 관련된 모든 것은 Visual Studio로 만들 것이다.

 

마법사? 도적아님?

원래 알고리즘이나 c, cpp를 작성할 때는 빈프로젝트를 생성했으나, 여기선느 Windows 데스크톱 마법사로 만들어줘야 한다. 데스크톱 마법사를 누르고 다음을 누른다. 그리고 빈프로젝트가 생겼으면 cpp파일을 생성해준다.

 

코드를 작성하기에 앞서서

 

로컬 Windows 디버거를 눌러 디버그를 한 번 해준다. 그러면 당연히 오류가 뜨면서 작동이 안되는데, 그럼에도 해줘야하는 이유가 있다.

 

그렇게 해줘야지 Debug라는 폴더가 생기고, 이 안에

freeglut.dll을 추가할 수 있기 때문이다. 

 

여기까지 셋팅이 완료 됐으면 이제 거의 끝났다. 

 

*원 모양으로 20개의 점을 찍는 코드

#include <GL/glut.h>
#include <math.h>

#define Pi 3.1415

void MyDisplay() {
	GLfloat Size[2], Angle;
	glClearColor(0.259, 0.259, 0.453, 1.0); // 뒤 배경색을 초기화시켜주는 코드이다
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1.0, 1.0, 1.0); //1,1,1이면 흰 색이다, 0~255사이의 수를 0~1로 정규화 시켜놨다
	glGetFloatv(GL_POINT_SIZE_RANGE, Size);
	glPointSize(Size[0] * 10);
	glBegin(GL_POINTS);//glBegin과 glEnd가 도형을 그리는 것이다
	for (Angle = 0.0; Angle <= 2.0 * Pi; Angle += Pi / 20.0) {
		glVertex3f(0.5 * cos(Angle), 0.5 * sin(Angle), 0.0); //vertex는 정점이다, vertex뒤에 있는 3f는 매개변수로 세 개가 들어오고, float형태로 들어온다는 것이다, 2차원을 그릴 때에도 3f로 하고 맨 뒤를 0.0으로 두는 것을 추천한다
		//그니까 (x좌표, y좌표, z좌표) 이런 순으로 들어간다
	}
	glEnd();//도형 그리는 것 끝
	glFlush();//큐 삭제하기 : 아직 실행되지 않은 명령을 실행되도록 한다
    //Flush함수는 드라이버에게 더 이상 명령어를 쌓지 말고 현재까지 쌓인 명령어 모두를 무조건 프로세서에게 전달하도록 강제하는 명령어다
    //지금까지 쌓인 모든 명령이 실행되어야만 다음 명령이 의미가 있을 때 사용된다.
}

int main(int argc, char** arvg) {
	glutInit(&argc, arvg);//윈도우초기화
	glutInitDisplayMode(GLUT_RGB);//디스플레이모드 초기화, RGB색을 갖게 하겠다
	glutInitWindowSize(700, 700);//윈도우 사이즈(창 크기) 초기화
	glutCreateWindow("My First OpenGl Code");//창을 만들고, 창 이름을 ~로 하겠다
	glutDisplayFunc(MyDisplay);//디스플레이 callback함수를 등록시킨다, 그림을 그리는 모든 코드가 DisplayFunc에 들어가야 한다, 그리는 것을 등록시키는 함수
	//이 곳에 MyDisplay만 있기 때문에 키보드나 다른 것을 클릭해도 아무 동작을 하지 않는다
	glutMainLoop();
	return 0;
}

 

*갈색 육각형 그리는 코드

#include <gl/glut.h>
#include <math.h>

void MyDisplay() {
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(0.5, 0.4, 0.3);
	glBegin(GL_POLYGON); // 아래 점들의 순서도 중요하다, 반시계방향으로 도는 순서로 해야 정상적인 육각형이 그려진다
		glVertex3f(0.0, 0.5, 0.0); // 1이면 화면 끝이고 0이면 화면 중앙이다
		glVertex3f(-0.5, 0.25, 0.0);
		glVertex3f(-0.5, -0.25, 0.0);
		glVertex3f(0.0, -0.5, 0.0);
		glVertex3f(0.5, -0.25, 0.0);
		glVertex3f(0.5, 0.25, 0.0);
	glEnd();
	glFlush();
}

int main(int argc, char** arvg) {
	glutInit(&argc, arvg);
	glutInitDisplayMode(GLUT_RGB);
	glutInitWindowSize(1000, 1000);
	glutCreateWindow("Brown Polygon");
	glutDisplayFunc(MyDisplay);
	glutMainLoop();
	return 0;
}

 

 

위 코드를 복사해서 붙여넣기 보다는 따라 쳐보자. 아무래도 따라 쳐보는 것이 도움이 되지 않을까? 초등학교 때 영어 단어 외우려고 깜지 썼던 것 기억해보면 도움이 되는지는 사실 잘 모르겠다.

 

코드에 대한 자세한 설명은 위에 주석으로 다 있으니 크게 어렵지 않을 것 같다.

 

어려운 점이 있으면 댓글을 남겨주세요. 

댓글을 남기시면 제 핸드폰으로 바로 알림이 오기 때문에 빠른 답변이 가능합니다.

끝까지 읽어주셔서 감사합니다.

반응형

+ Recent posts