Opengl c언어 - opengl ceon-eo

[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 ����� Ÿ���� �޶��� ���� �ְ� �÷����� ���� �ణ�� ���̵� �����Ƿ� ������ �ּ�ȭ�ϱ� ���� ������ Ÿ���� ������ �ξ���.

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

ui

��κ��� 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 �Լ��� ����.

Opengl c언어 - opengl ceon-eo

�� �Լ��� 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 �����ڷ� �Ѳ����� ����� ���� �ӵ��� �����ϴ�.

����

����

GL_COLOR_BUFFER_BIT

���� ���۸� �����.

GL_DEPTH_BUFFER_BIT

���� ���۸� �����.

GL_STENCIL_BUFFER_BIT

���ٽ� ���۸� ����.

GL_ACCUM_BUFFER_BIT

���� ���۸� ����.

�׷��� �������� ���� ���ۿ� ������ ����ȴ�. ���� ���۴� �̹����� ������ ����Ǵ� �����̸� ���⿡ �ִ� �������� ����Ϳ� ��µȴ�. �츮�� ���� ���� ���̶�� �θ��� �����̸� �ȼ� ����, ������ ���۶���� �θ���. �ȼ� ���۶�� ���� ȭ���� ������ ����Ǿ��ٴ� ���ε� �� ȭ�Ҵ� ������ �������� �����ǹǷ� ���� ���۶���� �θ��� ���̴�.

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�̹Ƿ� �������̸� �ﰢ�� ������ ����� ���������� �ٲ� ���̴�.

Opengl c언어 - opengl ceon-eo

��� ������ �ѹ� ������ ������ �ٸ� ������ �ٲ��� �ʴ� ���� ��� �����ȴ�. �׷��� �Ź� �׸��⸦ �� ������ ������ �ʿ���� ���α׷� �ʱ�ȭ�ÿ� ������ �Լ����� ���� �����ϴ� ���� ��Ģ���̴�. ���������δ� ���� �ڵ尡 �� �ٶ����ϴ�.

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);�� �����ص� ����� �����ϴ�.

Opengl c언어 - opengl ceon-eo

������ �տ����� ���������� �� ������ ChangeState ������ ���� �ۼ��Ǿ� �ִ�. �˾� �޴��� ��� ������ �ٲٸ� ��� ���뵵 �ٲ� ���̴�. ������ ������ ������ ������� ��� �����̳� �ֿ� ��°����� ������ ����.

3-4.���� �ӽ�

�׷��� ��¿��� ��ǥ�Ӹ� �ƴ϶� ���� ���� ��ҵ��� ���Եȴ�. ����, ����, ���, ����, ���� ��� ��� ���� ���� �������� �ʿ��ϴ�. �׸��� �Լ����� ���� ����� ���� �� ��� �������� ���������� �׷��ٰ� �ؼ� �� �������� ��� �Լ��� �μ��� ������ ���� ����. �׷��� �ϴٰ��� �μ� ����� �Ѿ��� ����� ���̸� �� �ٲ����� �ʴ� ���� �Ź� �����ϴ� �͵� �����̴�.

�׷��� OpenGL�� �׸��⿡ �ʿ��� ���� ���� �������� ���� �ӽ�(State Machine)�� �����Ѵ�. ���� �ӽ��̶� ���¸� �����ϴ� ����̸� �׸��⿡ ������ ��ġ�� ���� ���������� �����̴�. �� �׿��� �ǽ��� �� ��� ������ GL_COLOR_CLEAR_VALUE ���� ������ ����Ǹ� ���� ������ ������ GL_CURRENT_COLOR ���� ������ ����ȴ�.

Opengl c언어 - opengl ceon-eo

��� �׸��� �Լ����� �μ��� ���޹��� �� ���� �����鿡 ���ؼ��� ���� �������� �о� ����Ѵ�. ���� �������� ������ ����Ʈ�� �ʱ�ȭ�Ǿ� �ִµ� ���� ��� ������ �������̰� ������ ���� ����̴�. ����Ʈ�� �ٲٰ� ������ ���� �Լ��� �������� �ٸ� ������ �ٲ� �� �ִ�. ������ �ٲٰ� ������ 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();

}

���� ���������� �ݽð� �������� ���� �ټ����� ������ �����Ͽ� �������� �׷ȴ�. �� �������� �پ��� ���� �����ߴµ� ������ ������ �������̸� �ٰ��� ���δ� �� ������ �Ÿ��� ���� ������ �ε巴�� ��� �׸���.

Opengl c언어 - opengl ceon-eo

ù��° ������ ����ε� ����Ʈ�� ����̹Ƿ� ���� ������� ������ �ʿ䰡 ����. �ڵ忡�� �ּ� ó���� 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);

���� ����� �Ǵ� ���°��� �׷캰�� ��Ʈ ����ũ�� ���ǵǾ� �ִ�. �׷캰�� ������ ���� �������� ����Ǵµ� �Ϻθ� ���̹Ƿ� ��Ȯ�� ����� ���۷����� �����ϱ� �ٶ���.

����ũ

����

GL_COLOR_BUFFER_BIT

GL_BLEND, GL_DITHER

GL_CURRENT_BIT

���� ����, ���� ����, GL_EDGE_FLAG

GL_DEPTH_BUFFER_BIT

GL_DEPTH_TEST

GL_ENABLE_BIT

GL_COLOR_MATERIAL, GL_DEPTH_TEST, GL_CULL_FACE

GL_FOG_BIT

GL_FOG, �Ȱ� ����, �е�, ������, ����

GL_HINT_BIT

GL_POINT_SMOOTH_HINT, GL_LINE_SMOOTH_HINT

GL_LIGHTING_BIT

GL_LIGHTING

������ ����� �Ϸ��� ���¸� ���� �ٲ�� �ϴµ� ���� ���°����� �״�� ���� ������ ���ÿ� ������ ���� ���� �����ϴ�.

3-5.���� ����

���� �� �Լ��� GL�� GLU ���̺귯�� ��ü�� ���� ������ �����Ѵ�. �׸���ʹ� �������� ����� ������ Ư�� ����� ���� ���θ� ������ �� �� ������ �ʿ��ϴ�.

const GLubyte* glGetString(GLenum name);

const GLubyte * gluGetString(GLenum name);

name �μ��� � ������ ������ �������� �����ϸ� ���� ����� ���ڿ��� ���ϵȴ�. ������ ������ ������ ����.

����

����

GL_VENDOR

GL�� ������ ȸ����� ���ϵȴ�.

GL_RENDERER

�������� �̸��� �����Ѵ�.

GL_VERSION

���� �Ǵ� ������ ��ȣ�̴�.

GL_SHADING_LANGUAGE_VERSION

���̴� ����� ������ �����Ѵ�.

GL_EXTENSIONS

Ȯ�� ��� ����� �����Ѵ�.

���� ������ �� �� �Լ��� ������ �������� ����Ʈ ��Ʈ�ѿ� ����Ѵ�. 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������ ���� ����̴�.

Opengl c언어 - opengl ceon-eo

GL ������ GLU�� ������ �ٸ��� ����ȴ�. ��û���� ���� Ȯ�� ����� �����ȴ�. ������ �������� XP������ ���� ����̴�. GL ������ 1.1�̸� Ȯ�� ����� ���� ����.

Opengl c언어 - opengl ceon-eo

�� ������ �߿� Ȯ�� ��ɿ� ���� �ڼ��� �˾� ����. OpenGL�� ũ�γ뽺 �׷��� ǥ���� �����ϸ� ��� OpenGL ������ �� ǥ���� ������. �׷��� �׷��� ȯ���� ���������� �����ϱ� ������ ǥ�� �̻��� ����� ��������� �ʿ�������. ǥ���� �̸� ���Ƽ��� �ȵǹǷ� Ȯ�� ����� �߰��� ���������� ����Ѵ�. ��, �߱��������� �ƹ����Գ� Ȯ���ؼ��� ǥ�����μ��� �ǹ̰� �������Ƿ� �����纰�� ���ξ �ٿ� �����Ѵ�.

���ξ�

������

GL_ATI

ATI

GL_NV

NVidia

GL_IBM

IBM

GL_SUN

�� ����ũ�� �ý�����

GL_WGL

����ũ�μ���Ʈ

GL_SGI

�Ǹ��� �׷��Ƚ�

GL_EXT

���� Ȯ�� ���

GL_ARB

���� Ȯ�� ���

Ȯ��� ����� ���� ���ۻ��� �ϵ������� ������ ���̴�. �� ����� ���뼺�� �����Ǿ� �Ϲ�ȭ�Ǹ� ���� �ٸ� ȸ��鵵 �� ����� ������ ���̸� �� ���°� �Ǹ� ���ΰ� EXT�� �ٲ��. ǥ�� ����ȸ���� �ش� ����� �����ϸ� ARB�� ���ΰ� �ٲ�� ���������δ� ���ΰ� ���� ä�� ���� ǥ�ؿ� �߰��� ���̴�.

Ȯ�� ����� ����Ϸ��� ���� ���θ� ���� �����ؾ� �Ѵ�. �����ϴ� ����� ���� �������ε� glGetString(GL_VERSION) �Լ��� �����ϴ� Ȯ�� ��� ��Ͽ� �ش� ����� �ִ��� strstr ���� �Լ��� ���ڿ� �˻��Ѵ�. �̶� �κ� ���ڿ��� �˻����� �ʵ��� �¿쿡 ������ �� �־� �־�� �Ѵ�.

Ȯ�� ����� ���縦 Ȯ�������� ȣ���Ͽ� ����� �� �ֵ� Ȯ�� �Լ��� ���� �������� ���̺귯���� ���Ե��� �ʾ����Ƿ� �ش� �Լ��� �����͸� ã�� ȣ���ؾ� �Ѵ�. �Լ� �����͸� �˻��ϴ� ����� �ü������ �ٸ���. ���������� ��� wglGetProcAddress �Լ��� ã�´�. �Լ��� ������ ã������ �Լ� ������ �������� ȣ���Ѵ�.

�� ��ٷӱ�� ������ �� �ʿ��ϴٸ� �̷� ������ Ȯ�� ����� �˻��Ͽ� ����� �� �ִ�. Ȯ�� ����� ����ϸ� �ش� ����� �ִ� �ϵ������� ������ ���̴�. ����� �������� �ʴ� ȯ�濡���� ��ü�Ǵ� ����� ����ϰų� �ƴϸ� �ּ��� ���� ó���� ����ϰ� �ؾ� �Ѵ�.