[OpenGL] 스플라인_3차 함수 곡선 그리기(cubic spline) [OpenGL] 스플라인_3차 함수 곡선 그리기(cubic spline) 개요 : 점을 지나는 자연스러운 곡선을 그린다. : 참고로 y값의 좌표는 매번 랜덤으로 부여된다. 유도 공식 1. 첫 커브와 마지막 커브는 2차 스플라인으로 그림. 2. 나머지 커브들은 구간을 나눠서 3차 스플라인으로 그림. ※ 1번 참고. https://wtg-study.tistory.com/101 [OpenGL] 스플라인_2차 함수 곡선 그리기 (quadratic function) [OpenGL] 스플라인_2차 함수 곡선 그리기 (quadratic function) 개요 : 점 세 개를 지나는 2차 함수 곡선을 그린다. 유도 공식 이때, p(t) : 곡선을 그리는 함수 p1 ~ p2 : 각 세개의 점의 좌표 t : 0 기본 변수 타입 OpenGL자체는 C언어로 제작되었지만, 함수 수준의 라이브러리라서 특정 언어에서만 사용가능하다거나, 그런 제약은 없습니다. OpenGL타입 C타입 접두어 GLByte signed char b GLShort short s GLint, GLSizei int, long i GLFloat, GLclampf float f GLDouble, GLclampd double d GLubyte, GLBoolean unsigned char ub GLushort unsigned short us GLuint, GLenum, GLbitfield unsigned long ul 그냥 평소 쓰는 C타입에 앞에 GL정도 붙여줬다고 생각하시면 됩니다 OpenGL의 함수 형식 OpenGL의 함수들은 일반 함수와 구별하기 위해서 접두어가 무조건 붙습니다, GL!!! GLU의 라이브러리 접두어 역시 GLU 입니다. GLUT는? 말하지않아도 알아요! 이런 느낌 입니다. 이 함수는 gl라이브러리 소속의 Vertex함수로, 그 뒤로는 인수의 개수와 타입을 명시하는 접미어가 각각 3, 4종류가 붙습니다. 3차원 상의 좌표는 x, y, z의 세가지 값으로 표현하는게 원칙인데 분수표현을 w로 할 수 있습니다. 평면상의 점이라면 2차원이니까 glVertex2f(인수1, 인수2) 이런식으로 glVertex3i(1,2,3); int arr[] = {1,2,3}; glVertex3i(arr); 3-1.�⺻ Ÿ��OpenGL ��ü�� C ���� ���۵Ǿ����� �Լ� ������ ���̺귯���̹Ƿ� Ư�� �� ���ӵ����� �ʴ´�. ���� Ÿ�Ե� ���������� �����Ͽ� ����Ѵ�. ��� C ����� Ÿ�� ���� ���������� ���� C ����� Ÿ���� ���� ���� �ְ� �÷����� ���� �ణ�� ���̵� �����Ƿ� ������ �ּ�ȭ�ϱ� ���� ������ Ÿ���� ������ �ξ���.
��κ��� CŸ�Կ� ���� �������� ���ǵǾ� �־� C �� �ͼ��� ����� �� Ÿ�Ե鿡 ���ؼ��� ���� �ͼ����� ���̴�. C Ÿ�Ը��տ� GL ���ξ ���� ������ �Ұ��ϴ�. ���� ��İ� �ٸ� �κ��� �����Ƿ� �� ���� ���� ������ �� �˾� �ξ�� �Ѵ�. �������� GLint�� 32��Ʈ�� ������ ���ǵǾ� ������ ���̰� �������̴�. C ���� int�� �ü���� ���� ������ ����Ÿ�������� OpenGL�� GLint�� �� 32��Ʈ�̴�. GLsizei�� GLint�� ���� Ÿ�������� ũ�Ⱚ�� ��Ÿ���� ���� �ַ� ���ȴ�. �̷� ������ ���� Ÿ�Կ� ���ؼ��� �뵵�� ���� ��Ī�� ���ǵǾ� �ִ�. �������� ��Ÿ���� GLboolean�� ��ȣ���� 1����Ʈ ������ ���ǵǾ� �ִ�. C ���� 4����Ʈ�� BOOLEAN �������� �����ϰ� ������ ����� TRUE, FALSE�� ����ϴµ� ũ�Ⱑ �ٸ����� ���� �������̹Ƿ� �� Ÿ�� ȣȯ�ȴ�. TRUE, FALSE�� ����� ���� �ְ� GL_TRUE, GL_FALSE�� ����� ���� �ֵ� �� �� ���Ǵ� �����ϴ�. ���� C++�� bool Ÿ���� ȣȯ���� ���� �����Ƿ� ��� ������� �ʴ� ���� ����. ������ ���� ������ ����� ���ϸ� �������� ������ �� ���� �ִ�. �Ǽ� Ÿ���� GLclampf, GLclampd�� clamp��� �ܾ��� �ǹ̴� ���� ������ 0.0 ~ 1.0 ���̷� ���ѵȴٴ� ���̴�. ������ ������ �ؽ�ó�� ��ǥó�� ������ ��Ȯ�� ���� ������ �� �� Ÿ���� ���� ����Ѵ�. Ÿ�Ը��� clamp�� ��� ������ ��ȿ�� ���� 0 ~ 1 �������� �ٷ� �� �� �ִ�. 3-2.OpenGL�� �Լ� ����OpenGL �Լ����� �Ϲ� �Լ��� �����ϱ� ���� ���ܾ��� ���ξ �ٴ´�. gl ���̺귯���� �Լ��� gl ���ξ�� �����ϰ� glu�� ���̺귯���� glu�� �����Ѵ�. ���������� glut �Ҽ��� �Լ��� glut ���ΰ� �ٴ´�. ���θ����ε� OpenGL �Լ����� ���� �� �� �ִ�. OpenGL�� C ������ �Լ���� �����Ǿ� �����Ƿ� ��ü ������� �Ÿ��� �ִ�. ���� �Լ� �����ε�(Overloading)�� �������� ������ �μ��� ������ Ÿ���� �ٸ� ���� �Լ��� �ۼ��� �� ����. ������ ������ �ϵ� �μ� ����� �ٸ��� �Լ��� �̸��� �Ź� ������ �Ѵ�. ��ǥ���� ���� ������ ��ǥ�� �����ϴ� glVertex �Լ��� ����. �� �Լ��� GL ���̺귯�� �Ҽ��̹Ƿ� ���η� gl�� ������ ������ �����ϹǷ� �Լ��� �̸��� Vertex�̴�. �Լ��� �ڿ��� �μ��� ������ Ÿ���� �����ϴ� ���̾ ���� 3����, 4������ �ٴ´�. 3�������� ��ǥ�� x, y, z ������ ������ ǥ���ϴ� ���� ��Ģ���̵� �м� ǥ���� ���� w�� �и� ������ �� �ִ�. �� ������ ������ ���� z ��ǥ�� �����ϰ� x, y�� ���� ���� �ִ�. w�� �����Ǹ� 1�� ���ֵǸ� z�� �����ϸ� 0���� �����Ѵ�. �μ��� ������ 2��, 3��, 4�� �� ���� ������ �ִ�. �� �μ��� Ÿ���� GLshort, GLint, GLfloat, GLdouble 4���� Ÿ������ ���� �����ϴ�. ������ �Ǽ����� GLfloat�� ���� ��������� �Ҽ��ΰ� �ʿ���ٸ� GLint Ÿ���� ����� ���� �ְ� �� ���� ���е��� �䱸�Ǹ� GLdouble Ÿ���� �� ���� �ִ�. ���� �ﰢ���� ���� ù ���������� 2���� �Ǽ��� ��ǥ�� ���������Ƿ� glVertex2f �Լ��� ȣ���ߴ�. �� �Լ����� GL ���̺귯���� ���� Vertex �Լ��̸� �μ��� 2���̰� �μ� Ÿ���� GLfloat�� ���Ѵٴ� ���̴�. �� ��ǥ�� �����ϴ� ������ ���� �μ��� �����ϴ� ��� �迭�� ������ ���� �ִ�. �̶��� �Լ��� ���� �ڿ� �迭(Vector)�� �ǹ��ϴ� v ���ξ �߰��� �ٴ´�. ���� �� ȣ��� �����ϴ�. �� ���� ������ glVertex3i �Լ��� �μ� ��Ͽ� ������ ���� �ְ� �� ������ ������ �迭�� ������ �� glVertex3iv �Լ��� �迭�� ������ ���� �ִ�. ���� ��ĸ� �ٸ� �� �ᱹ �����ϴ� ��ǥ�� �����ϴ�. glVertex3i(1,2,3); int arv[]={1,2,3]; glVertex3iv(arv); ����, Ÿ��, �迭 ������ ��� ������ ���ϸ� glVertex �Լ��� �ص� 3 * 4 * 2 = 24���� �Լ� ���� ���ǵȴ�. 24���� �Ǵ� �Լ��� ������ ������ ���� ���� ������ ���� �� �ʿ䵵 ����. ���� ������ ���� �����ϰ� ǥ���Ѵ�. glVertex[2,3,4][s,i,f,d][v](x,y,z,w) [ ] ��ȣ���� ���ڵ��� �������̶�� ���̴�. �μ��� Ÿ�Ե� �Լ����� ���� ���������� �����Ƿ� �μ� ��Ͽ��� �̸��� ������ Ÿ���� ���� �ʴ´�. �� �μ��� ������ �Լ��� ���� �����Ƿ� �ִ� ������ �μ� ����� ���� ���Ҵ�. �Լ��� Ī�� ���� ���̸� �����ϰ� ��Ī�Ͽ� �Լ��� �̸��� ������ ���� �����̴�. glVertex �Ӹ� �ƴ϶� �ٸ� �Լ��鵵 ���������̴�. Ư�� �Լ����� ���ͳ����� �˻��� ���� ���̴� ���� �˻��ϴ� ���� �ٶ����ϴ�. OpenGL�� �����ε��� �������� �ʴ� ������ ��ü ���� ����� �Ϲ�ȭ�DZ� ���� �ۼ��߱� �����̴�. ���� �ӵ� ����ȭ�� ���� ��ü ������ �������� ���� �鵵 �ִ�. ���������� ��ü������ C++�� �������� C���� �۰� ���� �� ���� �����̴�. ������ �ӵ��� ���ϴ� ���� ���̺귯���μ� �մ��� �����̱�� ������ �Լ����� ���� �����ε� �������� ��¦�� �ƽ��� �κ��̴�. 3-3.���� �������� ������ ���ݾ� ������ ���鼭 OpenGL �Լ��� �ϳ� �Ѿ� ���� ����. �������� �������� ĢĢ�� ���������� �Ǿ� �ִµ� ����Ʈ�� �������̱� �����̴�. ���� �Լ��� ������ �ٲ� ����. void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); 4���� �μ��� RGBA �� ���� ����� ������ �����Ѵ�. �� ����� ������ 0 ~ 1 ������ �Ǽ����̸� 0�̸� �ش� ��Ұ� �ϳ��� ���� ���̰� 1�̸� �ִ� ����̴�. Ÿ�Ը��� clamp�� �� �μ��� ��� 0 ~ 1 ������ ������ ������. (1,1,1,1)�� ��� ��Ұ� �ִ� ����̹Ƿ� ����̰� (0,0,0,0)�� �������̴�. �������� �����ϴ� ���İ��� ������ � Ȱ��Ǵµ� ������ ������ �ʴ´�. �� �Լ��� ���ĺ��� ������� ����� ������ �����ϱ⸸ �� �� ���� ����� �������� �ʴ´�. ����� ������ ���� ���� ���� �Լ��� ȣ���Ѵ�. void glClear(GLbitfield mask); �μ��� � ���۸� ���� ���ΰ��� �����Ѵ�. OR �����ڷ� �����Ͽ� �� �� �̻��� ���۸� �Ѳ����� ���� ���� �ִ�. ���۸� ����� ���� ����� ��뷮�� ���� �����̶� �ð��� ���� �ɸ���. �� �� �̻��� ���۸� ���� ���� �������̸� OR �����ڷ� �Ѳ����� ����� ���� �ӵ��� �����ϴ�.
���� �������� ���� ���ۿ� ������ ����ȴ�. ���� ���۴� �̹����� ������ ����Ǵ� �����̸� ��� �ִ� �������� ����Ϳ� ��µȴ�. �츮�� ���� ���� ���̶�� �θ��� �����̸� �ȼ� ����, ������ ���۶���� �θ���. �ȼ� ���۶�� ���� ȭ���� ������ ����Ǿ��ٴ� ���ε� �� ȭ�Ҵ� ������ �������� �����ǹǷ� ���� ���۶���� �θ��� ���̴�. glClearColor�� ������ ���� ������ ���� ���۸� ���� ä��� �̰��� �� ȭ���� ����� ���� �ȴ�. ������ ���۵��� �� �� ������ ������ �����ϴµ� ���� �ܰ迡���� �����ϱ� �����Ƿ� ���� ���� ������ ����� ����. DoDisplay���� ������ ����� ���� ���� ������ �����ϱ� ���� glClear�� ȭ���� ���� ������ �ϸ� ���� �� glClear���� ���ο� �´�. ���� ������ ������ ���������� �����Ѵ�. void DoDisplay() { glClearColor(1.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex2f(0.0, 0.5); glVertex2f(-0.5, -0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); } glClear�� ȣ���ϱ� ���� glClearColor�� ȣ���Ͽ� �������� ���������� �ٲپ� �ξ���. R ��Ҹ� �ִ�ġ�̰� �������� 0�̹Ƿ� �������̸� �ﰢ�� ������ ����� ���������� �ٲ� ���̴�. ��� ������ �ѹ� ������ ������ �ٸ� ������ �ٲ��� �ʴ� ���� ��� �����ȴ�. ���� �Ź� ���⸦ �� ������ ������ �ʿ���� ���α� �ʱ�ȭ�ÿ� ������ �Լ����� ���� �����ϴ� ���� ��Ģ���̴�. ���������δ� ���� �ڵ尡 �� �ٶ����ϴ�. int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow) { glutCreateWindow("OpenGL"); glutDisplayFunc(DoDisplay); DoInit(); glutMainLoop(); return 0; } void DoInit() { glClearColor(1.0, 0.0, 0.0, 1.0); } void DoDisplay() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex2f(0.0, 0.5); glVertex2f(-0.5, -0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); } �ʱ�ȭ�� �ϴ� DoInit �Լ��� ���� ����� ���ο��� ���� ������ ���� ���� �ѹ��� �ʱ�ȭ�Ѵ�. ����� ������ DoDisplay�� ������ ũ�Ⱑ �ٲ�ų� ��� ������ �ٲ� ������ ���� ȣ��ǹǷ� �ʱ�ȭ �������δ� �������� �ʴ�. ���ʿ��ϰ� ���� ������ �Ź� ������ �ʿ�� ���� ���̴�. �� ����ó�� �ϴ� ���� ��Ģ�̴�. ���� �Լ��� ���� ������ �ȴٴ� �鿡�� �ʹ� ���ŷӰ� �ڵ带 �� ���� �� �Լ��� ���� ���� �ϹǷ� ���� �糳��. ���� �׳� DoDisplay ���ο��� �ʱ�ȭ�ϴ� �������� ������ �ۼ������� �����ε� �� ���̴�. ������ �� �Լ����� �ڵ带 ���߽��� ������ �Ʒ��� �ڵ带 �������ν� ȿ���� ���캼 �� �ֵ��� �ߴ�. �̹����� ������ �ƴ� �ﰢ���� ������ �ٲپ� ����. ������ ������ ���� �Լ��� �����Ѵ�. ��Ȯ�ϰԴ� ������ ������ �ƴ� ������ ������ �����ϴµ� ������ ������ ��������� ������ ������ �ȴ�. glColor[3,4][b,s,i,f,d,ub,us,ui][v](red, green, blue, alpha) ������ ���� ����� ������ �Ǽ��� �����ϴ� glColor3f�� ���� �Ϲ����̴�. 0 ~ 255������ ������ ������ ������ ���� glColor3ub �Լ��� ���� ���Ǵµ� ������� �� ȯ���� ���� ���˰� �����ؼ� ģ���ϴ�. ������ ������ �ﰢ���� ����. void DoDisplay() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); glBegin(GL_TRIANGLES); glVertex2f(0.0, 0.5); glVertex2f(-0.5, -0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); } �ﰢ���� ���� ���� ������ ���� ���������� ���������Ƿ� ��� ������ ���������� ������ �� ������� ������ �ﰢ�� ���ε� ���������� ä���ȴ�. glColor3ub(255, 0, 0);�� �����ص� ����� �����ϴ�. ������ �տ����� ���������� �� ������ ChangeState ������ ���� �ۼ��Ǿ� �ִ�. �˾� ���� ��� ������ �ٲٸ� ��� ���뵵 �ٲ� ���̴�. ������ ������ ������ ������� ��� �����̳� �ֿ� ��°����� ������ ����. 3-4.���� �ӽ����� ��¿��� ��ǥ�Ӹ� �ƴ϶� ���� ���� ��ҵ��� ���Եȴ�. ����, ����, ���, ����, ���� ��� ��� ���� ���� �������� �ʿ��ϴ�. ���� �Լ����� ���� ����� ���� �� ��� �������� ���������� ���ٰ� �ؼ� �� �������� ��� �Լ��� �μ��� ������ ���� ����. ���� �ϴٰ��� �μ� ����� �Ѿ��� ����� ���̸� �� �ٲ����� �ʴ� ���� �Ź� �����ϴ� �͵� �����̴�. ���� OpenGL�� ��� �ʿ��� ���� ���� �������� ���� �ӽ�(State Machine)�� �����Ѵ�. ���� �ӽ��̶� ���¸� �����ϴ� ����̸� ��� ������ ��ġ�� ���� ���������� �����̴�. �� ���� �ǽ��� �� ��� ������ GL_COLOR_CLEAR_VALUE ���� ������ ����Ǹ� ���� ������ ������ GL_CURRENT_COLOR ���� ������ ����ȴ�. ��� ���� �Լ����� �μ��� ������ �� ���� �����鿡 ���ؼ��� ���� �������� �о� ����Ѵ�. ���� �������� ������ ����Ʈ�� �ʱ�ȭ�Ǿ� �ִµ� ���� ��� ������ �������̰� ������ ���� ����̴�. ����Ʈ�� �ٲٰ� ������ ���� �Լ��� �������� �ٸ� ������ �ٲ� �� �ִ�. ������ �ٲٰ� ������ glClearColor �Լ��� ȣ���ϰ� ������ ������ glColor �Լ��� �ٲ۴�. ���� �ӽ��� �������̸� �������� ������̹Ƿ� �ѹ� ������ ���� ���� ������ �ٸ� ������ �ٲٱ� ������ ��� ��ȿ�ϴ�. ���� ���� ���̶�� ���� ���� ��� ����� �� ������ �Ź� ���� ������ �ʿ䰡 ����. ���� ������ ��Ʈ�� ����. void DoDisplay() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); //glColor3f(1.0, 1.0, 1.0); glVertex2f(0.0, 0.6); glColor3f(1.0, 0.0, 0.0); glVertex2f(-0.6, 0.0); //glColor3f(1.0, 0.0, 0.0); glVertex2f(-0.4, -0.6); glColor3f(0.0, 1.0, 0.0); glVertex2f(0.4, -0.6); glColor3f(0.0, 0.0, 1.0); glVertex2f(0.6, 0.0); glEnd(); glFlush(); } ���� ���������� �ݽð� �������� ���� �ټ����� ������ �����Ͽ� �������� �ȴ�. �� �������� �پ��� ���� �����ߴµ� ������ ������ �������̸� �ٰ��� ���δ� �� ������ �Ÿ��� ���� ������ �ε巴�� ��� ����. ù��° ������ ����ε� ����Ʈ�� ����̹Ƿ� ���� ������� ������ �ʿ䰡 ����. �ڵ忡�� �ּ� ó���� glColor ȣ��� ������ ������ ȣ��̴�. �ι�° ������ ���������� �ٲ� �� �����Ƿ� �������̴�. ���ĺ��� ������ ���� ��� �������� �����Ǹ� �� �������� ����� ����° ������ ���� �������̴�. �� ��쵵 ������ ���� ���� ���������� �ٲ� �ʿ䰡 ����. ������ �� ������ ���� �ʷϻ�, �Ķ������� ��������� ���� ����� �ٸ��Ƿ� �̶��� glColor ȣ��� �ʿ��ϴ�. ���� �Ӹ� �ƴ϶� ���� �ӽſ� ����Ǿ� �ִ� ��� ���� �̷� ������ �����ȴ�. ���°��� �������̹Ƿ� �Լ� ���ο��� �Ӹ� �ƴ϶� �ܺο��� �ٲ� ������ ������ ������ ��� �ٲپ��� �ѹ� ������ ���� �ٸ� ������ ���� ���� ������ ��� ��ȿ�ϴ�. ���� �ӽſ��� ����ó�� ������ ������ ������ Ư�� ����� ����� ���ΰ� �ƴѰ��� �����ϴ� �ܼ��� ������ �ɼǵ鵵 ���� �ִ�. on/off �� ���� ���� ������ ���´� ���� �Լ��� ����, ����, �����Ѵ�. void glEnable(GLenum cap); void glDisable(GLenum cap); GLboolean glIsEnabled(GLenum cap); �������� ���������� �����ϴµ� ���� ������ ���� �ִ�. ���� ��� GL_FOG�� �Ȱ� ȿ���̸� GL_LIGHTING�� ���� ȿ���̴�. �ش� ����� ���� ������ glEnable�� Ȱ��ȭ�ϰ� �� ���� ������ glDisable�� ����ϸ� �ȴ�. �� ��ɿ� ���ؼ��� �ش� ������ �ٷ� �� �ٽ� �Ұ��� ���̴�. �������� �ƴ� ���°��� ���� �Լ���� �����Ѵ�. void glGetIntegerv(GLenum pname, GLint * params); void glGetFloatv(GLenum pname, GLfloat * params); void glGetDoublev(GLenum pname, GLdouble * params); void glGetBooleanv(GLenum pname, GLboolean * params); ù��° �μ��� �˰� ���� ���� ���� ���̸� �� ��° �μ��� ���°��� ���Ϲ��� �迭�̴�. ���� ������ ���� �ʿ��� �迭�� ũ��� ������. ���� ��� ���� ������ ������ �˰� �ʹٸ� ������ ���� ȣ���Ѵ�. ������ 4���� �Ǽ��� �����ǹǷ� �迭 ũ� 4�� �غ��ؾ� �Ѵ�. GLfloat arColor[4]; glGetFloatv(GL_CURRENT_COLOR, arColor); ���ϴ� ���´�� ����Ϸ��� ���� �������� ���� �����ؾ� �Ѵ�. �̰� ���� ���� ���¸� �ٲٴ� ���� ���� ���·� ���ư��� ��������µ� �̶��� ���� ������ �Ϻθ� ���ÿ� ������ ���Ҵٰ� �����Ѵ�. ���� �Լ��� ���°��� ���ϴ� �κ��� ���ÿ� �ְ� ����. void glPushAttrib(GLbitfield mask); void glPopAttrib(void); ���� ����� �Ǵ� ���°��� �캰�� ��Ʈ ����ũ�� ���ǵǾ� �ִ�. �캰�� ������ ���� �������� ����Ǵµ� �Ϻθ� ���̹Ƿ� ��Ȯ�� ����� ���۷����� �����ϱ� �ٶ���.
������ ����� �Ϸ��� ���¸� ���� �ٲ�� �ϴµ� ���� ���°����� �״�� ���� ������ ���ÿ� ������ ���� ���� �����ϴ�. 3-5.���� �������� �� �Լ��� GL�� GLU ���̺귯�� ��ü�� ���� ������ �����Ѵ�. ����ʹ� �������� ����� ������ Ư�� ����� ���� ���θ� ������ �� �� ������ �ʿ��ϴ�. const GLubyte* glGetString(GLenum name); const GLubyte * gluGetString(GLenum name); name �μ��� � ������ ������ �������� �����ϸ� ���� ����� ���ڿ��� ���ϵȴ�. ������ ������ ������ ����.
���� ������ �� �� �Լ��� ������ �������� ����Ʈ ��Ʈ�ѿ� ����Ѵ�. OpenGL�� ���ڿ� ����� ���� �������� �ʴµ��� ������ ���� ����� ���� ���� �ڽ� �����δ� ����� Ȯ���ϱ� ����� ��ü �����쿡 ����ߴ�. ���� ���ݱ����� �����ʹ� �� Win32 �����츦 �����ϰ� ���� ������ ������. �����ϴ� ���ڿ��� �Ƚ� ���ڵ����� �Ǿ� �����Ƿ� �� ������Ʈ�� �����ڵ� ���� ������ ������� �ʵ��� �����ߴ�. �� ���������� ���ڿ� ���� �Լ��� wsprintf�� 1024 ���̹ۿ� �������� ���� C ��Ÿ���� sprintf �Լ��� ����ߴ�. #define ID_EDIT 100 HWND hEdit; #include <stdio.h> LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { TCHAR str[128]; switch (iMessage) { case WM_CREATE: hEdit=CreateWindow(TEXT("edit"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE | ES_AUTOVSCROLL, 10,10,200,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL); glutCreateWindow("OpenGL"); char info[10240]; sprintf(info ,"Vendor = %s\r\nVersion = %s\r\nRenderer = %s" "\r\nExtension = %s\r\nGluVersion = %s\r\nglu Extension = %s", (LPCSTR)glGetString(GL_VENDOR), (LPCSTR)glGetString(GL_VERSION), (LPCSTR)glGetString(GL_RENDERER), (LPCSTR)glGetString(GL_EXTENSIONS), (LPCSTR)gluGetString(GLU_VERSION), (LPCSTR)gluGetString(GLU_EXTENSIONS)); SetWindowText(hEdit,info); return 0; case WM_SIZE: MoveWindow(hEdit,0,0,LOWORD(lParam), HIWORD(lParam), TRUE); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } �ڵ� ��ü�� ��ô �����ϴ�. ���� �����찡 �����Ǵ� WM_CREATE�� ��� �ڵ尡 �ۼ��Ǿ� �ִ�. �ϴ� �ʱ�ȭ�� �ؾ� ������ ����ǹǷ� OpenGL ������� ������ �Ѵ�. GetString �Լ��� �����ϴ� �������� �ϳ��� ���ڿ��� �����Ͽ� ����Ʈ ��Ʈ�ѿ� ����ߴ�. ���� ȯ�濡 ���� ����� �ٸ��� ��Ÿ�� ���̴�. ������ �������� 7������ ���� ����̴�. GL ������ GLU�� ������ �ٸ��� ����ȴ�. ��û���� ���� Ȯ�� ����� �����ȴ�. ������ �������� XP������ ���� ����̴�. GL ������ 1.1�̸� Ȯ�� ����� ���� ����. �� ������ �߿� Ȯ�� ��ɿ� ���� �ڼ��� �˾� ����. OpenGL�� ũ�γ뽺 ���� ǥ���� �����ϸ� ��� OpenGL ������ �� ǥ���� ������. ���� ���� ȯ���� ���������� �����ϱ� ������ ǥ�� �̻��� ����� ��������� �ʿ�������. ǥ���� �̸� ���Ƽ��� �ȵǹǷ� Ȯ�� ����� �߰��� ���������� ����Ѵ�. ��, �߱��������� �ƹ����Գ� Ȯ���ؼ��� ǥ�����μ��� �ǹ̰� �������Ƿ� �����纰�� ���ξ �ٿ� �����Ѵ�.
Ȯ��� ����� ���� ���ۻ��� �ϵ������� ������ ���̴�. �� ����� ���뼺�� �����Ǿ� �Ϲ�ȭ�Ǹ� ���� �ٸ� ȸ��鵵 �� ����� ������ ���̸� �� ���°� �Ǹ� ���ΰ� EXT�� �ٲ��. ǥ�� ����ȸ���� �ش� ����� �����ϸ� ARB�� ���ΰ� �ٲ�� ���������δ� ���ΰ� ���� ä�� ���� ǥ�ؿ� �߰��� ���̴�. Ȯ�� ����� ����Ϸ��� ���� ���θ� ���� �����ؾ� �Ѵ�. �����ϴ� ����� ���� �������ε� glGetString(GL_VERSION) �Լ��� �����ϴ� Ȯ�� ��� ��Ͽ� �ش� ����� �ִ��� strstr ���� �Լ��� ���ڿ� �˻��Ѵ�. �̶� �κ� ���ڿ��� �˻����� �ʵ��� �¿쿡 ������ �� �־� �־�� �Ѵ�. Ȯ�� ����� ���縦 Ȯ�������� ȣ���Ͽ� ����� �� �ֵ� Ȯ�� �Լ��� ���� �������� ���̺귯���� ���Ե��� �ʾ����Ƿ� �ش� �Լ��� ������ ã�� ȣ���ؾ� �Ѵ�. �Լ� ������ �˻��ϴ� ����� �ü������ �ٸ���. ���������� ��� wglGetProcAddress �Լ��� ã�´�. �Լ��� ������ ã������ �Լ� ������ �������� ȣ���Ѵ�. �� ��ٷӱ�� ������ �� �ʿ��ϴٸ� �̷� ������ Ȯ�� ����� �˻��Ͽ� ����� �� �ִ�. Ȯ�� ����� ����ϸ� �ش� ����� �ִ� �ϵ������� ������ ���̴�. ����� �������� �ʴ� ȯ�濡���� ��ü�Ǵ� ����� ����ϰų� �ƴϸ� �ּ��� ���� ó���� ����ϰ� �ؾ� �Ѵ�. |