opengl1

 오픈GL로의 탑승

몇 년 전부터 불어닥친 3차원 그래픽의 열풍은 날이 갈수록 그 정도를 더해가고 있다. 3차원 그래픽 알고리듬의 난해함과 속도 문제 등의 난관이 여전히 존재하지만 이 정도의 어려움으로 3차원 프로그래밍을 포기할 수는 없다. 자, 지금부터 3차원세계로의 고속비행, 오픈GL에 탑승한다.

이승찬 : 서울대 컴퓨터공학과
neoctrl@nownuri.net

몇년 전부터 불어닥친 3차원 그래픽 열풍은 날이 갈수록 심해져서 요즘은 3D라는 말을 붙이지 않으면 구시대의 것처럼 여겨질 정도로 3차원 그래픽이 일반화되었다. 그러나 막상 3차원 그래픽이 사용되는 프로그램을 작성하려고 하면 몇 가지 난관에 부딪히게 된다. 그 첫 번째가 3차원 그래픽 알고리듬의 난해함이다. 그래픽 알고리듬은 복잡한 수학을 필요로 하기 때문에 알고리듬을 어느 정도 이해하고 그것을 바탕으로 3차원 그래픽 엔진을 만들기 위해서는 많은 시간과 노력이 필요하다. 두 번째로 겪게 되는 어려움은 속도 문제인데, 그래픽 알고리듬에 맞게 엔진을 제작하더라도 쓸만한 속도의 엔진을 얻기 위해서는 최적화에 많은 신경을 써야 한다. 그리고 최적화를 하다보면 렌더링의 질을 희생해야 하는 경우가 많기 때문에 속도와 질이라는 두 마리 토끼를 쫓는 것은 쉽지 않은 일이다. 이런 어려움 때문에 3차원 프로그래밍을 포기한 사람이 있다면 필자는 오픈GL을 사용할 것을 권하고 싶다.
오픈GL은 실리콘그래픽스 사(이하 SGI)에서 만든 3차원 그래픽 라이브러리이다. 이 라이브러리는 복잡한 수식이 들어간 3차원 그래픽 알고리듬을 전혀 필요로 하지 않는다. 이미 똑똑한(?) 프로그래머들이 오픈GL 내에 다 구현해 놓았기 때문이다. 단지 좌표계나 색상, 조명과 같은 3차원 그래픽의 기초이론을 아는 것으로 충분하다.
오픈GL의 렌더링 속도는 일반적인 3차원 그래픽 프로그램을 작성하기에 충분하다. 물론 게임과 같이 아주 빠른 속도를 요구하는 애플리케이션을 작성하기에는 다소 무리가 따르는 것이 사실이이다. 하지만 오픈GL의 속도가 계속 향상되고 있고 오픈GL를 위한 그래픽 가속카드가 곧 실용화될 것으로 보이기 때문에 속도 문제도 머지않아 해결될 것으로 보인다.
플랫폼 독립적이라는 오픈GL의 특징도 매우 중요한 장점이다. 현재 오픈GL이 구현되어 있는 윈도 95/NT, OS/2, X윈도, SGI IRIS 등에서 윈도를 제어하기 위한 일부의 함수를 제외하고는 모두 똑같은 방법으로 3차원 그래픽 프로그램을 작성할 수 있다. 이것은 곧 윈도 95에서 오픈GL로 개발한 3차원 그래픽 프로그램을 별 어려움 없이 X윈도 환경으로 이식하는 것이 가능하다는 것을 의미한다.
이 정도면 오픈GL의 필요성과 장점을 조금은 이해했을 것이다. 이제 본격적으로 오픈GL에 대해 살펴보도록 하자.


opengl2

 오픈GL이란?

SGI에서 배포된 도큐먼트에 따르면 오픈GL은 ‘그래픽 하드웨어를 위한 소프트웨어 인터페이스’라고 정의되어 있다. 이 말은 오픈GL이 3차원 그래픽을 위한 프로그래밍 언어이거나 3차원 모델을 만들고 렌더링하는 3D스튜디오같은 그래픽 소프트웨어가 아님을 의미한다. 오픈GL은 3차원 그래픽을 이용하는 응용프로그램을 만들기 위한 API이다.
오픈GL은 컴퓨터 그래픽계의 리더라 할 수 있는 SGI에서 만든 IRIS GL로부터 시작되었다. 그 후 오픈GL로 바뀌면서 여러 플랫폼으로 이식되고 많은 업체들의 지원을 받아 현재는 3D 그래픽 API의 표준으로 자리를 굳히게 되었다. 그렇다면 오픈GL로 무엇을 할 수 있는가? 점, 선, 면 등과 같은 3차원 요소와 비트맵 등의 2차원 요소의 표현, 변환 행렬을 통한 이들 요소의 변형, RGBA모델과 INDEXED COLOR모델에 의한 색상의 지원, 다양한 조명과 쉐이딩의 설정, 텍스처 매핑 등 오픈GL은 3차원 그래픽 라이브러리에 기대할 수 있는 거의 모든 것을 지원한다. 뿐만 아니라 앤티앨리어싱(Antialiasing), 안개효과, 블렌딩(Blending), 더블 버퍼링, 모션블러(Motion Blur), NURBS (Non-Uniform Rational B-Spline) 등의 고급기능도 구현되어 있다. 아쉬운 점이 있다면 렌더링할 때 그림자가 생기지 않는다는 것인데, 이 문제는 그림 1과 같이 그림자 오브직트를 장면에 추가함으로써 해결 가능하다. 정리해 보면, 오픈GL은 3차원 그래픽 애플리케이션을 제작하기 위한 거의 모든 기능을 망라하고 있는 고속의 3차원 그래픽 라이브러리라 말할 수 있는 것이다.


opengl3

 오픈GL의 역사

앞에서 밝힌 바와 같이 오픈GL은 SGI의 워크스테이션 IRIS에서 구현된 그래픽 라이브러리인 IRIS GL에서 시작되었다.SGI는 10여년에 걸쳐 개발, 정리한 IRIS GL을 다른 기계로 이식하려 하였으나 처음부터 개방형으로 설계되지 않은 IRIS GL을 다른 환경으로 포팅하는 것은 쉬운 일이 아니었다. 결국 SGI는 기계에 종속적인 부분을 제거하고 속도를 위해 IRIS GL의 기능을 일부 축소하여 1992년 7월 오픈GL 1.0을 발표하였다. 오픈이라는 말은 수용성, 확장성, 이식성, 접근성, 혁신성 등을 의미하는 말이고, GL은 그래픽 라이브러리의 줄임말이니, 이름만으로도 오픈GL이 어떤 것인가를 충분히 짐작할 수 있을 것이다.
SGI는 오픈GL을 발표한 이후 윈도 NT에 오픈GL을 구현하기 위해 마이크로소프트와 손을 잡는 한편, 오픈GL을 3D그래픽 라이브러리의 표준으로 만들기 위해 오픈GL ARB를 구성한다.
오픈GL ARB(Architecture Review Board)란 SGI, DEC, IBM, 인텔, 마이크로소프트가 창립 멤버로 참여하여 구성된 오픈GL 공식기구인데, 오픈GL ARB가 구성됨으로써 오픈GL은 더 이상 SGI의 전유물이 아닌 유수의 컴퓨터업체들이 함께 관리하는 3차원 그래픽의 표준이 된 것이다.
1995년 12월 오픈GL ARB는 텍스처 매핑을 개선하고, RGBA모드에서 논리연산을 가능하게 한 오픈GL 1.1을 발표했는데, 시스템 성능이 향상되고 3차원 게임 등으로 3차원 그래픽에 대한 관심이 커지면서 오픈GL 1.1은 자연스럽게 널리 알려지게 되었다. 특히 PC운영체계의 표준이라 할 수 있는 윈도 95용 오픈GL이 발표된 것은 오픈GL의 대중화를 앞당기는 중요한 기폭제 역할을 하였다. 현재 오픈GL ARB는 오픈GL 1.2를 준비하고 있는데, 오는 12월에 열리는 오픈GL ARB에서 논의를 거친 후 내년 초반에 발표될 것이라고 한다.새로 발표될 버전 1.2에 추가되는 기능 중 중요한 변화를 살펴보면 다음과 같다.

·3차원 텍스처 매핑 지원
·BGRA포맷과 압축 픽셀 포맷의 지원
·택스처 매핑의 디테일 레벨 조정기능
·X윈도를 위한 glx의 개선
·블랜딩기능의 향상
·4x4 색상행렬의 제공


opengl4

 오픈GL의 특징

오픈GL의 여러 가지 특징 중 프로그래밍을 위해 알아두어야 할 중요한 것을 열거해 보면 다음과 같다.

오픈GL은 윈도 제어와 관련된 기능을 포함하지 않는다.
오픈GL의 장점으로 플랫폼에 독립적이라는 것을 강조했었는데 이것은 오픈GL이 윈도 시스템에 따라 각기 다른 윈도 제어 관련기능을 제공하지 않기 때문에 가능하다. 즉 오픈GL은 장면을 기술하고 렌더링하기 위한 함수만을 제공할 뿐이지 윈도를 생성하고 윈도 크기를 조절하는 등의 기능은 없다.그렇다면 오픈GL로 윈도를 사용하는 애플리케이션을 개발할 수 없다는 말인가? 예상했겠지만 결코 그렇지 않다. 윈도 생성/파괴, 위치/크기조정, 사용자 입력처리 등의 윈도를 제어하는 함수는 오픈GL 자체에 정의되어 있지 않지만 각 윈도 시스템마다 존재하는 오픈GL 확장 함수가 그것을 가능하게 해준다. 실제로 X윈도를 제어하기 위해서는 glx함수들이 제공되고 MS윈도를 위해서는 wgl('위글'이라고 읽는다)함수들이 제공된다. 또 매킨토시를 위해서는 agl이, OS/2를 위해서는 pgl함수들이 있는데 이들 확장함수들은 각 윈도시스템에 종속적이므로 서로 다른 방식으로 사용된다. 윈도 95/NT용 오픈GL에서 헤더파일인 gl.h, glu.h, glaux.h 파일을 찾아보면 그 어디에서도 wglCreateContext, wglMakeCurrent 등의 wgl계열의 함수를 찾을 수 없다. 그렇다면 wgl 함수의 프로토타입은 어디에 선언되어 있는 것일까? 정답은 바로 wingdi.h이다. 이를 통해 알 수 있듯이 각 윈도 시스템마다 다른 wgl, glx, pgl, agl 등의 함수는 엄밀히 말해 오픈GL함수라고 볼 수 없다.

오픈GL은 객체지향적이지 않다.
오픈GL은 요즘에 나오고 있는 다른 라이브러리와는 달리 객체지향적이지 않다. 비슷한 기능을 하는 마이크로소프트 사의 다이렉트 3D가 COM(Component Object Model)에 기반을 둔 전형적인 객체지향 API인 것을 생각해 보면 오픈GL이 다소 뒤떨어진 것으로 보일지도 모른다. 하지만 비객체지향적 특징은 호환성이나 이식성을 높이고 C++같은 언어를 모르는 사람도 쉽게 이해할 수 있도록 해주기 때문에 한편으로는 장점일 수도 있다.
참고로 이야기 하면 SGI에서 내놓은 오픈 인벤터는 오픈GL을 기반으로 하여 만들어진 객체지향적 3차원 그래픽 툴킷이다. MFC가 윈도 API를 기반으로 만들어진 C++라이브러리인 것과 같이, 오픈 인벤터는 오픈GL을 기반으로 하여 만들어진 C++클래스 라이브러리이다. 그러나 오픈 인벤터를 단순히 오픈GL에 클래스를 입힌 정도의 라이브러리로 생각한다면 그건 옳지 않다. 오픈 인벤터는 프로그래밍을 위한 라이브러리의 차원을 넘어서 3차원 모델을 만들기 위한 툴과 그 모델을 디스크에 저장하고 읽어들이기 위한 3차원 모델의 파일포맷까지를 제공하는 종합적인 3차원 응용프로그램 개발 환경이다. 오픈 인벤터는 지난 호에 특집으로 다루어진 바 있는 VRML과 아주 밀접한 관련을 가지고 있는데 VRML 1.0은 오픈 인벤터의 3차원 파일포맷을 기반으로 만들어진 것이다. 객체지향에 관심이 있는 독자는 오픈 인벤터에 대해 공부해 보면 좋을 것이다.

오픈GL은 클라이언트/서버 구조이다.
오픈GL은 클라이언트/서버 구조로 설계되었다. 즉 3차원 렌더링을 원하는 프로그램(클라이언트)이 오픈GL(서버)에게 어떤 요청을 하면 서버가 그 요청에 대한 응답을 하는 방식으로 오픈GL이 작동한다는 것이다.
특히 X윈도에서와 같은 경우에는 네트워크 투명성이 보장되므로 클라이언트와 서버가 다른 컴퓨터에 있어도 무방하다. 이 같은 특성을 잘 이용하면 CPU사용이 많이 필요한 3차원 그래픽 애플리케이션을 분산처리하여 성능을 향상시키는 것이 가능하다.

오픈GL은 State Machine 구조이다.
오픈GL는 State Machine 구조로 이루어져 있다. 우리가 내리는 명령 중 많은 부분은 오픈GL의 상태를 변경하거나 읽어들이는 명령이다. 이러한 명령들이 수행될 때마다 오픈GL은 내부적으로 자신의 상태를 변경, 저장하게 되고, 이러한 상태는 오픈GL이 렌더링된 장면을 만들어낼때 사용되게 된다. 오픈GL의 상태에는 여러 가지 종류가 있지만, 일단 Enabled/Disabled의 두 가지 값만을 가지는 상태들에 대해 알아보자. 이들 값을 변경하는 기본적인 함수는 glEnable과 glDisable이고 현재의 상태를 읽어들이는 기능을 하는 기본함수는 glIsEnabled이다.

void glEnable( GLenum cap );
void glDisable( GLenum cap );
GLboolean glIsEnabled( GLenum cap );

함수의 프로토타입에 나오는 cap은 오픈GL capabil ity를 나타내는 상징으로, 오픈GL 헤더 파일에 매크로로 정의되어 있는데 그 중 많이 쓰이는 몇 가지를 나열해 보면 표 1과 같다.
프로그래머가 오픈GL 렌더링에 조명을 사용하기 원한다면 glEnable(GL_LIGHTING)을 코드에 써넣으면 되고, 반대로 glDisable(GL_LIGHTING)을 명령하면 조명에 관련된 다른 설정과 무관하게 조명은 꺼지게 된다. glEnable(GL_LINE_SMOOTH) 선을 앤티앨리어싱되게 만들고, glEnable(GL_TEXTURE_2D) 2차원 텍스처 매핑이 작동되도록 하는 명령이다. 또 선을 점선으로 만들고 싶다면, glLineStipple로 점선의 비트 패턴을 지정한 후 glEnable(GL_LINE_STIPPLE)을 명령하면 된다. 표 1에 열거된 상태 중 재미있는 것은 GL_CULL_FACE라는 상태인데, GL_CULL_FACE가 enable되면 오픈GL은 면의 한쪽만을 렌더링한다. 예를 들어 상자밖에서 상자를 바라보면 상자가 보이지만, 상자 안에서 밖을 바라볼 때는 마치 상자가 없는 것처럼 보이게 된다는 것이다. 이와 같은 기능은 속도를 개선시키기 위해 만들어진 것인데, 대부분의 장면에서 면의 뒤쪽은 은면(보이지않는 면)이 되므로 뒷면을 렌더링하는 것은 시간낭비다. 그렇다면 어느 쪽이 앞면이고 어느 쪽이 뒷면인가? 이 문제는 면의 꼭지점을 지정한 방향에 따라 정해진다. 즉, 상태변경 함수 중의 하나인 glFrontFace를 이용하여 GL_CW를 지정하면 시계방향(Clock Wise)으로 꼭지점이 지정된 쪽이 앞면이 되고, GL_CCW를 지정하면 반시계방향(Counter Clock Wise)으로 꼭지점이 지정된 쪽이 앞면이 되는 것이다. 따라서 GL_CULL_FACE가 enable되어 있을 때는 물체의 꼭지점을지정할 때 주의를 기울여야 한다.
오픈GL 상태의 종류는 매우 다양하며 상태를 통해 하게 되는 일은 매우 많다. 이러한 의미에서 오픈GL을 하나의 거대한 State Machine이라고 말하는 것은 무리가 아니다.

===============================================================
매크로 기능
---------------------------------------------------------------
GL_COLOR_MATERIAL 현재의 색을 물체의 색으로 지정
GL_LIGHTING 조명을 사용
GL_LIGHT? ?번째의 조명을 작동시킴
GL_NORMALIZE 계산 전에 모든 벡터를 단위벡터(크기가 1인벡터)로 바꿈
GL_TEXTURE_1D 1차원 텍스처를 사용
GL_TEXTURE_2D 2차원 텍스처를 사용
GL_DEPTH_TEST 깊이 버퍼를 사용(은선/은면 제거)
GL_CULL_FACE 속도를 위해 뒷면을 렌더링하지 않도록 함
GL_LINE_SMOOTH 선을 앤티앨리어싱함
GL_LINE_STIPPLE 비트패턴으로 선을 그림
GL_POLYGON_SMOOTH 폴리곤을 그릴 때 앤티앨리어싱을 사용
GL_POLYGON_STIPPL 폴리곤을 비트패턴으로 채움
===============================================================
표 1 : 오픈GL의 상태관련 매크로

오픈GL은 절차적이다.
오픈GL을 사용하는 프로그래머는 장면을 절차적으로 기술해야 한다. 예를 들어 “노란 상자 위에 파란 철사로 된 주전자가 놓여있다(그림 2)”라는 장면을 오픈GL로 렌더링하기 위해서는 다음과 같은 절차를 거쳐야 한다. 단, 이 기술은 조명이나 쉐이딩 등의 기타 요소는 고려하지 않은 것이며 대괄호 안은 각단계를 오픈GL함수에 맞춰 의사코드(Pseudo-code)로 적은 것이다.

현재 색상을 노랑색으로 바꾼다. [ glColor3f(1.0f,1.0f,0.0f);]
상자를 그린다. [auxSolidBox(100.0f,100.0f,10.0f);]
현재 위치를 정육면체 위로 이동한다. [glTranslatef(0.0f,0.0f,25.0f);]
현재 색상을 파랑색으로 바꾼다. [glColor3f(0.0f,0.0f,1.0f);]
주전자를 그린다. [auxWireTeapot(20.0f);]

===============================================================
이 름 함수 접두어 헤더파일 DLL이름 기 능
---------------------------------------------------------------
OpenGL(Gl) gl gl.h opengl32.dll 오픈GL의 메인라이브러리.
Utility(Glu) glu glu.h glu32.dll 오픈GL 사용을 간편하게
해주는 유틸리티.
Aux(Glaux) aux glaux.h DLL없음 간단한 오픈GL 애플리케이
션을 작성하기 위한 함수를
모아놓은 툴킷 라이브러리.
===============================================================
표 2 : 오픈GL의 구성

이 코드를 유심히 살펴본다면, 오픈GL의 절차적 장면기술이 위에서 이야기했던 오픈GL상태와 밀접한 관계를 가지고 있음을 알 수 있을 것이다. 프로그래머가 장면을 기술하기 위해서는 상태를 설정하고 어떤 동작을 하고 또 다시 상태를 변경하는 연속적인 절차를 반복하게 된다. 오픈GL로 프로그래밍할 때, 명령을 내리는 순서가 중요한 것은 이런 오픈GL의 절차적 특성 때문이다.


opengl5

 오픈GL의 구성

오픈GL의 구성에 대해 살펴보기 전에 한 가지 확실히 해둘 것이 있다. 오픈GL이 플랫폼에 독립적이라고 지금껏 강조해 왔지만 윈도 제어 함수의 차이, 개발도구의 차이 등으로 각 운영체계 사이에는 어느 정도 다른 점이 있다. 필자는 여러 가지 환경 중에서 MS윈도(특히 윈도 95)에 논의의 초점을 맞추려고 한다. 왜냐하면 윈도 95는 현재 가장 많은 사용자를 가지고 있는 운영체계이고 MS 비주얼 스튜디오(비주얼 C++)라는 편한 개발환경을 가지고 있기 때문에 오픈GL을 익히고 응용프로그램을 만들기에 가장 적합하기 때문이다. 오픈GL은 크게 세개의 라이브러리로 구성된다. Gl, Glu, Glaux가 바로 그것인데, 각 라이브러리의 기능과 특징은 표 2와 같다.

오픈GL(Gl)
오픈GL(혹은 Gl)라이브러리는 오픈GL의 핵심이라고 할 수 있는 것으로 오픈 GL을 제어하는 기본적인 함수들의 집합체이다. Gl 라이브러리 함수들은 주로 오픈GL의 렌더링과 관련된 기능들을 제공한다. Gl의 헤더 파일인 gl.h에는 오픈GL의 기본적인 타입정의와 매크로정의 그리고 각 함수들의 프로토타입이 나열되어 있는데 관심있는 독자라면 한번쯤 훑어보면 좋을 것이다.

Utility(Glu)
오픈GL의 핵심 라이브러리인 Gl이 렌더링과 관련된 기초 기능만을 위주로 하기 때문에 실제 응용프로그램을 만들기 위해서는 많은 반복작업을 해야만 한다. 이러한 작업을 단순화시켜 주고 그 밖의 유용한 기능을 제공해 주는 라이브러리가 바로 Glu이다. Glu의 중요한 기능을 살펴보자.

투사 행렬 설정 기능
3차원 좌표에 그려진 물체들을 2차원 윈도(뷰포트) 위에 그리기 위해서는 적절한 변환과정을 거쳐야만 하는데, 오픈GL에서는 3차원 좌표값을 프로젝션 매트릭스(투사행렬)라는 4×4크기의 행렬에 곱하는 방법으로 변환을 한다. 그렇다면 우리가 원하는 시선에 맞는 프로젝션 매트릭스를 어떻게 구할 것인가가 문제가 된다. 변환과 행렬 계산에 아주 능통한 사람이라면 직접 행렬을 계산해서 glLoadMatrix를 이용해 행렬을 설정할 수도 있겠지만 이 방법은 별로 바람직하지 않다.
Gl은 프로젝션 매트릭스를 설정하기 위한 두개의 함수를 제공한다.

void glOrtho(GLdouble left, GLdouble right, GLdouble bottom,
GLdouble top, GLdouble near, GLdouble far);
void glFrustum(GLdouble left, GLdouble right,
GLdouble bottom, GLdouble top,GLdouble znear, GLdouble zfar);

glOrtho함수로 프로젝션 매트릭스를 설정하면 멀리있는 물체나 가까이 있는 물체나 같은 크기로 보이는 정사영(한 점에서 한 직선 또는 한 평면 위에 그은 수선의 발)이 화면에 그려지고, glFrustum함수로 행렬을 설정하면 원근감을 가지는 장면이 연출된다.
Gl함수로도 원하는 장면을 위한 투사 행렬을 얻을 수 있지만 Glu에 포함된 함수들을 이용하면 훨씬 더 쉽게 다양한 투사행렬을 구할 수 있다. gluOrtho2D함수는 glOrtho와 거의 비슷한 함수인데, glOrtho의 near와 far를 각각 -1.0, 1.0으로 정한 것이다. glu Perspective는 glFrustum과 비슷하지만 상하좌우의 값을 설정하는 대신에 y방향의 시선각도인 fovy(FOV는 Field Of View의 약자)와 종횡비인 aspect를 이용한다는 점이 다르다.

void gluOrtho2D(GLdouble left, GLdouble right,
GLdouble bottom, GLdouble top );
void gluPerspective(GLdouble fovy, GLdouble aspect,
GLdouble zNear, GLdouble zFar );
void gluLookAt(GLdouble eyex, GLdouble eyey,
GLdouble eyez, GLdouble centerx, GLdouble centery,
GLdouble centerz,GLdouble upx, GLdouble upy,
GLdouble upz);

gluLookAt은 3차원 그래픽 도구들에서 볼 수 있는 카메라와 매우 흡사한 것인데 관찰자의 위치(eye)와 바라보고자 하는 위치(center) 그리고 관찰자의 윗쪽 방향(up)을 지정하여 시선을 설정하는 기능을 한다.

텍스처 매핑을 위한 비트맵의 관리
텍스처를 폴리곤에 매핑하는 것은 메인라이브러리인 Gl의 몫이지만 매핑 소스로 쓰이는 이미지를 관리하는 것은 프로그래머의 몫이다. 따라서 프로그래머는 매핑 소스로 쓰일 비트맵 파일을 읽어들이고, 적당히 변형을 하고 사용이 끝난 비트맵을 정리하는 등의 과정을 직접 처리해야 한다. 이러한 일을 처리하는 것은 상당히 귀찮은 작업인데 Glu라이브러리 함수를 사용하면 단순화될 수 있다. 텍스처 매핑과 관련된 중요한 함수는 다음과 같은 것이 있다.

int gluBuild1DMipmaps(....);
int gluBuild2DMipmaps(....);
int gluScaleImage(....);

이 중 gluScaleImage함수는 이미지를 적절한 크기로 바꾸어주는 함수이고 gluBuild1/2DMipmaps함수는 glu Scale Image함수를 이용해 Mipmaps를 만들어주는 함수이다. Mipmaps란 하나의 면을 상황에 따라서 각기 다른 텍스처로 사용하는 것을 말한다. 즉, 면이 관찰자로부터 멀리있을 때는 저해상도의 텍스처를 사용하여 렌더링 속도를 높이고, 가까이 있을 때는 고해상도의 텍스처를 사용하여 렌더링질을 높이는 것이 Mipmapping인 것이다. gluBuild1/2D Mipmaps함수는 Mipmapping에 쓰이는 여러 해상도의 매핑소스를 자동으로 만들어주는 함수이다.

Polygon Tessellation
Polygon Tessellation이란 오픈GL이 렌더링할 수 없는 폴리곤을 렌더링이 가능한 폴리곤들로 바꾸는 작업이다. 렌더링이 불가능한 폴리곤이란 오목하거나 속이 빈 폴리곤 혹은 선분이 교차하는 폴리곤을 말한다. 이와 같은 폴리곤을 장면에 그리기 위해서는 Tessellation을 통해 하나의 폴리곤을 여러 개로 나누어야만 한다. 즉, 오목 사각형을 표현하기 위해서 두개의 볼록 삼각형을 이용하는 것이 바로 Tessellation의 한예이다.
렌더링할 장면을 일일이 머리 속으로 떠올리면서 렌더링이 가능한 폴리곤만으로 장면을 구성하는 것은 여간 어려운 일이 아닌데 이러한 고통을 Glu가 해결해 준다. 프로그래머는 렌더링이 불가능한 폴리곤이 나올 것 같은 장면 이전에 미리 Tessellation과 관련된 속성을 설정해 놓는다. 그리고 꼭지점을 지정할 때 glVertex함수 대신에 gluTessVertex를 이용하면 자동으로 렌더링 가능한 폴리곤으로 바뀌면서 렌더링이 수행된다.

구, 실린더, 디스크 등의 오브직트 생성
Gl 라이브러리만을 이용해서 구, 실린더, 디스크 등의 오브직트를 생성하는 것은 매우 귀찮은 작업이다. 프로그래머는 이들 오브직트들의 꼭지점을 일일이 계산하여 각 점을 glVertex함수로 하나하나 찍어주어야 한다. 그러나 Glu함수들을 이용하면 이러한 단순작업을 간단히 할 수 있다. Glu에 정의되어 있는 GLUquadricObj라는 구조체의 포인터를 만든 후 실제 렌더링을 하는 부분에서 포인터를 이용하여 원하는 오브직트를 생성하는 함수를 호출하면 꼭지점을 하나도 찍지 않고 원하는 오브직트를 만들 수 있다. 리스트 1을 보면 객체를 만들고 지우는 과정이, C++의 new/delete 연산과 비슷하다는 것을 알 수 있을 것이다.

리스트 1 : Glu로 구만들기 예제
// 초기화 부분
GLUquadricObj *pObj;
// Quadric
Object를 만들기 위한 구조체 포인터
pObj = gluNewQuadric();
// Object를
생성(아직 오브직트가 그려지지 않음)

// 장면 기술부분
gluSphere(pObj , 30.0 , 10 , 10);
// 반지름 30, 위선과 경선 수가 10인 구를 생성

// 정리 부분
gluDeleteQuadric(pObj); // 객체를 삭제
리스트 1에서 gluSphere만 다른 함수로 바꾸면 얼마든지 다른 객체를 만드는 것이 가능하다.

.void gluDisk(GLUquadricObj *qobj,
GLdouble innerRadius,GLdouble outerRadius,
GLint slices,GLint loops); <그림 5>
void gluCylinder(GLUquadricObj * qobj,
GLdouble baseRadius, GLdouble topRadius,
GLdouble height, GLint slices, GLint stacks);<그림 6>
void gluSphere(GLUquadricObj * qobj,
GLdouble radius, GLint slices,
GLint stacks); <그림 7>

기타 기능
오픈GL 렌더링중 발생하는 에러에 대한 정보는 glGet Error함수를 통해 얻을 수 있지만 이 정보는 정수값이기 때문에 사용자에게 에러의 원인을 알리기 위해서는 프로그래머가 직접 에러메시지를 출력해야 한다. gluErrorString함수는 glGetError에서 얻은 에러코드를 에러문자열로 바꾸어주는 기능을 하는 함수로 예외처리에서 프로그래머의 노력을 덜어준다. 뿐만 아니라 gluGetString을 이용하면 오픈GL의 버전이나 작동가능한 Glu 확장기능 등을 얻어내는 일도 할 수 있다.

Aux(Glaux)
오픈GL과 wgl함수를 이용해 선을 하나 렌더링하는 프로그램을 작성하는 것은 API로 HelloWin을 출력하는 프로그램을 만드는 것보다도 훨씬 긴 코드를 필요로 한다. 이는 wgl함수의 복잡함 때문인데, wgl함수의 복잡함은 자칫 단순한 프로그램의 배꼽을 배보다 크게 만들 수도 있다. Aux라이브러리는 플랫폼에 독립적인 윈도 제어기능과 Glu를 능가하는 물체 생성기능을 가지는 툴킷라이브러리이다. Aux라이브러리를 이용하여 프로그램을 만들면 wgl이나 glx 등의 윈도 제어함수들을 모르더라도 쉽게 오픈GL프로그램을 작성할 수 있기 때문에 오픈GL프로그램을 처음 작성하는 사람도 쉽게 오픈GL을 배울 수 있게 해준다. 뿐만 아니라 플랫폼마다 다른 윈도 제어함수를 사용하지 않기 때문에 한줄도 고치지 않은 상태에서 다른 환경으로 이식하는 것이 가능하다.
Aux 라이브러리의 중요기능은 윈도생성, 입력제어, 3차원 물체 생성, 더블버퍼링, 텍스처 매핑용 이미지의 로딩 등이 있다.

윈도생성
void APIENTRY auxInitDisplayMode(GLenum);
void APIENTRY auxInitPosition(int, int, int, int);
GLenum APIENTRY auxInitWindow(LPCTSTR);
먼저 auxInitDisplayMode로 적당한 윈도 모드를 설정한 후, auxInitPosition으로 윈도의 초기 위치와 크기를 지정하고, auxInitWindow로 윈도 이름을 지정하기만 하면 오픈GL로 렌더링이 가능한 3차원 윈도가 생성된다. 후에 wgl함수로 윈도를 띄워보면 알겠지만, PFD(Pixel Format Descriptor)를 작성하고 렌더링 컨텍스트(RC)를 관리하여 wgl윈도를 띄우는 것은 상당히 귀찮은 작업이다.

입력제어
Aux라이브러리로 만든 프로그램에서 입력을 처리하기 위해서는 미리 입력을 처리할 CALLBACK함수를 만들어야 한다. 그리고 auxKeyFunc나 auxMouseFunc로 이벤트 처리 함수를 등록하면 키입력이 있을 때마다 등록된 함수가 자동으로 호출된다. 윈도 프로그래밍의 경험이 있는 사람이라면 Aux라이브러리가 이벤트 처리함수를 호출하는 것이 윈도 프로그램에서 윈도가 윈도 프로시저를 호출하는 것과 비슷하다는 것을 느낄 수 있을 것이다.

3차원 물체의 생성
이 글의 앞부분을 자세히 읽은 독자라면, 오픈GL의 절차적 특성을 이야기하면서 주전자그리기의 예를 든 것을 기억할 것이다. 그 부분의 코드를 보면 auxWireTeapot이라는 함수를 호출하는데, 그것이 바로 Aux라이브러리의 3차원 물체생성의 전형적인 예이다. Aux라이브러리는 상자모양, 원뿔모양은 물론, 정사면체, 정육면체, 정팔면체, 정십이면체, 정이십면체의 5가지 정다면체 전부와, 토러스, 구, 실린더, 주전자 등을 그리는 기능을 제공한다. 아마도 독자들 중에 ‘왠 주전자’라는 의문을 가질 사람이 있을 것 같은데, 주전자(Teapot)는 컴퓨터 그래픽의 초창기부터 폴리곤으로 3차원 객체를 만드는 예로 가장 많이 쓰였던 유서깊은 물체이다. PC에서 가장 널리 쓰이는 3차원 그래픽 프로그램인 3DStudio MAX에도 역시 주전자 생성기능이 들어있는데 단순히 주전자를 만드는 기능을 넘어서 주전자의 뚜껑 유무, 손잡이 유무등의 옵션까지 설정할 수 있다.

void APIENTRY auxSolidSphere(GLdouble);
// 구
void APIENTRY auxSolidCube(GLdouble);
// 정6면체
void APIENTRY auxSolidBox(GLdouble, GLdouble, GLdouble);
// 상자
void APIENTRY auxSolidTorus(GLdouble, GLdouble);
// 토러스(도넛모양)
void APIENTRY auxSolidCylinder(GLdouble, GLdouble);
// 실린더(원통)
void APIENTRY auxSolidIcosahedron(GLdouble);
// 정20면체
void APIENTRY auxSolidOctahedron(GLdouble);
// 정8면체
void APIENTRY auxSolidTetrahedron(GLdouble);
// 정4면체
void APIENTRY auxSolidDodecahedron(GLdouble);
// 정12면체
void APIENTRY auxSolidCone(GLdouble, GLdouble);
// 원뿔
void APIENTRY auxSolidTeapot(GLdouble);
// 주전자
..........

더블 버퍼링과 매핑용 이미지로딩
더블 버퍼링이란 애니메이션의 다음 장면을 화면에 보이지 않는 버퍼에 렌더링하고 완전히 그리기가 끝난 후 버퍼를 한 순간에 화면으로 옮기는 애니메이션기법을 말한다. 오픈GL은 명령이 내려지면 곧바로 화면에 그림이 그려지는 Immediate 렌더링 모드로 작동하기 때문에 자연스러운 애니메이션을 위해 더블버퍼링은 꼭 필요한 기능이다. 더블 버퍼링을 wgl로 구현하기 위해서는 디바이스 컨텍스트(DC)와 렌더링 컨텍스트(RC)를 동시에 관리하면서 여러 가지를 처리해 주어야 하지만 Aux라이브러리에서는 매우 단순하다. 먼저 auxInitDisplayMode함수를 호출할 때 AUX_DOU B LE을 논리합(OR)을 추가하고 실제 버퍼링이 필요할 때 단순히 auxSwapBuffers함수를 호출하기만 하면 된다. 텍스처 매핑용 이미지를 읽어들이는 기능도 Aux라이브러리의 중요한 기능인데 auxRGBImageLoad함수와 auxDIB ImageLoad함수를 이용하면 파일의 핸들이나 헤더를 전혀 신경쓰지 않고도 ‘.RGB’포맷이나 ‘.DIB(혹은 BMP)’포맷을 쉽게 읽어들일 수 있다. Aux라이브러리는 사용자에게 매우 간편한 환경을 제공한다. 그러나 테스트나 데모용이 아닌 본격적인 응용프로그램을 작성하는데 Aux라이브러리에 의존하는 것은 그다지 좋지 못한 습관이다. Aux라이브러리는 단순하고 플랫폼에 독립적인 만큼 기능면에서 한계를 갖고 있기 때문이다.

리스트 2 : GLUT 프로그램의 예
#include "GL/glut.h"

static void display()
{
glClear(GL_COLOR_BUFFER_BIT); // 이곳에서
장면을 묘사한다.
glutSwapBuffers();
}

void main(int argc, char **argv)
{
glutInit(&argc,
argv);
glutInitDisplayMode(GLUT_DOUBLE
| GLUT_RGB );
glutCreateWindow("Glut
Test");
glutDisplayFunc(display);
glutMainLoop();
}

리스트 3 : AUX프로그램의 예
#include "GL/glaux.h"

void CALLBACK display()
{
glClear(GL_COLOR_BUFFER_BIT);
// 이곳에서 장면을 묘사한다.
auxSwapBuffers();
}

void main(void)
{
auxInitDisplayMode(AUX_DOUBLE | AUX_RGB);
auxInitPosition(0,0,400,300);
auxInitWindow("Aux Test");
auxMainLoop(display)
}

Glut이란 무엇인가?
Glut이란 OpenGL Utility Toolkit의 약자로 중·소형 오픈GL프로그램을 작성하기 위한 플랫폼에 독립적인 툴킷이다. Glut은 Aux라이브러리와 비슷한 기능을 하는 라이브러리인데, 기능이 Aux라이브러리보다 훨씬 다양하고 인터넷을 통해 꾸준히 업그레이드되고 있기 때문에 최근 오픈GL을 배우려는 사람들의 많은 관심을 끌고 있다. Glut은 SGI의 직원인 Mark Kilgard(mjk@sgi.com)라는 사람이 X윈도에서 개발한 것인데, 현재 버전 3.5까지 나와있다. Glut은 X윈도에서 개발되었지만 Nate Robins(ndr@ pobox.com)가 윈 32로 포팅해 놓았기 때문에 윈도용 DLL 파일과 헤더, 임포트라이브러리와 예제코드도 쉽게 구할 수 있다. 리스트 2, 3의 소스프로그램은 Glut과 Aux라이브러리를 비교하기 위해 윈도를 띄우는 과정을 각각의 라이브러리로 구현해 본 것이다. 소스들을 비교해 보면 알 수 있겠지만 Glut과 Aux라이브러리는 거의 비슷한 방식으로 운영된다. 따라서 Aux라이브러리의 사용법을 알고 있다면 쉽게 Glut을 배울 수 있을 것이다.


opengl6

 오픈GL의 타입, 함수, 매크로

오픈GL의 타입
오픈GL의 메인헤더 파일인 gl.h 파일을 찾아보면 오픈GL에서 사용하는 타입들을 typedef으로 정의해 놓은 것을 찾아볼 수 있다.

typedef unsigned int GLenum;
typedef unsigned char GLboolean;
typedef unsigned int GLbitfield;
typedef signed char GLbyte;
typedef short GLshort;
:
:

오픈GL이 독자적인 타입을 정의한 것은 오픈GL에서 사용하는 변수들의 정확도를 높이고 각 환경마다 다를 수 있는 타입으로 인한 이식성의 저하를 막기 위한 것이다. 오픈GL에서 쓰이는 타입들을 정리해 보면 표 3과 같다. 타입에 대해 한 가지 알아두어야 할 것은 오픈GL에서는 속도의 향상을 위해 부동소수점 수로 GLdouble보다 GLfloat을 더 많이 사용한다는 점이다. 그렇기 때문에 부동소수점 수가 필요할 때 GLdouble대신 GLfloat를 사용하면 타입변환으로 인한 시간낭비를 줄일 수 있을 것이다.

오픈GL의 함수이름
오픈GL의 함수들은 매우 일관성있는 함수명을 가지고 있다.

<라이브러리 접두어><함수 어근>[인자개수][인자타입]
예를 들어 장면의 꼭지점을 지정하는 함수인 void glVertex3f(GLfloat x, GLfloat y, GLfloat z); 의 경우에 gl은 이 함수가 오픈GL 메인라이브러리에 속한다는 것을 의미하고, Vertex는 함수의 어근으로 함수가 수행하는 동작이 꼭지점 지정임을 의미한다. 그리고 3f란 float인자를 3개 가진다는 뜻이다. 인자의 수와 타입에 따라서 같은 일을 하는 함수라도 여러 종류가 있을 수 있다. 예를 들어 색을 지정하는 함수인 glColor의 경우에 다음과 같이 많은 종류의 함수들이 있다. ‘glColor쪱’로 표현하면 아래 함수들 모두를 말하는 것으로 생각하면 된다.

glColor3b, glColor3d, glColor3f, glColor3i, glColor3s,
glColor3ub, glColor3ui, glColor3us, glColor4b,
glColor4d, glColor4f, glColor4i, glColor4s,
glColor4ub, glColor4ui, glColor4us, glColor3bv,
glColor3dv, glColor3fv, glColor3iv, glColor3sv,
glColor3ubv, glColor3uiv, glColor3usv, glColor4bv,
glColor4dv, glColor4fv, glColor4iv, glColor4sv,
glColor4ubv, glColor4uiv, glColor4usv

glColor*의 경우에 인자가 3개이면 각기 R, G, B값을 표현하는 것이고, 4개이면 R, G, B, 알파값을 지정하는 것이다. 알파값이란 색상의 투명도를 나타내는 값으로 최대(1.0f)인 경우 가장 불투명하게 되는데 glColor3f으로 설정했을 때는 이값이 알파값으로 선택된다.v옵션은 함수의 인자들을 벡터형식으로 입력받겠다는 뜻이다. 따라서 v형 함수를 사용할 때는 인자 숫자만큼의 배열(벡터)을 만들고 그 안에 값을 설정한 후 배열의 포인터를 넘겨야 한다. 다음에서 glColor3f와 glColor3fv를 호출한 결과는 서로 같다.

glColor3f(1.0f , 1.0f , 1.0f);

GLfloat color_vec[3] = { 1.0f , 1.0f , 1.0f };
glColor3fv(color_vec);

이름이 약간씩 다른 함수들은 그 용도와 사용법에 있어서 차이가 있으므로 함수를 사용하기 전에 먼저 프로토타입을 찾아보고 가장 알맞은 함수를 골라쓰는 것이 좋다.

오픈GL의 매크로
오픈GL에 사용되는 상수들은 헤더 파일에 매크로로 정의되어 있다. 이들 매크로 중 대부분은 오픈GL의 상태를 조절하기 위해 쓰이는 상태상수들과 에러의 종류를 나타내는 에러상수들이다. 오픈GL매크로는 GL_POINT, GL_CULL_FACE, GLU _ SMOOTH와 같이 대문자로 구성되어 있으며 GL, GLU, AUX 등의 라이브러리 접두어로 시작하고 밑줄로 단어 사이의 구분이 이루어진다.

===============================================================
오픈GL 타입 접미어 C 타입 데이터 표현
---------------------------------------------------------------
GLbyte b signed char 8비트 정수
GLshort s short 16비트 정수
GLint, GLsizei i int 32비트 정수
GLfloat,GLclampf f float 32비트 부동소수점 수
GLdouble,GLclampd d double 64비트 부동소수점 수
GLubyte,GLboolean ub unsigned char 8비트 무부호 정수
GLushort us unsigned short 16비트 무부호 정수
GLuint,GLenum, ui unsigned int 32비트 무부호 정수
GLBitfield
===============================================================
표 3 : 오픈GL의 타입


opengl7

 윈도 95/NT에서 오픈GL 사용

윈도 NT에는 오픈GL이 기본시스템으로 설치되기 때문에 별다른 문제가 없지만 윈도 95에서 오픈GL로 작성된 응용프로그램을 수행시키기 위해서 오픈GL을 별도로 구해서 설치해야만 한다(최근 발표된 OS R2는 기본적으로 오픈GL을 가지고 있다고 한다). 윈도 95용 오픈GL은 나우누리, 하이텔 등 통신망의 공개자료실에서 구하거나 마이크로소프트의 ftp사이트에서 구할 수 있다.
ftp://ftp.microsoft.com/softlib/mslfiles/opengl95.exe

오픈GL 95버전 1.1을 다운로드받아 압축을 풀면 다음과 같은 파일들이 나온다.

Gl.h, Glu.h, Glaux.h 등의 헤더 파일
Opengl32.lib, Glu32.lib, Glaux.lib 등의 라이브러리 파일
Opengl32.dll, Glu32.dll 등의 DLL 파일
Readme.txt

헤더 파일들은 C 컴파일러의 include 디렉터리 밑에 GL이란 디렉터리를 만들고 복사해야 하며, 라이브러리는 컴파일러의 lib 디렉터리에 복사해야 한다. 단 VC++ 5.0과 같은 최신의 컴파일러를 사용한다면 이 파일들이 이미 다 설치되어 있으므로 복사할 필요가 없다. 라이브러리 파일에 대해 한 가지 덧붙이자면, Glaux.lib는 실제 코드를 담고있는 라이브러리지만 opengl32.lib와 Glu32.lib는 DLL을 연결시키기 위한 임포트 라이브러리이다. 따라서 오픈GL응용 프로그램은 반드시 DLL 파일과 함께 배포해야 한다. 프로그래밍을 위한 헤더와 라이브러리의 복사가 끝났으면 Glu32.dll과 opengl32.dll을 윈도의 시스템 디렉터리로 복사한다. 오픈GL응용 프로그램을 개발하는 것에 관심이 없다면 DLL만을 복사해도 된다. Glu32.dll과 opengl32.dll을 윈도 시스템 디렉터리로 복사하는 것이 끝났다면 이미 오픈GL 응용프로그램을 수행하기 위한 준비를 마친 것이다. 오픈GL테스트를 위한 첫 번째 프로그램으로 필자가 권하는 것은 3차원 화면보호기이다. 하이텔이나 나우누리 등 통신망의 공개자료실에서 오픈GL이란 검색어로 자료찾기를 하면 쉽게 오픈GL용 화면보호기를 찾을 수 있을 것이다. 오픈GL응용 프로그램이 잘 작동했다면 이제 오픈GL응용 프로그램을 만들 준비를 해보자. PC에서 오픈GL응용 프로그램을 만들기 가장 좋은 환경은 마이크로소프트 비주얼 C++ 5.0이다. 마이크로소프트는 오픈GL의 초창기부터 오픈GL을 윈도에 이식하는 작업을 해왔을 뿐아니라 현재는 오픈GL ARB의 회원으로 오픈GL 표준화에 앞장서고 있다. 이러한 마이크로소프트의 오픈GL 지원정책에 걸맞게 VC++ 5.0은 오픈GL응용 프로그램을 제작하기에 최적의 환경을 제공하고 있다.
VC++ 5.0는 Gl, Glu, Aux 라이브러리의 헤더 파일 전부와 라이브러리를 기본적으로 가지고 있으며 Gl과 Glu에 속하는 함수들에 대한 온라인 도움말을 완벽히 지원하기 때문에 웬만한 오픈GL프로그램은 레퍼런스북 없이도 프로그래밍이 가능하다. 만약 VC++ CD를 가지고 있거나 예제프로그램을 전부 설치하였다면 API와 MFC를 이용한 여러 개의 오픈GL프로그램의 소스를 직접 구할 수 있다(Infoview에서 /Developer Product/Visual C++/Visual C++ Samples 밑을 찾아보면 된다).


opengl8

 Aux라이브러리를 이용한 오픈GL프로그래밍 맛보기

지금까지 오픈GL의 정의, 역사, 특징, 구성, 설치와 개발환경 등에 대해 살펴보았으니 간단한 응용프로그램을 만들어보아야 할 차례가 된 것 같다. 이제 윈도 95/NT에서 VC++ 5.0으로 오픈GL 프로그램을 만들어보자. 윈도 95/NT에서 오픈GL 프로그램을 만들기 위해서는 wgl함수를 사용해야 한다고 밝힌 바 있다. 그러나 이번에는 wgl함수를 사용하지 않고 단순하며 플랫폼 독립적인 오픈GL프로그램을 작성할 수 있도록 도와주는 Aux라이브러리를 이용해 프로그램을 작성해 보고자 한다. 오픈GL과 VC++ 5.0이 설치되어 있다면 다음 순서대로 해보자.

- 비주얼 C++를 시작하고 새로운 프로젝트를 만든다. 새로운 프로젝트의 이름은 Teapot로 하고 Win 32 Console Application을 선택한다.
- 새로운 텍스트를 열고 소스를 입력해 Teapot.c로 저장한 후 프로젝트에 추가시킨다.
- ALT+F7을 열어 프로젝트 세팅 다이얼로그를 띄우고 Link탭의 Object/Library Module에 opengl32.lib glu32.lib glaux. lib를 추가한다.
- 프로젝트를 컴파일하고 실행한다.

리스트 4처럼 프로그램이 제대로 작성되었다면 주전자의 색이 변하면서 회전하는 애니메이션을 볼 수 있을 것이다. 리스트 4의 오픈 GL프로그램이 만족스럽지 못한 독자도 있겠지만 소스의 길이가 짧은 것을 고려한다면 효율이 아주 높다는 사실만은 인정할 것이다. 만약 오픈GL을 사용하지 않고, GDI로 위와 같은 애니메이션을 구현하는 엔진을 만들려고 했다면 3차원 그래픽 알고리듬에 필수적인 행렬 연산 부분을 만드는 것만으로 이 코드의 길이를 넘어섰을 것이다.

이제 리스트 4 오픈GL코드를 분석해 보자.

리스트 4 : Teapot.c 의 소스코드

//
// 오픈GL과 Aux라이브러리를 이용한 테스트 프로그램
//

#include <windows.h>
#include <gl\gl.h>
#include <gl\glaux.h>

// 윈도를 그리는 함수(WM_PAINT)
void CALLBACK display();
// 윈도 크기를 변경할 때 호출되는 함수(WM_SIZE)
void CALLBACK size(GLsizei cx,GLsizei cy);

void main()
{
// 애니메이션을 위해 더블버퍼링을 사용하고,
// 색상모델로 RGBA를 사용한다.
auxInitDisplayMode(AUX_DOUBLE | AUX_RGBA);

// 윈도의 초기위치와 크기를 지정하고 윈도를 생성한다.
auxInitPosition(100,100,400,300);
auxInitWindow("OpenGL Test");

// 배경을 지울 때 사용할 색을 하얀 색으로 지정한다.
glClearColor(1.0f,1.0f,1.0f,1.0f);

// 윈도 크기 변경을 핸들링하는 함수를 설정한다.
auxReshapeFunc(size);

// Idle Time에 호출되는 함수를 display로 정해
애니메이션이 가능하도록 한다.
auxIdleFunc(display);

// 메인루프
auxMainLoop(display);
}

void CALLBACK display()
{
// 색상변경을 위한 정적 변수
static int i;

// 색상변경을 위하여..
i += 2;
// 윈도를 지운다.
glClear(GL_COLOR_BUFFER_BIT);

// 주전자를 회전시킨다.
glRotatef( 5.0f,1.0f,0.0f,0.0f);
glRotatef( 5.0f,0.0f,1.0f,0.0f);

// 색상을 변경하고 주전자를 그린다.
glColor3b((GLbyte)(i % 256),(GLbyte)((i * 3 + 20)
% 256),(GLbyte)((i * 5 + 19) % 256));
auxWireTeapot(50.0f);

// 처리되지 않은 명령을 모두 처리하도록 한다.
glFlush();

// 더블 버퍼를 전환한다.
auxSwapBuffers();
}
void CALLBACK size(GLsizei cx,GLsizei cy)
{
// 윈도 크기에 맞게 뷰포트를 변경
glViewport(0,0,cx,cy);

// 현재행렬을 단위행렬로 바꾼다(초기화).
glLoadIdentity();

// 적절한 시선을 설정한다.
glOrtho(-100.0f,100.0f,-100.0f,100.0f,100.
0f,-100.0f);
}

메인함수에서 윈도를 띄우는 과정은 Aux라이브러리 부분에서 설명한 것과 같다. auxInitDisplayMode에서 AUX_DOUBLE을 지정한 것은 부드러운 애니메이션을 위해서 더블버퍼링을 사용한다는 의미인데, AUX_SINGLE은 반대로 더블버퍼링을 사용하지 않겠다는 의미이다. AUX_RGBA는 빛의 삼원색인 RGB와 알파값을 사용해 색을 지정하는 컬러모드를 사용하겠다는 옵션이다. 그 밖의 컬러모드로는 AUX_INDEX(Indexed Color방식)가 있다.
glClearColor(1.0f,1.0f, 1.0f,1.0f)는 glClear(GL _COLOR_BUF FER_ BIT)를 이용해서 화면을 지울 때 사용할 배경색을 지정하는 함수이다. 네개의 1.0f는 앞의 셋은 RGB값을 의미하고(흰색), 뒤의 1.0f는 알파값으로 불투명 색이라는것을 의미한다. 중요한 색상의 GLfloat값은 표 4와 같다.

=========================
색상 Red Green Blue
검정 0.0 0.0 0.0
빨강 1.0 0.0 0.0
녹색 0.0 1.0 0.0
노랑 0.0 0.0 1.0
노랑 1.0 1.0 0.0
마젠타 1.0 0.0 1.0
시안 0.0 1.0 1.0
회색 0.5 0.5 0.5
흰색 1.0 1.0 1.0
========================
표 4 : 중요색상의 GLfloat값

auxReshapeFunc(size)와 auxIdleFunc(display)는 윈도 크기가 바뀌는 경우와 프로그램이 처리할 일이 없을 때 수행되는 CALLBACK함수를 등록하는 기능을 한다.

auxMainLoop(display)는 화면을 갱신해야 할 때 사용할 함수를 display로 지정하고 메인루프를 수행하게 하는 함수이다. display는 화면이 다시 그려져야 할 때 호출되는 함수로 윈도 프로그램에서 WM_PAINT를 처리하는 함수와 같은 기능을 한다.

static int i는 색을 변화시키기 위해서 지정된 변수이다.

glClear(GL_COLOR_BUFFER_BIT)는 화면을 지우는 기능을 한다.

glRotatef는 주전자를 회전시키는 기능을 하는 함수인데 이에 대해 이해하려면 오픈GL의 매우 중요한 요소인 변환행렬에 대해 알아야만 한다. 오픈GL로 그린 물체가 윈도에 그려지기 까지는 두번의 변환과정을 거쳐야만 한다. 첫 번째는 그리기 명령들에 지정된 좌표를 오픈GL 내부의 3차원 좌표로 바꾸기 위한 변환이고 두 번째는 3차원 좌표의 점들을 윈도(뷰포트)로 옮기는 변환이다. 이해를 돕기 위해 auxWireTeapot를 이용해 주전자를 그리는 경우를 생각해 보자. auxWireTeapot는 주전자의 크기를 나타내는 인자 하나만을 가지므로 주전자의 위치를 지정할 수 없다는 문제가 생긴다. 그러나 그리기 동작을 수행할때 점들은 한번의 변환을 거쳐 3차원 좌표에 매핑되기 때문에 이 변환을 적당히 조작하면 주전자를 원하는 위치에 가져다 놓을 수 있다. 뿐만 아니라 일단 그려진 주전자를 바라보는 시선도 쉽게 바꿀 수 있는데 이것은 오픈GL 내부의 3차원 좌표를 윈도로 옮기는 두 번째 변환을 조작함으로써 가능하다. 이상의 두 가지 변환은 각각 모델뷰 매트릭스와 프로젝션 매트릭스 라고 하는 변환행렬을 통해 관리된다. 변환행렬도 하나의 상태이므로 초기화를 하기 전까지는 기존의 상태를 유지하게 되는데 glLoadIdentity함수는 변환행렬을 단위행렬곱셈의 항 등원)로 만들어 초기화하는 함수이다. glRotatef명령은 현재의 모델뷰 매트릭스에 회전행렬을 곱하여 모델뷰 매트릭스가 회전의 효과를 갖도록하는 기능을 한다. 따라서 auxWireTeapot를 통해 그려지는 주전자는 모델뷰 변환을 거치면서 실제 3차원 좌표에 기울어진 모양으로 그려지게 된다. 오픈GL은 그리기 명령이 호출되는 즉시 그리기가 수행되는 Immediate모드로 작동하지만 더블버퍼를 바꾸기 전에 glFlush명령을 통해서 혹시라도 수행되지 않았을 명령을 미리 처리되도록 하는 것이 좋다.
glViewport함수는 새롭게 바뀐 윈도 크기에 맞게 뷰포트를 조정하는 기능을 한다.
glLoadIdentity는 ㅈ에서 언급한 바와 같이 변환행렬을 초기화하는 역할을 한다.
glOrtho는 원근감이 없는 시선을 설정하는 함수이다. 이 함수를 호출함으로써 프로젝션 매트릭스가 적절하게 설정된다.

이상으로 간단하게 나마 리스트 4에 대한 분석을 마치려고 한다. 오픈GL이라는 매우 방대한라이브러리에 대한 설명으로는 턱없이 부족한 설명이지만 최소한 자신이 입력한 프로그램이 어떻게 돌아가는지 정도는 알 수 있었을 것이다.


opengl9

 그래픽 관련 용어들

- Alpha Value(알파값) : 색의 투명도를 나타내는 값으로 오픈GL에서는 1.0f가 불투명, 0.0f가 투명을 나타낸다. 예를 들어 알파값이 0.0f인 빨간 색을 하얀 색 배경에 칠하면 하얀 색이 유지되지만, 1.0f인 빨간 색을 칠하면 배경의 하얀 색이 없어지고 빨간 색만 남는다. 알파값이 0.5f인 빨간 색을 칠하면 빨강과 흰색의 중간인 분홍색이 된다.
- Antialiasing (앤티앨리어싱) : 그림의 경계부위에서 울툴불퉁한 부분이 생기는 계단현상을 완화하기 위해 각 화소의 중간색을 경계에 뿌려 부드럽게 만드는 기법
- Blending(블렌딩) : 두개의 색상을 하나의 색상으로 합치는 것. 알파값에 따라서 배경색과 전경색을 합치는 것이 블렌딩의 예이다.
- Double Buffering(더블버퍼링) : 애니메이션의 다음 장면을 화면에 직접 렌더링하게 되면 렌더링의 중간과정이 보여면서 화면이 깜빡거리는 현상이 생긴다. 더블버퍼링이란 이런 문제를 해결하기 위해서 화면에 보이지 않는 버퍼를 설정하고 버퍼에서 렌더링이 끝난 장면을 한번에 화면으로 옮기는 기법을 말한다.
- Indexed Color(인덱스컬러) : 사용할 수 있는 색상 수가 정해져 있는 색상모델. 천연색상은 메모리를 지나치게 많이 사용하기 때문에 많이 쓰이는 일부색상에만 번호를 붙여(indexed)사용하는 것을 말한다.
- Motion Blur(모션블러) : 실감있는 애니메이션을 보이도록 하기 위해 동작의 잔상이 남도록 하는 기법.
- Polygon(폴리곤) : 세개 이상의 선분을 연결하여 만든 도형(다각형)이며 3차원 그래픽에서 물체를 생성하는 기본이 된다.
- Rendering(렌더링) : 디지털 데이터로 저장된 이미지 정보를 화면 등에 출력하기 위한 비트맵 이미지로 바꾸는 과정으로 특히 3차원 그래픽 프로그램에서 미리 지정된 색상, 재질, 그림자, 움직임 등을 이용해 최종 이미지를 만드는 것을 말한다.
- Rendering Context(렌더링 컨텍스트) : 윈도용 오픈GL에서 화면에 렌더링을 하기 위해 필요한 정보를 모아놓은 자료구조이다. 윈도 프로그램이 윈도에 그림을 그리기 위해서 디바이스 컨텍스트를 이용해야 하듯 오픈GL로 렌더링을 하기 위해서는 RC를 이용해야 한다.
- RGB Color(알지비 컬러) : 빛의 삼원색인 빨강(R), 녹색(G), 파랑(B)의 값을 이용해 색상을 지정하는 방법
- Texture Mapping(텍스처 매핑) : 3차원 면의 표면에 이미지를 입히는 것.
- Vertex(버텍스) : 정점, 꼭지점
- Wireframe Modeling(와이어프레임 모델링)) : 물체의 색상이나 질감을 표현하지 않고, 철사모양의 외곽선만으로 물체를 표현하는 방법
- 지오메트릭 연산 : 화면에 그림을 그리기 위해서 계산하는 작업. 모델 좌표계에서 월드 좌표계로 변환, 월드 좌표계에서 카메라 좌표계로 변환, 카메라 좌표계에서 화면 좌표계(2D)로 변환(Projection)하는 작업 등을 말한다.
- 키프레임(Keyframe)과 보간(Interpolation) : 애니메이션에 사용되는 방법 중의 하나이다. 애니메이션으로 사용할 모션데이터를 각각의 프레임마다 만들어두는 것이 아니라 두드러지는 몇개의 모션(Keyframe)만을 정해놓고 그 중간 프레임(Inbetween)을 전·후의 키프레임을 이용하여 보간계산(Interpolate)하는 것을 말한다.
- color index mode : 팔레트 모드와 비슷한 의미이다. 몇개(주로 256개)의 색상만을 대표적으로 사용해서 그림을 구성하는 경우를 말한다.
- display list : 오픈GL에서 복수 개의 명령들을 실행할 때 오버헤드를 줄이기 위해서 하나의 display list에 저장해 놓고 다음부터는 복수 개의 명령대신 list를 불러서 실행하는 방법.
- hidden surface removal : 은면제거. 화면에 가려져서 보이지 않아야 할 부분을 골라내는 방법을 말한다. 은면제거의 방법에는 그릴 primitive들을 뒤에서부터 차례로 그려나가서 덮어씌우는 Painter's 알고리듬 방법과, 화면의 각 픽셀마다 깊이 정보를 주고나서 점을 하나씩 찍을 때마다 깊이값을 비교해 찍을지, 말지 여부를 결정하는 Z-Buffer 방법이 있다. 대부분의 3차원 가속기는 구조상 간단하고 결과물이 정확한 Z-Buffer 방법을 사용한다.
- alpha blending : 반투명의 오브직트를 표현하기 위해서 투명색 정보를 더하는 것을 말한다.
- Atmospheric effect : 최종 결과물에 실제감을 더하기 위해 가상효과에 관련된 효과를 더하는 것을 말한다. 여기에는 fog나 haze같이 거리에 비례(또는 거리의 로그값에 비례)해서 점을 특정한(안개의) 색상값과 혼합해 뿌옇게 하는 안개효과를 내는 방법과 depth cueing과 같이 오브직트 자체의 밝기를 거리에 반비례해서 줄여주는 방법이 있다.
- bilinear filtering : 텍스처 매핑을 할 때 그림이 커지는 경우, 점들이 두드러지는 현상을 막기 위해 중간의 픽셀들을 상하좌우에 인접한 텍스처 픽셀값과 거리를 참조해서 평균값을 내는 방법이다. 결과적으로는 물체가 시점에 가까워져서 그림이 커지는 경우 bilinear filtering 에 의해서 약간 뿌옇게 변하기 때문에 카메라의 초점보다 가까워지는 원근감 효과를 준다.
- mipmaping : bilinear filtering이 가까이 있는 물체의 표현에 도움을 준다면 mipmapping은 멀리 있는 물체를 표현할 때 픽셀들이 튀는 것을 막아준다. mipmapping은 일정한 단계에 따라 보조적인 텍스처맵을 만들어두었다가 오브직트가 어느 정도 멀어지면 원래 크기의 텍스처맵에서 색값을 결정하지 않고 축소된 텍스처맵에서 색값을 결정한다.
- Polynomial Evaluator와 NURBS : NURBS는 베지에르 곡선으로 구성되는 곡면을 말한다. 이 곡면을 계산하기 위해서 필요한 점들을 만드는데 사용되는 것이 Evaluator이다. Evaluator의 계산에는 주로 다항식(polunomial)의 대수적 계산이 필요하기 때문에 Polynomial Evaluator라고 한다.
- accumulation buffer : 특별한 목적, 예를 들면 모션 블러(움직이는 오브직트의 잔상을 남게하는 효과)나 기타 일련의 이미지들에 대한 연산에 사용된다 (1초에 60 프레임짜리 동화상을 50 프레임짜리로 부드럽게 바꾸는 등).
- stencil plane : 화면에 픽셀이 그려질 때마다 갱신되는 마스킹 정보. 다음과 같은 용도를 위해 쓸 수 있다(다이렉트3D에서는 지원 안함).
1. 폴리곤의 선명한 모서리를 그리는 용도
2. 화면의 깊이 복잡도를 판단하기 위한 경우
3. 복잡한 화면에서의 가려진 물체들을 빼내기(culling)
4. 이미지들 사이의 조합
- picking : 화면에 표현된 오브직트나 폴리곤을 골라내는 작업을 말한다. 예를 들어서 화면에 나타난 여러 개의 오브직트를 마우스를 이용해서 골라내는 경우, 마우스의 2차원 좌표로부터 역변환(카메라 → 월드 → 모델)을 통해서 본래의 오브직트의 좌표나 폴리곤의 좌표를 추적하게 된다.
- perspective-correction : 화면에 텍스처된 삼각형을 그릴 때는 x, y 좌표와 각 점들의 텍스처값만 가지고서는 정확하게 그릴 수가 없고 실제로는 z값(또는 1/z값 즉, z의 역수)을 참조해야만 정확한 렌더링이 가능하다. 대신 z값을 고려하는 계산을 하기 위해서는 훨씬 계산량이 늘어나게 되는데 대부분의 3차원 가속기는 그러한 계산(perspective-corrected texture mapping)을 자동으로 수행한다.
- triple-buffering : 백 버퍼가 2개 이상 있을 때 쓸 수 있는 방법이다. 즉 화면 버퍼, 백버퍼 1, 백버퍼 2를 사용하게 되는데, 이것은 그래픽 가속기가 수직투사(V-sync)를 기다리는 동안에도 다음의 보조버퍼를 이용하여 계속 CPU가 그리는 작업을 할 수 있도록 하는 것이다.
- BSP : Binary Space Partitioning 알고리듬. DOOM이나 QUAKE같은 게임에서 배경을 그릴 때 효율적으로 그릴 면들을 골라내기 위해서 이진 트리를 만들고 공간을 분할하는 방법으로 트리의 노드를 점진적으로 추가하는 방법이다. 이 방법을 사용해서 그릴 부분을 최소화 하고, 그릴 순서를 자동으로 결정할 수 있다.


opengl10

 3D API의 쌍벽, 오픈GL vs 다이렉트X

예전에 3D를 구현하기 위해서는 프로그래머가 직접 관련된 기능들을 프로그래밍해야 했다. 그러나 오픈GL과 다이렉트X, 그리고 3D 프로그램을 제작하기 위한 API가 다수 등장하면서 개발자들은 효과적으로 개발에 임할 수 있게 되었다. 2부에서는 3차원으로 향하는 오픈GL과 다이렉트X를 시기별로 비교 분석하고 업체들의 활동을 주시해 본다.

김학규 : 서강대학교 수학과
하이텔 ID : neolith

지난 1년은 3차원 게임 프로그래머들에게는 정말로 혼돈과 기회로 가득찬 시기였던 것 같다. 주목할만한 현상들을 두 가지로 요략해보면 우선, 일반유저들이 구매할 수 있을 정도로 저렴하면서 상당한(오락실 게임기에 준하는) 성능을 보유한 수많은 3D 가속기들이 등장하였다는 것이고, 두 번째는 3D 프로그램을 제작하기 위한 API 가 다수 등장하였다는 것이다. 이들 API 중에는 수백에서 수만 달러의 라이선스 비용을 지불해야만 하는 라이브러리들이 있는가하면 정책적으로 대가없이 제공되고 있는 라이브러리들도 있다. 그 중에서도 역시 오픈GL과 다이렉트3D가 대표적이다.

난무하는 3D가속기 시장의 새지표 3D API
예전까지는 프로그램에서 3D를 구현하기 위해서는 프로그래머가 직접 관련된 기능들을 프로그래밍해야 했다. 행렬을 이용한 지오메트릭 연산부터 실제 화면에 그림을 그리는 렌더링 부분까지 혼자서 만들어야 했다. 그래서 실력좋은 프로그래머들이 만든 3차원 라이브러리를 종종 상용으로 내놓기도 했다. 이러한 추세를 바꾸게된 결정적인 계기는 3차원 가속보드의 등장이었다. 일반적으로 가속기를 통한 결과물은 모든 작업을 CPU가 하는 경우보다 훨씬 빠르면서도 고화질의 결과물을 보장해 주었기 때문에 각종 가속기들을 지원하게 된 것이다. 라이브러리라는 개념에서 API라는 개념으로 점점 바뀌어간 이유도 비슷하다. 라이브러리는 모든 일을 자신이 실행한다 했을 때 API는 어떻게 필요한 기능들을 수행할 수 있는가를 구체적으로 정리해 놓는(구현한) 것이다. 실제로 가속기들은 화면에 그림(삼각형)을 그리는 일을 자신이 하기 때문에 프로그램에서는 어떻게 가속기에 ‘그려라’라는 명령을 내려야할지 형식을 정하는 것이 제일 중요한 일이다. 3차원 가속보드가 다양해지자 프로그래머들은 프로그램을 개발할 때 수많은 가속보드를 지원해야 한다는 고민에 빠지게 되었다. 가속기들은 일정한 규격이 없고 종류가 다양해 모든 가속기를 지원하는 프로그램을 개발하기는 불가능하다. 더군다나 3Dfx Interactive를 제외한 대부분의 회사들은 자사의 가속기를 제어하기 위한 라이브러리를 대중에 공개하지 않았다.
이러한 문제점을 해결하기 위해서 범용 3D API가 등장하였다. 3D API들은 3D 가속기의 유무에 관계없이 소프트웨어적으로 수행 가능하게 해주는 부분과 각각의 가속기에 대한 내용을 알지 못해도 범용적으로 프로그램을 작성할 수 있도록 하는 기능을 제공한다. 거기에 덧붙여서 더 상위 부분의 일들이나 보조적인 일들, 예를 들면 각종 지오메트리 연산이나 화면에 나타날 오브직트들의 데이터베이스 관리, 혹은 애니메이션 등의 기능을 제공한다.
초창기에 유명했던 3D API는 RenderWare 등을 들 수 있겠다. 하지만 이러한 3D API들은 비싼 라이선스 비용을 지불해야 했고 곧 다이렉트3D 등의 기세에 밀려 요즘에는 많이 사용되지 않고 있다. 다이렉트3D는 Render Morphics라는 API를 MS에서 사들여 COM 모델에 맞추고 개조하여 만든 API이다. 한편 오픈GL은 좀더 옛날부터 있었던 라이브러리이지만 게임이나 VRML같은 일반 사용자를 위한 용도라기보다는 고급기종의 워크스테이션에서 캐드/캠 등의 값비싼 일들을 하기 위해 존재한다는 인식이 짙었었다. 범용 3D API들의 등장으로 인하여 많은 개발자들은 큰 수고를 덜긴 하였지만 이제는 어떤 API들을 선택할 지가 고민스러운 문제로 남게 되었다. 여기서는 오픈GL과 다이렉트3D를 비교하는 것을 주 내용으로 하고자 한다. 그 이유는 두 가지 API 모두 일반 개발자들에게 공개되어 있을 뿐 아니라 둘다 현재 가장 영향력있는 API로 남아있기 때문이다. 지금까지 많은 이들이 이들 API의 선택에 대해서 심각하게 고려했고, 어느 한쪽 혹은 둘다를 지원해야겠다고 결정한 경우도 많다. 일단 지금까지의 상황을 시기별로 3부분으로 나누어보았다. 참고로 필자는 게임 개발자이기 때문에 이러한 3D API를 주로 게임 개발의 측면에서 살펴보았다. 하지만 다른 부분에도 비슷하게 적용되는 경우가 많기 때문에 게임 이외의 다른 사람들에게도 이 정보가 유용하리라 믿는다.

시기별로 본 다이렉트3D와 오픈GL

다이렉트3D 의 등장
다이렉트X는 개발 당시부터 커다란 관심을 일으켰고 그 중 가장 커다란 관심사는 역시 3D에 관련된 부분이었다. 그 당시를 회고해 보면 최초의 일반유저용 가속보드로 등장한 nvidia 사의 Edge3D의 발표와 함께 버츄어파이터 리믹스의 등장으로 사람들은 커다란 기대를 가졌었다. 물론 이러한 기대에는 다이렉트X가 MS의 홈페이지를 통해서 무료로 배포된다는 점이 가장 크게 작용되었다.
3D 관련 기술을 갖지 못하고 있었던 개발자나 회사들은 다이렉트X, 특히 다이렉트3D를 통해서 커다란 어려움없이 3D 프로그램을 작성할 수 있으리라는 기대를 갖게 된 것이다.
처음에 VFPC를 본 사람들은 고해상도에서도 쓸만한 프레임레이트(framerate)를 보고 상당히 긍정적인 반응을 보였지만 얼마 후에 그러한 평가는 잘못된 것이었음이 밝혀졌다. VFPC는 다이렉트3D를 쓰지 않고 만들어진 것이기 때문이었다. 게다가 Edge3D 버전의 VFPC와 일반 버전의 VFPC는 별다른 성능 차이가 없었다. 또한 Edge3D는 윈도환경의 표준으로 자리잡으리라는 초기의 기대를 저버리고 소리소문없이 사람들의 기억밖으로 사라져버리고 말았다.그럼에도 불구하고 다이렉트3D는 MS의 적극적인 홍보와 많은 다른 하드웨어 개발사들의 지원 약속에 힘입어 윈도 환경에서 3차원 프로그래밍의 유일한 방법으로 알려지게 되었다. 많은 사람들은 다이렉트3D와 씨름하기 시작하였다(후에 밝혀지지만 초기의 다이렉트3D Imm ediate에 대한 대부분의 투자는 헛된 것으로 판명되었다. 이유는 다이렉트X 5에 가면서 기존의 방식들을 완전히 대체하는 편리하고 새로운 인터페이스가 추가되었기 때문이다).
다이렉트3D는 두 가지의 부분으로 구성되어 있는데 하부를 담당하는 것은 다이렉트3D Immediate Mode라는 것이며 상부는 Retained Mode이다. 간단히 말해서 Imm ediate Mode는 화면에 그림을 그리는 부분만으로 이루어져 있으며 그 전에 해야할 일들(버텍스들의 연산이나 모델 데이터의 관리, 화면 데이터베이스의 관리 등의 부분)은 Retained Mode가 담당하고 있다. Immediate Mode는 이미 기존의 3D 엔진을 구축한 상태에서 자신의 프로그램을 다이렉트X용으로 컨버전하는 용도를 위해 권장되었고 Retained Mode는 처음 개발하는 사람들이 쉽게 결과물을 얻을 수 있도록 권장되었다. Retained Mode의 기능들을 요약해 보면 다음과 같다.

계층적 구조를 이용한 텍스처, 컬러, 재질들의 상속(Inheritance of textures, colors and materials through hierarchies)
바닥에 비춰진 그림자 처리(Projected Shadows)
복수 개의 오브직트 표시, 예를 들면 나무 모델링 데이터 하나를 이용해서 100그루의 나무가 있는 숲을 표현하는 경우(Multiple Instancing of objects and hierarchies)
키 프레임의 각 동작의 곡선 보간을 이용한 실시간 애니메이션(Complex-spline interpolated motion and Real-time animation keyframer)
자체 포맷(XOF)과 3DS->XOF 컨버터

===============================================================
용어 설명
---------------------------------------------------------------
Retained는 그려야할 데이터들을 API가 미리 갖고 있음을
Retained와 말한다. 그에 비하여 Immediate는 중간과 정 없이 설정된
Immediate 3D 데이터를 그대로 화면에 표시하게 되므로 그려야할 리스트
들은 유저의 프로그램이 가지고 있어야 한다.
---------------------------------------------------------------
빛 효과가 들어간 텍스처 매핑된 그림을 표시할 때
계산 방식의 차이이다. Ramp 모드는 속도를 증가
RGB Driver와 하기 위해서 빛의 RGB성분 중 B성분만을 사용하고
Ramp Driver RGB 모드는 3가지 성분을 모두 사용한다. RGB 모드는 정확
하고 보기좋은 결과물을 보여주지만 속도는 Ramp 모드보다
훨씬 느리다.
---------------------------------------------------------------
다이렉트3D가 하는 일은(일반적인 3D API가 해야 하는 일은)
두 가지이다. 첫 번째는 각각의 하드웨어들을 제어하기 위한
공통적인 규격과 추상화를 하는 것이다. 두 번째는 하드웨어가
HAL과 HEL 없는 경우 소프트웨어로 대신할 수 있는 길을 마련하는 것이
다. HAL은 Hardware Abstraction Layer의 약자로서 전자를
담당한다. HEL은 Hardware Emulation Layer의 약자로서 소
프트웨어적인 렌더링을 담당한다.
===============================================================
표 1 : 다이렉트 3D 용어

GL-Quake의 등장과 그 이후
지금까지 등장한 게임 중 가장 큰 유저들의 관심을 모았던 게임은 역시 Id 사의 Quake였다. Quake는 개발 당시부터 가속기들과 관련이 깊었다. Quake는 처음에 Rendition 사의 Verite 칩으로 등장하였고 그 후에는 다이렉트3D용으로 등장할 예정이었지만 다이렉트3D용 Quake는 발표되지 않았고 대신 난데없이 GL-Quake라는 것이 등장하였다. 갑자기 웬 오픈GL이란 말인가? 오픈GL은 비싼 기계에서나 쓰는 API라는 인식이 강했었고 MS의 표현을 빌자면 “오픈GL은 CAD/CAM 분야 등에서 활용되는 하이앤드용 API이므로 게임이나 VRML 등의 속도를 요구하는 분야에서는 다이렉트3D가 적합하다”라고 했었다. 실제로 윈도 NT에는 MS가 구현한 오픈GL이 들어있다. 하지만 GL-Quake가 보여준 결과물은 상당히 놀랄만한 것이었다. 비록 3Dfx의 Voodoo칩 또는 기타 오픈GL을 지원하는 보드가 장착된 상태에서만 제대로 실행할 수 있었지만 GL-Quake가 보여준 속도나 각종 이펙트들은 이제까지의 오픈GL에 대한 선입견을 깨기에 충분한 것이었다.
그에 뒤따라 GL-Quake의 엔진 프로그래밍을 담당했던 존 카막이 기고한 글에서 다이렉트3D에 대한 혹평과 SGI가 자사의 웹페이지에 게시한 ‘Direct3D Analysis - An OpenGL perspective’라는(제목은 점잖지만 내용을 보면 신랄하기 그지없는) 글을 통해서 다이렉트3D 의 쓸모없음을 공격했다. 다이렉트3D 프로그래밍을 하면서 몇달동안 골머리를 썩히며 고생한 프로그래머들은 하나둘씩 뉴스그룹에 불만을 털어놓기 시작하였다. 관련 뉴스그룹들은 rec.games.programmer와 comp.lang.api. opengl 등이 대표적이다. 다이렉트3D와 오픈gl의 활용성에 대한 분석을 존카마크(John Carmack)의 글과 SGI가 게시한 글, 그리고 필자의 견해를 종합하여 3가지 분야로 나누어 정리해보았다.

오픈GL과 다이렉트3D가 발표한 API의 기능을 비교
오픈GL
- 그래픽 기능들 - 지오메트리 기본요소들(점, 선, 다각형)
- 라스타 기본요소들(비트맵, 직사각형)
- RGBA 컬러모드 또는 컬러 인덱스모드
- Display list를 이용한 작업 또는 직접모드를 이용한 작업
- 모델좌표쭭화면좌표로의 변환 - 깊이 버퍼를 이용한 은면제거
- 반투명성을 구현하기 위한 알파값 혼합 - 앤티앨리어싱
- 텍스처 매핑 - 기상효과(안개, 연기)
- 곡면 구현을 위한 다항식의 값 구하기
- 점단위 조작(저장, 변환, 매핑, 확대) - 누적형 버퍼
- 스텐실 평면 - 피드백, 선택과 폴리곤 고르기

다이렉트3D
- 보유모드와 직접모드에서의 깊이버퍼 사용유무 선택가능
- 효율적인 메모리 활용을 위한, 필요할 때 동적으로 로딩되는 디바이스 드라
이버
- 플랫, 구로 셰이딩 모델 - 점, 선과 채워넣기 모드
- 다중의 이동 가능한 색상이 있는 광원
- 스포트 라이트, 점형, 배경형, 직선형 광원 - 하일라이팅
- RAMP와 RGB 컬러모델(표1 참조) - 8, 16, 24, 32 비트의 컬러모드
- 디더링 - 점단위 컬러 - 다중 뷰포트, 디바이스, 카메라 지원
- 재질 지원 - 텍스처 매핑 - Bilinear, trilinear, mipmap 지원
- 원근보정된 텍스처 매핑
- 텍스처에서의 알파 맵을 포함한 (반)투명값 지원,
- 직교 투사 또는 원근 투사모드 지원
- 배경 반사 매핑과 모션 비디오 매핑 지원 - 실시간 오브직트 변형 기능
- 일반적인 모델쭭화면좌표 변환기능
- 깊이값이 포함된 애니메이션 가능한 배경
- 유저 조작을 위한 완전한 오브직트 선택기능 지원
- 기상효과와 같이 쓰일 수 있는 Depthcueing(용어정리 참조)
- 충돌체킹을 위한 후킹(일반적인 시스템의 처리루틴에 사용자 프로그램의 함
수를 호출하도록 하는 기능) 지원

기능성(Functionality)과 드라이버(Driver Coverage)
전반적으로 보았을 때 두 가지 API가 제공하는 기능성들은 대동소이하다. 일단 각각의 API가 제공한다고 발표한 기능들을 비교해 보자. 여기서 주목해야 할 사실은 다이렉트3D의 경우에는 모든 기능이 구현되지 않아도 드라이버를 만들 수 있다는 점이고 오픈GL은 그렇지 않다는 것이다. 오픈GL의 경우에는 Conformance Test라는 것이 있어서 어떤 소프트웨어적인 Implementation을 만들거나 혹은 새로운 하드웨어의 Implementation을 만든 경우 conformance test를 거쳐서 인증을 받도록 되어 있다. 이것은 모든 오픈GL 드라이버가 일정수준 이상의 지원을 하기 위한 정책의 일환이다. 반면에 다이렉트3D는 스펙에는 나타나 있지만 어느 드라이버도 구현하지 않은 기능들도 있다. 또 어떤 기능들은 소프트웨어 측면에서는 지원이 안되고 하드웨어적으로만 된다던가 혹은 하드웨어 중에서도 특정 회사의 것만 지원이 된다던가 하는 편차가 심하다. 이러한 문제는 개발자의 입장에서 보면 프로그램이 실행되기 전에 현재의 드라이버에서 어떤 기능이 지원 가능한지를 확인하는 GetCaps 함수를 통해 알아보아야만 한다. 한 가지 경우라도 만족이 되지 않으면 프로그램은 언제 멈춰버릴지 알 수가 없고 결국 가능한 모든 경우를 확인해야 하는 불편이 있다.
또한 유저의 입장에서도 문제가 생기곤 하는데 예전에 필자가 겪은 경우 중 하나는 필자가 Stealth 3D 2000 (ViRGE 칩을 사용한)을 구매하고 나서 Monster truck madness를 실행하려고 할 때에 HAL을 선택하자 어떤 기능이 드라이버에 없다며 실행이 안되는 경우를 당한 적이 있다. 어떤 드라이버의 경우 (특히 구식의 드라이버) 에는 하드웨어가 지원하는 기능이 HEL(소프트웨어 에뮬레이션 드라이버)보다 적은 경우가 있는데, 이런 경우에는 10가지 기능 중 단 1개의 기능이 없어서 가속 기능 전체를 사용할 수 없게 되는 경우이다. 결국 이들 문제 때문에 프로그램을 만들 때 개발자들이 몸을 움츠리게 하는 결과를 초래하는 것은 다이렉트3D가 가진 문제 중의 문제이다. 오픈GL은 비교적 안정적인 드라이버들을 유지하고 있지만 이쪽에도 여전히 문제점들이 산재한다. 첫 번째는 아직까지 대부분의 가속기들이 제대로된 오픈GL 드라이버들을 갖추지 못하고 있다는 점이다. 저가형 비디오카드 중에는 Permedia 칩을 탑재한 보드 이외에는 사실 거의 지원을 못한다고 보아야 한다. 물론 GL-quake에서 사용된 3Dfx용 드라이버와 3Dfx에서 직접 발표한 3Dfxgl 드라이버가 있긴 하지만 이것은 conformance test를 거치지 않은 드라이버이며 실제 오픈gl의 기능 중 기본적인 부분들밖에 구현하고 있지 못하다. 참고로 3dfxgl의 기능구현 유·무에 대한 자세한 자료는 다음 홈페이지에서 얻을 수 있다.

http://www.cs.unc.edu/~martin/3dfx.html

한편 다이렉트3D의 경우에는 거의 모든 저가형 가속기 보드가 다이렉트3D를 지원하지만 완벽하게 지원하는 드라이버는 몇개되지 않는다. 이러한 문제점의 근본적인 이유는 두 가지 API의 태생적 차이로부터 들 수 있다. 첫째로 오픈GL이 다이렉트3D보다 먼저 개발되었고 많은 기능들을 축적해 왔기 때문에 웬만한 노하우를 누적한 개발사가 아니면 Conformance Test를 통과할 수 있는 드라이버를 만드는 것이 매우 어렵다는 점이고 반면에 다이렉트3D는 상대적으로 늦게 시장에 등장하여 단기간에 많은 드라이버를 확보하려는 MS 사의 정책에 따라 그야말로 ‘무시험 서류전형’식으로 드라이버를 만들게 되었기 때문이라고 본다.
한 가지 더 언급해야 할 것이 있다. 오픈GL의 경우에는 기본적인 기능 이외에 추가되는 기능들은 EXTension으로 분류하여 따로 관리한다. 오픈GL의 경우 구조 연구 위원회(ARB : Architecture Review Board)가 구성되어 있어서 여러 가지 검증과 연구를 거친 뒤에 버전업을 하기 때문에 상대적으로 버전업 속도가 느리다고 할 수 있다. 이럴 때 어떤 특정한 임플리멘테이션에서 새로운 기능을 추가하려고 할 때 Extension으로 분류해서 기능을 추가하게 되어 있다. GL-quake에 관련된 implemen tation에서는 팔레트 관련 부분이 extension으로 분류되어 추가된 부분이 있고 얼마 전에 발표된 ‘OpenGL for windows'에서도 최적화를 위해 몇 가지 부분들이 exten sion으로 분류되어 추가되었는데 이 부분에 대해서는 뒷부분에서 언급하겠다.
이러한 extension은 위에서 말한 다이렉트3D가 지녔던 문제들과 유사한 위험성을 내포하고 있다. extension들이 점차 많아지게 되고 최종 프로그램들이 extension에 의존하는 비중들이 커지게 되면 결국 호환성의 결여로 이어지게 되는 것이다. 때문에 이 분야에 대해서는 아직도 논란의 여지가 많으며 다이렉트3D와 오픈GL 중 어느 한쪽이 확실히 유리하다고 말하기 힘들게 된다(이부분에 대해 뉴스그룹에서도 뜨거운 설전이 오간 바 있다).

효율 (Performance)
아직까지 다이렉트3D IM과 오픈GL 사이의 속도 비교를 소프트웨어와 하드웨어의 경우에서 벤치마킹된 결과물은 찾아볼 수 없었지만, 존카마크는 두개의 성능차이는 10% 이내에 불과할 것이라고 잠정결론을 내렸었다. 그 이유는 3D 가속기가 실행할 때 차지하는 시간의 비중이 늘어났기 때문이라고 생각할 수 있기 때문이다. 하지만 SGI측의 주장에 의하면 다음과 같은 이유 때문에 오픈GL이 다이렉트3D보다 빠르게 실행될 것이라고 주장하였다. 이것은 주로 EB(Execute Buffer)와 관련된 문제들이다. 이를 살펴보기 위해서 먼저 EB에 대해 간단히 알아보자. 게임 프로그램의 예를 들면 먼저 입력장치(키보드나 조이스틱)들을 검사해서 뷰포트가 어떻게 변화할 것인지, 캐릭터들이 어떻게 이동할지를 결정한 후 그것에 관련된 변환 등을 수행하여 렌더링이 되도록 보내는 것이 일반적인 한 화면을 그리기 위해 준비해야 할 과정이다. EB의 경우에는 먼저 그릴 내용들을 모두 결정해서 버퍼에 넣어놓고 한꺼번에 버퍼의 내용을 디바이스에 보내 디바이스가 그 내용을 해석하여 하나씩 그리도록 되어있다. 그릴 내용을 결정하는 데에는 빛의 효과에 따른 각 버텍스의 RGB값이라던가 애니메이션에서 나온 회전 이동 등의 변환에 따른 버텍스의 XYZ값 등을 들 수 있을 것이다. 이러한 내용이 소프트웨어적으로 처리될 때는 그다지 문제가 되지 않는다. 그 이유는 순서야 어떻든 결국 CPU를 거쳐서 처리될 것이기 때문이다. 하지만 3차원 가속기를 이용해서 실행하는 경우에는 문제가 달라진다.
가속기같은 외부장치와 효율적으로 연동되기 위해서는 최대한 CPU와 가속기가 동시에 일을 할 수 있는 상황이 되어야 한다. EB를 이용한 구조의 경우에는 먼저 그릴 내용을 모두 다 준비할 동안 가속기는 기다리고 있어야 하고 버퍼의 내용을 가속기에 넘긴 이후에는 CPU와 가속기가 다 그릴 때까지 놀고 있어야 한다. 이를 해결하기 위해서 트리플 버퍼링같은 방법을 쓰기도 하지만 이것은 별도의 메모리를 더 요구하게 된다. 이상적인 방법은 그릴 내용을 모두 준비한 다음에 버퍼를 통해서 넘기는 것이 아니라 그릴 내용이 생길 때마다 즉시 그리는 것이다. 그릴 것이 여러 개 있다고 하면 1개를 그리기 위해 필요한 계산을 하고 나서 가속기에 넘겨준 후 응답을 기다리지 않고 CPU는 바로 다음 두 번째 그리기를 위한 작업에 들어가는 것이다.
다음 두 번째 그릴 내용을 가속기에 넘겨야 할 때 만약 가속기가 준비되었으면 곧바로 찍을 수 있고 그렇지 않다면 그때부터 기다리는 것이다. 간단하게 그림으로 표현하면 다음과 같다.

만약 그림을 그리기 위해 CPU가 준비하는 시간이 1블럭이고 가속기가 그림을 그리는데 필요한 시간이 2블럭이라고 하면

1) 10개의 그림을 한꺼번에 다 준비하고 그리는 경우
CCCCCCCCCC
GGGGGGGGGGGGGGGGGGGG
2) 10개의 그림을 한개씩 준비하고 그리는 경우
C C C C C C C C C C
GGGGGGGGGGGGGGGGGGGG

위의 경우를 보면 결론적으로 2)의 경우가 시간을 절약할 수 있음을 나타낸다. 물론 위의 경우가 보편적인 경우라고 볼 수는 없지만 대체로 한번에 많은 양의 데이터를 준비하여 그림을 그리는 것이 비효율적이라는 것을 쉽게 짐작할 수 있을 것이다.
그렇다면 EB를 잘게 쪼개 조금씩 버퍼를 만들어서 보내면 어떨까? 하지만 EB를 준비하기 위해서는 훨씬 큰 오버헤드가 더 존재한다. 더구나 EB는 비디오 메모리에 있을 수 있기 때문에 따로 LOCK을 해주어야만 한다. 마지막으로 EB는 지금까지의 드라이버 시스템 메모리에 존재하는 경우가 많다. 이 경우에는 EB의 크기에 대해 별로 신경을 쓰지 않아도 되겠지만 EB를 처리하는 부분이 내장된 가속기의 경우에는 따로 EB 쪽에 메모리를 할당해야만 한다. 문제는 EB의 크기를 얼마정도로 잡아야 할지가 미지수라는 것이다. 간단한 게임들을 처리할 때와 복잡한 공학용 모델을 표현할 때와의 EB 크기 차이는 상당히 다를 것이다. 이것은 부적절한 디자인이라고 밖에는 생각할 수가 없다.

EB(Execute Buffer)--------------
다이렉트3D IM에서 그림 그리는 명령을 내리기 위한 주된 수단이다. 이것은 버퍼 안에 실행할 기능의 코드명(Operation Code)과 그에 따라 필요한 인자값(RGB색상 성분들 또는 버텍스들의 XYZ 성분들)을 넣어서 보내는 방식이다. 이러한 방식을 쓰기로 결정한 이유는 앞으로 만들어질 드라이버들은 이러한 버퍼를 해석해서 실제 실행하는 내용까지 하드웨어적으로 제어될 것이라는 예상
때문인 것 같다(마치 자바가상기계처럼).

사용 편의 ( Ease of use )
다이렉트3D의 EB는 위에서 제기한 효율면에서의 문제점과 더불어 프로그래밍하기에도 불편한 구조를 가지고 있다. 더군다나 GetCaps를 통해서 지원되는 기능들을 검사해야 한다는 점, 불편하고 번거로운, COM 모델 등은 크게 유용하지 않다.
오픈GL용 프로그램은 1페이지 정도에 간단하게 표현할 수 있는 반면 다이렉트 3D의 경우에는 간단한 것이라고 해도 몇백 줄이 넘어간다. 오픈GL에서 1라인으로 처리할 수 있는 문장들을 다이렉트3D에서 똑같이 수행하기 위해서는 거의 반페이지 정도의 코드가 필요하다. 대부분의 COM 관련 함수들이나 인터페이스 이름들은 희한하게 길고 복잡하게 이름이 붙어져 있다.
이러한 구조들을 채택한 주된 이유는 차후의 확장성에 대비하고자 하는 의도였겠지만 결과적으로 사용하기에는 불편함을 가져왔다.
다이렉트3D IM용 소스코드를 본 적이 없는 사람이나 짜본 적이 없는 사람은 이 말이 감이 잡히지 않을 것이므로 소스코드를 간단히 비교해 보자.

1. 셰이딩 모델을 스무스셰이딩으로 바꾸는 경우

#define STATE_DATA(type, arg, ptr) \
((LPD3DSTATE) ptr)->destRenderStateType =
(D3DRENDERSTATETYPE) type;\
((LPD3DSTATE) ptr)->dwArg[0] = arg; \
ptr = (void *) (((LPD3DSTATE) ptr) +1)

라고 define되어 있다고 가정하면

STATE_DATA(D3DRENDERSTATE_SHADEMODE,
D3DSHADE_GOURAUD, lpBuffer);
..........

오픈GL의 경우

glShadeModel(GL_SMOOTH);

이라고 쓰는 것만으로도 간단히 처리할 수 있게 되어 있다.

다이렉트3D로 코딩하는 예------------------------------------------
인자에 쓰일 구조체를 할당한다.
0으로 구조체를 채워넣는다(안 채워도 될 경우가 있지만 대부분 안전함을 위해서 채운다).
구조체의 크기를 dwSize멤버에 저장한다 실제 구조체에 넣을 값을 저장한다
COM 루틴을 부른다(C++를 쓰지 않는다면 vtbl을 참조해야 한다).
결과값을 본다
---------------------------------------------------------------

2. 점마다 색값이 다른 큐브를 그리는 경우(미리 material이 정의되어 있다고 가정한다)

다이렉트3D
LPDIRECT3DEXECUTEBUFFER lpD3DExBuf;
D3DEXECUTEBUFFERDESC debDesc;
D3DEXECUTEDATA d3dExData;
int NumVertices = 8;
int NumTri = 12;

size = sizeof(D3DLVERTEX) * NumVertices;
size += sizeof(D3DSTATUS) * 1;
size += sizeof(D3DPROCESSVERTICES) * 6;
size += sizeof(D3DINSTRUCTION) * 15;
size += sizeof(D3DSTATE) * 6;
size += sizeof(D3DTRIANGLE) * NumTri;
memset(&debDesc, 0, sizeof(D3DEXECUTEBUFFERDESC));
debDesc.dwSize = sizeof(D3DEXECUTEBUFFERDESC);
debDesc.dwFlags = D3DDEB_BUFSIZE;
debDesc.dwBufferSize = size;
if (lpDev->lpVtbl->CreateExecuteBuffer(lpDev,
&debDesc,
&lpD3DExBuf, NULL) != D3D_OK)
return FALSE;
if (lpD3DExBuf->lpVtbl->Lock(lpD3DExBuf,
&debDesc)!
=D3D_OK)
return FALSE;
lpBufStart = debDesc.lpData;
memset(lpBufStart, 0, size);
lpPointer = lpBufStart;

D3DCOLOR diff = RGB_MAKE(255,255,255);
D3DCOLOR spec = RGB_MAKE(0,0,0);
LPD3DLVERTEX v = lpPointer;
v[0].dvX = D3DVAL(-1.0); v[0].dvY = D3DVAL(1.0);
v[0].dvZ = D3DVAL(1.0); v[0].dcColor = diff;
v[0].dcSpecular = spec;
v[1].dvX = D3DVAL(-1.0); v[1].dvY = D3DVAL(-1.0);
v[1].dvZ = D3DVAL(1.0); v[1].dcColor = diff;
v[1].dcSpecular = spec;
v[2].dvX = D3DVAL(1.0); v[2].dvY = D3DVAL(-1.0);
v[2].dvZ = D3DVAL(1.0); v[2].dcColor = diff;
v[2].dcSpecular = spec;
v[3].dvX = D3DVAL(1.0); v[3].dvY = D3DVAL(-1.0);
v[3].dvZ = D3DVAL(-1.0); v[3].dcColor = diff;
v[3].dcSpecular = spec;
v[4].dvX = D3DVAL(-1.0); v[4].dvY = D3DVAL(1.0);
v[4].dvZ = D3DVAL(-1.0); v[4].dcColor = diff;
v[4].dcSpecular = spec;
v[5].dvX = D3DVAL(-1.0); v[5].dvY = D3DVAL(-1.0);
v[5].dvZ = D3DVAL(-1.0); v[5].dcColor = diff;
v[5].dcSpecular = spec;
v[6].dvX = D3DVAL(1.0); v[6].dvY = D3DVAL(1.0);
v[6].dvZ = D3DVAL(1.0); v[6].dcColor = diff;
v[6].dcSpecular = spec;
v[7].dvX = D3DVAL(1.0); v[7].dvY = D3DVAL(1.0);
v[7].dvZ = D3DVAL(-1.0); v[7].dcColor = diff;
v[7].dcSpecular = spec;
lpPointer = (void *) &v[8];

lpInsStart = lpPointer;
OP_SET_STATUS(D3DSETSTATUS_ALL, D3DSTATUS_DEFAULT,
2048, 2048,
0, 0, lpPointer);
for (i=0;i<6;i++) {
int n = (i<5) ? 1 : 3;
OP_STATE_LIGHT(1, lpPointer);
STATE_DATA(D3DLIGHTSTATE_MATERIAL,
D3DMaterialHandle[i],
lpPointer);
OP_PROCESS_VERTICES(1, lpPointer);
PROCESSVERTICES_DATA
(D3DPROCESSVERTICES_TRANSFORM,i,n,
lpPointer);
}
if (QWORD_ALIGNED(lpPointer))
OP_NOP(lpPointer);
OP_TRIANGLE_LIST(NumTri, lpPointer);
LP3DTRIANGLE tri = lpPointer;
WORD    flags = D3DTRIFLAG_EDGEENABLETRIANGLE;
tri[0].v1 = 0;    tri[0].v2 = 6;
tri[0].v3 = 7;
tri[0].wFlags = flags;
tri[1].v1 = 0;    tri[1].v2 = 7;
tri[1].v3 = 4;
tri[1].wFlags = flags;
tri[2].v1 = 1;    tri[2].v2 = 2;
tri[2].v3 = 6;
tri[2].wFlags = flags;
tri[3].v1 = 1;    tri[3].v2 = 6;
tri[3].v3 = 0;
tri[3].wFlags = flags;
tri[4].v1 = 2;    tri[4].v2 = 3;
tri[4].v3 = 7;
tri[4].wFlags = flags;
tri[5].v1 = 2;    tri[5].v2 = 7;
tri[5].v3 = 6;
tri[5].wFlags = flags;
tri[6].v1 = 3;    tri[6].v2 = 5;
tri[6].v3 = 4;
tri[6].wFlags = flags;
tri[7].v1 = 3;    tri[7].v2 = 4;
tri[7].v3 = 7;
tri[7].wFlags = flags;
tri[8].v1 = 4;    tri[8].v2 = 5;
tri[8].v3 = 1;
tri[8].wFlags = flags;
tri[9].v1 = 4;    tri[9].v2 = 1;
tri[9].v3 = 0;
tri[9].wFlags = flags;
tri[10].v1 = 5;   tri[10].v2 = 3;
tri[10].v3 = 2;
tri[10].wFlags =flags;
tri[11].v1 = 5;   tri[11].v2 = 2;
tri[11].v3 = 1;
tri[11].wFlags =flags;

lpPointer = (void *) &tri[12];
OP_EXIT(lpPointer);

lpD3DExBuf->lpVtbl->Unlock(lpD3DExBuf);
memset(&d3dExData, 0, sizeof(D3DEXECUTEDATA));
d3dExData.dwSize = sizeof(D3DEXECUTEDATA);
d3dExData.dwVertexCount = NumVertices;
d3dExData.dwInstructionOffset =
(ULONG)((char*)lpInsStart -
(char*)lpBufStart);
d3dExData.dwInstructionLength =
(ULONG)((char*)lpPointer - (char*)lpInsStart);
lpD3DExBuf->lpVtbl->SetExecuteData(lpD3DExBuf,
&d3dExData);
if (lpDev->lpVtbl->BeginScene(lpDev) != D3D_OK)
return FALSE;
if (lpDev->lpVtbl->Execute(lpDev, lpD3DExBuf, lpView,
D3DEXECUTE_CLIPPED)
!= D3D_OK)
return FALSE;
if (lpDev->lpVtbl->EndScene(lpDev) != D3D_OK)
return FALSE;

오픈GL
glShadeModel(GL_FLAT);
glBegin(GL_QUAD_STRIP);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(1.0,  1.0,  1.0);
glVertex3f(1.0, -1.0,  1.0);
glVertex3f(1.0,  1.0, -1.0);
glVertex3f(1.0, -1.0, -1.0);
glColor3f(0.0, 1.0, 0.0);
glVertex3f(-1.0,  1.0, -1.0);
glVertex3f(-1.0, -1.0, -1.0);
glColor3f(0.0, 0.0, 1.0);
glVertex3f(-1.0,  1.0, 1.0);
glVertex3f(-1.0, -1.0, 1.0);
glColor3f(1.0, 1.0, 0.0);
glVertex3f(1.0,  1.0, 1.0);
glVertex3f(1.0, -1.0, 1.0);
glEnd();
glBegin(GL_QUADS);
glColor3f(1.0, 0.0, 1.0);
glVertex3f( 1.0,  1.0,
1.0);
glVertex3f( 1.0,  1.0, -1.0);
glVertex3f(-1.0,  1.0, -1.0);
glVertex3f(-1.0,  1.0,
1.0);
glColor3f(0.0, 1.0, 1.0);
glVertex3f( 1.0, -1.0,  1.0);
glVertex3f( 1.0, -1.0, -1.0);
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f(-1.0, -1.0,  1.0);
glEnd();
if (glGetError())
return FALSE;

두 코드의 격차가 너무 커서 혹시 일부러 다이렉트3D용의 코드를 복잡하게 짠 것이 아니냐는 생각이 들 정도이지만 위의 다이렉트3D용 EB 코드들을 간단하게 하기란 구조적으로 힘들다. 매크로들을 써서 다이렉트3D IM의 기능들을 어느 정도 간단하게 할 수는 있겠지만 매크로에 의존하게 되는 경우에는 인자에 대한 체킹이 약해진다.

Cosmo 오픈GL의 등장
사람들의 불만은 반MS 주의자들을 중심으로 확산되었고 MS의 정책대로 끌려다니지 않아도 될 것이라고 기대했다. 이러한 양상은 마치 넷스케이프 내비게이터와 인터넷 익스플로러의 경쟁을 보는 것과도 비슷하다. SGI는 ‘Cosmo’ 시리즈로 통칭되었던 오픈GL의 윈도용 개정판을 ‘Cosmo OpenGL’이라는 이름으로 발표했고 조금 후에 정식으로 ‘SGI OpenGL for Windows’라는 것을 발표했다. 그동안 오픈GL이 하이앤드분야의 솔루션으로만 인식되었던 이유는 MS에서 구현한 윈도용 오픈GL의 성능이 최적화되지 못했기 때문에 게임 등에서 사용하기 부적당한 것으로 인식되었다. SGI판 OpenGL for Windows는 내부적인 최적화와 새로운 Extension의 채용을 통해서 이러한 문제를 해결했다고 주장했다.

그밖의 고려사항
지금까지 논의되지 않은 사항 중에도 실제 개발자에게 결정적인 영향을 미칠만한 부분이 있다. 그것은 3D와 2D의 결합 정도이다. 실제로 게임같은 것을 만들게 되면 렌더링된 게임화면 위에 점수라던가 에너지 등 기타 장식그림을 넣어야만 한다. 현재 윈도용 오픈GL의 경우에는 렌더링된 버퍼에 직접 액세스해서 데이터를 써 넣을 방법이 없다. 다이렉트3D의 경우는 다이렉트3D의 렌더링 된 결과물이 다이렉트 드로우를 통해서 직접 제어가 가능하므로 게임 등의 용도에는 더 적합하다고 본다. 지금까지 비교한 바로는 오픈GL이 다이렉트3D와 비교할 때 더 장점이 많은 것으로(실제로는 다이렉트3D가 더 단점이 많은 것이라는 표현이 정확할 것 같다) 생각되었지만, 그럼에도 불구하고 오픈GL을 선뜻 개발용 API로 선택하기에는 주저할 만한 점이 많이 남아 있다. 가장 심각한 것은 아직도 오픈GL을 제대로 지원하는 하드웨어가 한정되어 있다는 점이다. 또한 OpenGL for Windows 의 경우에는 dll 자체가 원래 일반적으로 사용되는 dll과 이름부터 다르다(Open gl.dll 과 Opengl32.dll). 물론 이름을 바꾼다고 되는 것이 아니라서 예전에 오픈GL용으로 만든 프로그램을 OpenGL for windows를 이용해서 성능의 향상을 기대해볼 수가 없는 것이다(물론 다시 컴파일을 해서 만들면 되긴 하지만). 3Dfxgl의 경우에는 dll만 교체하여 실행해 볼 수 있지만 아직은 안되는 것이 너무 많고 풀화면 모드밖에 지원되지 않는다.
이런저런 이유들로 하여 어떤 것이 확실히 좋다라고 말하기 힘든 가운데 MS는 그동안의 수세를 만회할 준비를 하고 나타났다.

DP(DrawPrimitive)의 등장
처음에는 MS가 내부적으로는 다이렉트3D IM을 이용하여 오픈GL을 다시 지원하게 될 것이라고 발표했었다. 물론 사람들은 여기에 대해 강한 불만을 표시했었다. 아마 다이렉트3D IM은 누구에게도 쓸모없는 수고와 고통만을 던져주는 애물단지라는 인식이 너무나 굳어진 탓이었는지도 모른다. 그러던중 결국 다이렉트X 5가 등장하였고 여기에는 상당히 새로운 내용이 포함되어 있었다. 이것은 사실 기존의 Immediate Mode의 구조를 완전히 바꾸어 버린 것으로서 오픈GL의 기능과 구조 등을 대거 차용하고 Imme diate Mode의 불편함을 상당히 해소한 것이다. 그것의 이름은 바로 DP이다.

DP - EB와의 작별
다이렉트3D에 대해 제기된 문제점의 핵은 바로 EB였다. 이것이 코딩의 불편함, 효율적인 처리를 막는 결과, 드라이버를 제작할 때의 걸림돌이 되었다. 이 구조를 유지하고서는 도저히 혁신적인 기능향상을 얻지 못할 것이란 분석이 지배적이었고 결국 MS는 다이렉트X 5의 다이렉트3D에서 EB를 쓰지 않는 새로운 방식을 소개했다. 다행스럽게도 DP는 많은 사람들이 바람직하다고 생각하는 방향으로 설계되었다. 이것은 이름 그대로 Primitive들 즉, Triangle이나 Line, Point, Polygon 등을 Draw하는 것으로서 Immediate Mode의 EB를 완전히 대체하도록 디자인된 것이다. 실질적으로 DP와 EB는 같이 쓸 필요가 없다. DP를 사용하기 위해서는 그릴 대상의 종류를 선택해서 점들을 나열해 주는 것으로 수행한다. 점들을 나열하는 방법에는 두 가지가 있는데 첫 번째는 점 하나당 함수 한개씩 이용해서 나열하는 방식이고 두 번째는 점들이 담긴 배열의 포인터를 넘겨서 한꺼번에 그리는 방식이다. 이러한 방법들은 오픈GL에서의 코딩방식과 상당히 유사한 점이 많다. 또한 지오메트리 연산을 위해서 Set/GetTransform을 통해 행렬을 설정해 놓는 방식도 오픈GL에서의 모델 뷰 메트릭스(Model View Matrix)를 사용하는 것과 유사하다.

Primitive들의 종류
DP가 그리는 Primitive들은 크게 2종류로 나뉘어진다. 첫 번째는 그림 1처럼 삼각형들로 이루어진 다각형 Primitive들이다. 이것에는 Triangle fan, Triangle strip, Triangle list 등이 있다. 또 다른 종류의 Primitive는 그림 2처럼 선과 점으로 된 것들이다. 여기에는 Line List 와 List Strip, Point List 등이 있다. 부채살(Line Fan)은 빠져있다. 아마 대개의 경우 보통의 DrawPrimitive보다는 Draw primitiveIndexed를 더 많이 사용하게 될 것 같다. 왜냐하면 폴리곤 메쉬에 점이 중복되는 경우가 많기 때문이다. 적어도 3개 이상의 폴리곤이 한 점을 공유하게 되어 있으므로 점 3개를 일일이 열거하기 보다는 점을 하나만 지정해 놓고 그에 대한 인덱스를 참조하는 개수만큼 열거하는 것이 처리할 데이터양을 줄이는데 도움이 될 것이다.
그밖에 다이렉트3D 5에서는 코딩을 돕기 위한 몇몇 부가적인 내용이 추가되었다. 예를 들면 벡터나 매트릭스 연산을 위한 C++ Overload Operator 등을 들 수 있다. 길고 복잡한 이름들을 써야만 했던 기존의 방식에 비교해볼 때 MS가 상당히 개발자를 위해 성의를 보인 느낌이 든다.

===============================================================
DrawPrimitive 메소드 설 명 유사한, 관련된 오픈GL 메소드
===============================================================
초기화 관련
---------------------------------------------------------------
Set/GetRenderTarget 그림을 그릴 DirectDraw 서피스를 지정한다.
wglMakeCurrent, wglGetCurrent
Set/GetCurrentViewport 화면에 그려질 3D 공간을 설정한다
---------------------------------------------------------------
상태 바꾸기, 보기
---------------------------------------------------------------
Set/GetRenderState 렌더링 엔진에 관련된 상태값을 지정한다.
glEnable / glDisable
Set/GetLightState 빛처리에 관련된 상태값을 지정한다.
glShadeModel, glLightModel
Set/GetTransform 공간 좌표계(3D)에서 화면 좌표계 (2D)로 변환시킬 때 사
용할 행렬을 지정한다
glMatrixMode
MultiplyTransform 행렬을 곱한다 glMultMatrix
Set/GetClipStatus 현재 클리핑 상태를 지정한다. glFrustum
---------------------------------------------------------------
그리기
---------------------------------------------------------------
DrawPrimitive Primitive(점, 선, 폴리곤 단위)를 그린다. glNewList
DrawIndexedPrimitive 인덱스를 사용한 리스트를 이용해 Primitive를 그린다.
glEndList glCallList
Begin Primitive 들을 그리기 시작한다. glBegin
BeginIndexed 인덱스를 사용한 Primitive들을 그리기 시작한다
Vertex 점을 추가한다 glVertex
Index 인덱스를 추가한다
End Primitive 그리기를 완료한다 glEnd
===============================================================

결론

지금까지 여러 가지 측면을 통해서 다이렉트3D와 오픈GL의 활용 가능성에 대해 비교해 보았다. 현재의 수준으로 보아서는 두 가지의 API 모두 상당한 시간을 거쳐서 모자란 기능들을 보강하고 단점들을 메꾸었기 때문에 어떤 하나가 다른 하나보다 확실히 좋다고는 말하기 힘든 상황이다. 특히 다이렉트3D의 경우에는 DP를 채용하면서 오픈GL의 구조를 상당히 많이 채용하였다. 분석해보건데 DP는 꽤 효율적으로 디자인되었고 사용하기에도 무리가 없기 때문에 EB와는 달리 오랫동안 사용될 수 있을 것으로 기대되므로 이제는 더이상 기다리지 않고 3D 프로그래밍 작업에 착수하는 것도 괜찮을 것 같다. 독자가 만약 처음 3D 프로그래밍을 시작했거나 게임쪽으로 3D API를 활용할 계획이라면 일단 다이렉트3D의 Retained Mode를 사용해 볼 것을 추천한다. 다이렉트3D의 Retained Mode에는 단시간에 결과물을 만들기 위한 많은 것들이 준비되어 있다. 만약 퀘이크나 툼레이더 같은 게임을 만들어야 한다면 BSP같은 알고리듬을 구현해야 하는데 이런 경우에는 Retained Mode만 사용하는 것은 무리이고 DP를 쓰는 것이 좋다. 참고로 MS의 다이렉트X 홈페이지에 가보면 DP를 사용해 만든 다이렉트3D Quake의 소스와 기타 다른 예제들의 소스가 공개되어 있다. DP 자체가 오픈GL의 스타일을 따라 만든 것이라서 그런지 몰라도 다이렉트3D Quake는 GL-Quake 뷰어의 소스에 드라이버 부분의 약간만 수정하고서 손쉽게 포팅된 것을 볼 수 있었다. 특히 다이렉트3D의 장점은 DD와의 밀접한 결합이기 때문에(물론 이것이 오히려 단점이 되는 경우도 있다) 많은 경우에서 오픈GL보다 다이렉트3D를 쓰게 될 것이다.
한편 최근에 나오는 새로운 고성능 저가형의 가속기들 중에서도 아직 오픈GL을 완벽하게 지원하는 기종은 눈에 띄지 않고 있다. 예를 들어 Edge3D의 실패를 딛고 일어선 nvidia 사의 Riva 128칩을 채용한 가속기들은 상위급 수준의 2D 속도와 부두칩을 채용한 보드를 능가하는 다이렉트3D 가속 능력을 지니고 있어서 현재 인기품목이긴 하지만 오픈GL에 대한 지원 여부는 불투명하다(특히 윈도 NT가 아닌 윈도 95에서는). 이러한 점들은 오픈GL을 게임제작용으로 선택하려는 사람들에게는 걸림돌이 될 것이다. 실시간용 이외의 좀더 복잡한 프로그램을 짜야겠다면 아무래도 오픈GL을 선택하는 것이 나을 것 같다. 오픈GL은 그 자체만으로도 다이렉트3D IM에 비해 더 풍부한 기능들을 지니고 있으며(NURBS 지원 등) 오픈인벤터나 오픈GL 옵티마이저 등의 부가 라이브러리, 툴을 이용해서 다양하게 활용할 수 있는 여지가 많다. 특히 다음 홈페이지는 오픈GL 에 관심있는 개발자에게 도움이 될 것이다.

http://reality.sgi.com/mjk_asd/opengl-links.html

참고------------------------------------------------------------
1. What is DrawPrimitive?
(http://www.microsoft.com/DirectX/Dxp/Indepth/draprim.htm)
2. Getting Started with Direct3D
(http://www.microsoft.com/DirectX/Dxp/Indepth/d3intro.htm)
3. Direct3D Analysis
(http://www.sgi.com/Technology/OpenGL/direct-3d.html)
4. OpenGL superbible (Waite Group Press)
5. John Carmack's Plan (http://www.directx.com/carmack.html)
---------------------------------------------------------------


opengl11

 오픈GL 관련 사이트들

오픈GL 공식 사이트
http://www.opengl.org
오픈GL ARB에서 운영하는 이 사이트는 오픈GL 공식 사이트답게 오픈GL에 관련된 거의 모든 자료를 망라하고 있다. 이곳은 오픈GL과 관련된 업계의 동향과 새로운 소식, 각종 FAQ 등의 유용한 자료가 많고, 프로그래밍 관련 문서, 예제 코드 등을 풍부하게 가지고 있다. 뿐만 아니라 각지에 흩어져 있는 오픈GL 관련 자료를 정리하여 연결했기 때문에, 이곳을 통하면 원하는 정보를 쉽게 찾을 수 있다.

실리콘그래픽스 사의 오픈GL 사이트
http://www.sgi.com/Technology/openGL/
이곳은 www.opengl.org가 개설되기 전까지 오픈GL의 공식 사이트 역할을 했던 곳이다. www.opengl.org에 비해 화려하지도 않고 최신의 자료를 가지고 있지도 않지만 오픈GL을 체계적으로 공부할 수 있는 온라인 강좌 형식의 도큐먼트가 있어 한번쯤 들러봐야 할 사이트이다.
일본 실리콘그래픽스 사이트 http://www.sgi.co.jp/Technology/openGL/에서 미러링을 하고 있다.

각 회사별 오픈GL 사이트
마이크로소프트 사 :http://www.microsoft.com/ntworkstation/opengl.htm 마이크로소프트는 오픈GL에 대한 자료를 많이 가지고 있는데, 이들 중 대부분은 MSDN과 관련된 페이지에 있기 때문에 등록을 하지 않으면 볼 수가 없다. 위에 적힌 주소는 윈도 NT 워크스테이션 버전에 포함된 오픈GL에 관한 자료인데, 오픈GL로 렌더링된 그림들도 몇장 포함되어 있는 볼만한 페이지이다.
썬 사 : http://www.sun.com/ultra30/productinfo/opengl/features.html
썬 사의 솔라리스용 오픈GL에 관련된 자료를 담은 홈페이지이다. 솔라리스에서 오픈GL을 사용하고자 한다면 이 페이지가 유용하다.
IBM 사 : http://www.austin.ibm.com/software/openGL/
OS/2 워프용 오픈GL과 AIX용 오픈GL에 관한 자료를 구할 수 있는 사이트이다.

기타 사이트
X윈도와 관련된 문서 : ftp://sgigate.sgi.com/pub/opengl/doc/
ftp사이트인 이곳에는 X윈도에서 프로그래밍을 할 때 유용한 문서자료들이 압축되어 보관되어 있다.

오픈 인벤터 페이지
http://www.sgi.com/Technology/open inventer.html
실리콘그래픽스에서 내놓은 객체지향적 3차원 프로그래밍 툴킷인 오픈 인벤터의 페이지. 아직은 오픈 인벤터에 대한 인지도가 낮으나, TGS 사에서 오픈 인벤터를 윈 32로 이식했다고 하니, 앞으로는 오픈 인벤터에 대한 관심도 증대될 것으로 보인다.


opengl15

 OpenGL Command Syntax

OpenGL의 구성을 간략히 두가지로 구분하여 설명하면 상태 변수(state variable)과 함수(OpenGL function)으로 구성되어 있다.

상태 변수(state variable) : GL로 시작하며 대문자들로 이루어져 있다.
함수(OpenGL function) : gl로 시작하고 대문자(첫자)로 명령어가 시작된다.

OpenGL 프로그래밍에 있어 Source file 에서 header file로 include되어야하는 Header file은 다음과 같다.

#include <gl\glos.h>
#include <gl\gl.h>
#include <gl\glaux.h>

자주 사용되는 State Variable과 함수들

State Variables : GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLES_STRIP,
GL_POLYGON등 OpenGL Functions : glBegin(), glEnd(), glVertex*,
Example
점 찍기
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();

선그리기
glBegin(GL_LINES);   //선분
그리기를 시작
glVertex2f(x,y);
//선분의 끝점 좌표들
glVertex2f(endX,endY);
glEnd();

직사각형 그리기
glBegin(GL_LINE_LOOP); //선분 고리를
만든다.
glVertex2f(leftX,topY);
glVertex2f(leftX,topY-height);
glVertex2f(leftX+width,topY-height);
//선분의 끝점 좌표들
glVertex2f(leftX+width,topY);
glEnd(); //선분 고리 만들기를 끝냄

원 그리기
GLint circle_points=100;
float angle;
glBegin(GL_LINE_LOOP); //선분 고리
만들기 시작
for(int i=0;
i<circle_points;i++) //100개의 점을 생성함
{
angle=2*PI*i/circle_points; //각 점이 x축과 이루는 각도
glVertex2f(radius*cos(angle)+cX,radius*sin(angle)+cY); //점들의 좌표
}
glEnd(); //선분 고리 만들기 끝

색상 조절하기
glColor3f(float red,float green,float blue);


자료실에서 받은 영문자료인데, 지금껏 받은 자료중 가장 나은 것 같네요. 직접 따라서 해보고, 현재 그라데이션효과가 들어간 삼각형까지 구현을해보았습니다. 이 부분은 pixel setting 에 관한 내용입니다.

 pixel setting 에 관한 내용입니다.

※ current라는 단어를 어떻게 표현해야 할 지 난감한데, 아마 여러개의 Rendering Context가 만들어져있을때 그중에서 현재 설정되어 있는 RC를 말하는 것 같군요.

비주얼 C++ 4.×를 이용한 OpenGL 프로그램 작성

첫번째 프로그램은 OpenGL graphics를 사용하기 위하여 윈도우 프로그램에서 최소한의 setting을 어떻게 하는 지 보여주는 예이다.

GDI에서 이미지를 그리기 위하여 Device Context(DC)를 요구하는 것처럼 OpenGL에서는 Rendering Context(RC)를 필요로 한다. GDI와 다르게 명령을 요구할때마다 DC를 추가시켜야 하는 것과 다르게 OpenGL에서는 현재 RC의 상태를 사용한다. 한번 Rendering Context를 thread에서 생성되면 모든 OpenGL은 현재와 동일한 Rendering Context를 호출한다. 하나의 윈도우에서 그리기 위하여 여러개의 rendering context가 사용된다면 단지 하나의 rendering context가 single thread에서 current된다.

이 예는 OpenGL rendering context의 currnet를 만들고 생성하는 것이다.
Rendering Context의 current를 만들기 위하여 세가지 과정을 필요하다.

1. Window의 pixel format을 setting 한다.
2. Rendering context를 만든다.
3. Rendering context current 를 만든다.

프로젝트를 만들기 위하여 다음의 과정을 통한다.

1. 새로운 Project Workspace (MFC AppWizad(exe)"만들고 원하는 디렉토리를 지정하고, 이름을 기입한다. 여기에서는 GLSample1이리고 한다.
2. Single Document Interface
3. Database support: None
4. OLE support: None
5. Docking Toolbar: OFF (optional)
Initial Status Bar: OFF (optional)
Printing an Print Preview: OFF
6. Generate Source File Comments: Yes
7. Use the MFC library as a shared DLL.
8. Finish

먼저 Project에서 OpenGL file과 library들에 필요한 것들을 포함시켜야 한다.

'Project' -> 'Settings' -> 'Link' (ALT+F7) 을 눌러 Object/Library의 edit box에 "opengl32.lib glu32.lib glaux.lib"을 입력하고 OK한다.

이제는 "stdafx.h"를 오픈하여 file안에 다음과 같이 집어넣는다.

#define VC_EXTRALEAN // Exclude rarely-used stuff from
Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions #include <gl\gl.h>
#include <gl\gl.h>
#include <gl\glu.h>
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows 95
Common Controls

#endif // _AFX_NO_AFXCMN_SUPPORT

OpenGL은 WS_CLIPCHILDREN 과 WS_CLIPSIBLINGS 가 설정된 window를 요구한다. OnPreCreate를 다음과 같이 Edit 하라.

BOOL CGLSample1View::PreCreateWindow(CREATESTRUCT&
cs)
{
cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
return CView::PreCreateWindow(cs);
}

먼저 rendering context를 생성하기 위하여 windw의 pixel format을 설정한다. Pixel format은 window display가 memory에서 표현되는 그래픽을 설명한다. Parameter들은 color depth, buffering method, 그리고 지원하는 drawing interfaces를 포함한 pixel format에 의하여 조정된다. 아래에서 몇가지 등을 확인할 수 있을 것이다.

먼저 CGLSample1View class에서 'BOOL SetWindowPixelFormat(HDC hDC)'라고 불리는 새로운 pretected member function을 생성한다. (Project Workspace에서 Add Function... 을 선택하여 생성할 수도 있다)

여기에 다음과 같이 집어넣는다.

BOOL CGLSample1View::SetWindowPixelFormat(HDC hDC)
{
PIXELFORMATDESCRIPTOR pixelDesc;
pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pixelDesc.nVersion = 1;
pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW
| PFD_DRAW_TO_BITMAP |
PFD_SUPPORT_OPENGL | PFD_SUPPORT_GDI |
PFD_STEREO_DONTCARE;
pixelDesc.iPixelType = PFD_TYPE_RGBA;
pixelDesc.cColorBits = 32;
pixelDesc.cRedBits = 8;
pixelDesc.cRedShift = 16;
pixelDesc.cGreenBits = 8;
pixelDesc.cGreenShift = 8;
pixelDesc.cBlueBits = 8;
pixelDesc.cBlueShift = 0;
pixelDesc.cAlphaBits = 0;
pixelDesc.cAlphaShift = 0;
pixelDesc.cAccumBits = 64;
pixelDesc.cAccumRedBits = 16;
pixelDesc.cAccumGreenBits = 16;
pixelDesc.cAccumBlueBits = 16;
pixelDesc.cAccumAlphaBits = 0;
pixelDesc.cDepthBits = 32;
pixelDesc.cStencilBits = 8;
pixelDesc.cAuxBuffers = 0;
pixelDesc.iLayerType = PFD_MAIN_PLANE;
pixelDesc.bReserved = 0;
pixelDesc.dwLayerMask = 0;
pixelDesc.dwVisibleMask = 0;
pixelDesc.dwDamageMask = 0;

    m_GLPixelIndex = ChoosePixelFormat(
hDC, &pixelDesc);
if (m_GLPixelIndex==0) // Let's choose
a default index.
{
m_GLPixelIndex
= 1;
if (DescribePixelFormat(hDC,
m_GLPixelIndex, sizeof(PIXELFORMATDESCRIPTOR), &pixelDesc)==0)
{
return FALSE;
}

}

if (SetPixelFormat( hDC, m_GLPixelIndex, &pixelDesc)==FALSE)
{
return FALSE;
}

return TRUE;
}

이제 CGLSample1View class에서 다음과 같이 member 변수를 추가한다. (class 이름에서 오른쪽 마우스를 누르면 나타나는 "Add Variable..."를 이용해도 된다.

int m_GLPixelIndex; // protected

마지막으로 ClassWizard WM_CREATE message의 응답으로 생성되는 OnCreate 함수를 추가하고 다음과 같이 집어넣는다.

int CGLSample1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct)
== -1)
return -1;

HWND hWnd = GetSafeHwnd();
HDC hDC = ::GetDC(hWnd);

if (SetWindowPixelFormat(hDC)==FALSE)
return 0;

if (CreateViewGLContext(hDC)==FALSE)
return 0;

return 0;
}

프로그램을 compile하고 syntax error등을 고쳐보라.
실행시키면 아마 일반적인 MFC shell가 똑같은 화면이 나타날 것이다.

Pixel format descriptor를 이용하여보자.

pixel format을 사용할수 있는 지 보기 위하여 DescribePixelFormat에 있는 index들을 살펴보자. code의 기능과 여러분이 나중에 사용하다가 주의해야 할 것들을 설명한다.

PIXELFORMATDESCRIPTOR 는 pixel format 에 대한 정의된 정보들을 포함하고 있다.

여기에서 몇가지 중요한 점들을 설명하지만, 자세한 설명을 원한다면 VC++ online help를 참고하기 바란다.

dwFlags : pixel format과 호환할 수 있는 device와 interface들을 정의한다. 이러한 flag들은 OpenGL의 일반적인 release에서 모두 만족하지는 않는다. 더 많은 정보를 위한 documentation을 언급한다. dwFlags는 다음의 flag들을 적용할 수 있다.

PFD_DRAW_TO_WINDOW -- Window와 device surface를 사용할 수 있다.
PFD_DRAW_TO_BITMAP -- memory에서 bitmap을 사용할 수 있다.
PFD_SUPPORT_GDI -- Enables GDI calls. Note: 이 옵션은 PFD_DOUBLEBUFFER가 정의되어있다면 유효하지가 않다.
PFD_SUPPORT_OPENGL -- OpenGL 호출을 가능하게 한다.
PFD_GENERIC_FORMAT -- Pixel format이 Window GDI library나 vendor hardware device driver를 지원하면 지정한다.
PFD_NEED_PALETTE -- 만약 버퍼가 palette를 필요로 하면 지정한다.
PFD_NEED_SYSTEM_PALETTE -- 이 flag는 버퍼가 palette의 부분으로 남겨진 system palette를 필요로 한다면 지정한다.
PFD_DOUBLEBUFFER -- double-buffering이 사용중인지를 가리킨다. GDI는 double buffer의 window와 사용할 수 없다.
PFD_STEREO -- stereo image들을 유지되어 있는 왼쪽, 오른쪽 buffer들을 가리킨다.

iPixelType : Color를 표현하는 방법을 정의한다.

PFD_TYPE_RGBA 는 bit들의 집합이 Red, Green, and Blue 값이라는 것을 나타내고, PFD_TYPE_COLORINDEX 는 bit들의 각각의 집합이 color lookup table의 index라는 것을 나타낸다. 예제는 모두 PFD_TYPE_RGBA를 사용하였다.

cColorBits : Color를 정의하는 데 사용한 Bit의 수를 정의한다.

RGBA는 color의 구성인 red, green, 그리고 blue(alpha는 아니다)를 표현하는데 사용된 bit의 수이고, indexed colors들은 table에 있는 color의 수이다.
cRedBits, cGreenBits, cBlueBits, cAlphaBits : 각각의 구성요소를 표현하는데 사용한 bit의 수이다.
cRedShift, cGreenShift, cBlueShift, cAlphaShift : color에서 시작으로부터 offset한 각각의 구성요소의 bit의 수이다.

이제 structure를 초기화했다면 우리는 원하는 것에 가까운 system pixel format을 찾아내는 데 시도해야 한다. 우리는 이것을 다음과 같이 호출하여 사용할 수 있다.

m_hGLPixelIndex = ChoosePixelFormat(hDC, &pixelDesc);

ChoosePixelFormat은 hDC와 PIXELFORMATDESCRIPTOR*를 인수로 가지고 그 pixel format을 언급하는데 사용된 index나 함수가 실패할 시 0을 return한다. 만약 함수가 실패했다면 단지 index를 1로 놓거나 DescribePixelFormat를 이용하여 pixel format description을 얻으면 된다.

pixel format은 유한의 수이며 system은 그것들의 속성이 무엇인지 정의한다.

만약 지원하지 않는 pixel format을 요구하면 ChoosePixelFormat는 여러분들이 요구하는 것에 가까운 fomat의 integer 값을 return할 것이다.

만약 유효한 pixel format index과 부합한 서술을 한다면 이제 SetPixelFormat를 호출할 수 있다.

윈도우의 pixel format는 단지 한번만 하면 된다.

이제 pixel format이 지정되었다면 그것을 일반적으로 사용하기 위하여 rendering context를 생성해야 한다.

CGLSample1View class에서 "BOOL CreateViewGLContext(HDC hDC)" 라는 새로운 protected member function을 추가하고 다음과 같이 고치라.

BOOL CGLSample1View::CreateViewGLContext(HDC hDC)
{
m_hGLContext = wglCreateContext(hDC);
if (m_hGLContext == NULL)
{
return FALSE;
}

if (wglMakeCurrent(hDC, m_hGLContext)==FALSE)
{
return FALSE;
}

return TRUE;
}

CGLSample1View class에 다음과 같은 멤버변수를 추가한다.

HGLRC m_hGLContext; // protected

WM_DESTORY message의 응답으로 함수 OnDestory를 추가하고 다음과 같이 고쳐라.

void CGLSample1View::OnDestroy()
{
if(wglGetCurrentContext()!=NULL)
{
// make the
rendering context not current
wglMakeCurrent(NULL,
NULL) ;
}

    if (m_hGLContext!=NULL)
{
wglDeleteContext(m_hGLContext);
m_hGLContext
= NULL;
}

// Now the associated DC can be released.
CView::OnDestroy();
}

마지막으로 CGLSample1View class의 생성자를 다음과 같이 고치라.

CGLSample1View::CGLSample1View()
{
m_hGLContext = NULL;
m_GLPixelIndex = 0;
}

다시 프로그램을 compile 하고 syntax error들을 고쳐보자. 여러분이 이 프로그램을 실행시킨다면 아직도 일반적인 MFC 프로그램처럼 보일 것이다. 그러나 이제 OpenGL drawing을 할 수 있게 된 것이다. 이제는 하나의 rendering context를 생성하는 프로그램의 시작부터 모든 시간동안 사용할 수 있다. 이것은 drawing이 필요할때에만 DC가 생성되고 나중에는 순간적으로 해제되는 GDI 프로그램과 다르다.

CreateViewGLContext : rendering context의 current를 만든다.

wglCreateContext : RC에 대하여 handle을 반환한다.
wglMakeCurrent : 현재의 context로서 RC를 설정한다. wglMakeCurrent를 호출할 때 다른 rendering context가 current화 되어있다면 이 함수는 단지 오래된 RC를 flush하고 새로운 것으로 바꾼다. wglMakeCurrent(NULL, NULL) 로 rendering context current를 만들지 않을 수 있다.
Window의 RC의 해제인 OnDestory때문에 우리는 여기에서 rendering context 를 지우는 것이 필요하다.그러나 RC를 지우기 전에 그것이 current인지 확인해야 한다. 이때 wglGetCurrentContext를 이용하여 current rendering context이 있는지 확인할 수 있다. 만약 있다면 wglMakeCurrent(NULL, NULL)를 이용하여 제거할 수 있다.

다음으로 RC를 지우기 위하여 wglDeleteContext를 지운다. DC의 해제에 대하여 view class에 허용하는 것은 이제 안전하다.

많은 것을 하지 않았지만 처음으로 OpneGL 프로그램을 만든 것을 축하합니다.

OpenGL Tips:
WM_SIZE message에 대한 응답으로 matrix mode와 viewport를 설정한다.
WM_PAINT message에 대한 응답으로 그리고자 하는 것들을 코딩한다.
Rendering context의 생성에는 많은 CPU time이 소요된다. 프로그램의 실행시간을 고려하여 단 한번만 생성하라.
Document class 에서 drawing command들을 캡슐화하라. 이것은 다른 view에서 똑같은 document 를 사용할 수 있다.


이번에는 어떻게 viewport를 생성하고, matrix mode를 설정하고, 간단한 2-D image를 그리는 지 보여주는 예제이다.

 간단한 2-D image 만들기

이번에는 어떻게 viewport를 생성하고, matrix mode를 설정하고, 간단한 2-D image를 그리는지 보여주는 예제이다.

GLSample2라는 프로젝트를 만들고 처음과 같이 setting을 한다. 아니면 처음 예제를 이용하여 사용해도 된다. ClassWizard를 이용하여 WM_SIZE message의 응답으로 OnSize라는 함수를 만들고 다음과 같이 코딩한다.

void CGLSample2View::OnSize(UINT
nType, int cx, int cy)
{
CView::OnSize(nType,
cx, cy);
GLsizei
width, height;
GLdouble
aspect;
width
= cx;
height
= cy;

if (cy==0)
aspect = (GLdouble)width;
else
aspect = (GLdouble)width/(GLdouble)height;

     glViewport(0,
0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

     gluOrtho2D(0.0,
500.0*aspect, 0.0, 500.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

이제 WM_PAINT message 의 응답으로 OnPaint 함수를 만들고 다음과 같이 코딩한다.

void CGLSample2View::OnPaint()
{
CPaintDC dc(this); // device context for painting (added by ClassWizard)

glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_POLYGON);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glVertex2f(100.0f, 50.0f);
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glVertex2f(450.0f, 400.0f);
glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
glVertex2f(450.0f, 50.0f);
glEnd();

glFlush();
}

이 프르그램을 compile 하고 실행시켜보세요. 그러면 검은 색 윈도우에 여러색으로 칠해진 커다란 삼각형이 보일 것입니다. 이 윈도우를 다시 크기를 변경하여 봅시다. 윈도우 크기에 맞추어 그림이 변합니다.
OnSize에서 veiwport와 viewing 좌표를 정의하고 있습니다. 윈도우 area의 viewport는 OpenGL 명령에 의하여 그려질 수 있다. 이것은 다음과 같이 정의된다.

glViewport(0, 0, width, height);

이 명령은 이 윈도우에서 왼쪽 최하위 구석에서 오른쪽 하위 구석까지 그리고 높이와 넓이를 설정한다. 이 parameter들은 화면 좌표에서 함수로 저장된다. 다음과 같이 OnSize를 이용하여 다음과 같이 바꾸고 컴파일 시켜 실행시켜보고 어떻게 변하는 지 확인해보자.

glViewport(width/4, height/4, width/2, height/2);

이제 code를 원래대로 변경한다.

OnSize에서의 다음 명령은 glMatrixMode(GL_PROJECTION) 이다. OpenGL에서는 여러가지 transformation을 조절하기 위하여 내부적으로 3차원 행렬을 유지한다. 이러한 matrix를 Projection, ModelView, 그리고 Texture라고 부른다. Projection 행렬은 eye 좌표로부터 clip 좌표로의 transformation을 조절한다. ModelView는 eye 좌표에 대하여 object 좌표를 변환시킨다. Texture 행렬은 표면에 그리기 위해 필요한 좌표에 대하여 정의된 좌표로 부터 testure를 변환시킨다. glMatrixMode 에 의해 정의된 좌표는 행렬 연산에 영향을 미치게 된다. 이것에 대해서는 다음에 설명하기로 한다.

우리는 glLoadIdentity를 project matrix 를 초기화하기 위하여 호출한다. gluOrtho2D 는 이차원의 orthogonal image를 그리기 위하여 project matrix를 설정한다. 이 숫자들은 여러분들이 정의한 숫자는 그리려는 범위의 공간을 저장하는 함수이다. 이 공간은 world coordinate(실 좌표계)로 불린다.
먼저 ModelView Matrix를 제거한다. 이것은 어떠한 transformation을 하지 않기 때문에 실제적으로 필요하지는 않다. (제거하지 않은 상태에서 - glClear부분을 제거하고 - 실행해보자. 그러면 하얀색 화면에서 그려진 삼각형을 볼 것이다) 이것은 screen에 관한 부분 뿐만 아니라 printe buffer와 rendering context를 만들기 위하여 DC(device context)의 type을 기초로 하는 bitmap까지 clear하기도 한다.

다음으로 glBegin(GL_POLYGON)을 호출한다. 이 함수는 rendering context의 상태를 바꾼다. Perspective로 부터 만들어진 물체는 GL_POLYGON의 내부적인 object로 만들어진다. 이것은 glEnd()까지의 모든 명령어로 정의된다. 우리는 삼각형을 정의하기 위하여 3개의 glColor4f와 3개의 glVertex2f를 사용한다.

잠시 OpenGL의 명명법에 대하여 알아보자.
모든 OpenGL의 명령어는 "gl"의 접두어를 사용한다. 또한 여러개의 "glu"명령어가 있는데 이것은 "GL Utilities"이다. 이러한 "glu" 명령은 "gl" 명령의 간단한 조합으로 몇가지 유용한 작업을 한다. 예를 들어 2-D ortographic matrix를 설정하는 것처럼.

대부분의 "gl"명령은 서로 다른 data type의 여러가지 변수의 숫자를 가지고 있다. glVertex2f 명령을 예로 든다면 이것은 두개의 float를 이용하여 vertex를 정의한다. 여러 자료들을 보면 glVertex2d, glVertex2f, glVertex3i, glVertex3s, glVertex2sv, glVertex3dv등을 통하여 알 수 있을 것이다.

삼각형을 그리기 위하여 다음과 같은 방법으로 정의하고 있다. glColor4f(1.0f, 0.0f, 0.0f, 1.0f)명령은 Red component가 1로 설정되어 있어 현재의 색깔을 Red로 설정하고 Green과 Blue component는 0으로 설정된다. Point(100,50)에 world coordinate를 설정하기 위하여 glVertex2f(100.0f, 50.0f)를 호출한다. 이 과정을 반복하여 다음의 두 점을 위하여 상대적으로 Green과 Blue를 설정한다. 이 점은 화면상에서는 아무것도 보이지 않을 것이다. OpenGL에서는 glFlush()를 호출하기 전까지 buffer에 일련의 명령이 저장될 것이다. glFrush를 호출하면 각 점사이의 색들을 자동으로 삽입할 것이고 이것으로서 screen상에 여러색의 칠해진 삼각형을 보게 된다.

여러개의 다른 모향을 만든다면 glBegin으로 만들수 있을 것이다. 아래에는 여러가지 모형을 만들기 위한 mode들과 유용한 명령어들이다. 다음 단계에서는 document class에서 그림을 그리고 옮기는 routin을 배울것이다. 또한 기본적인 transform을 사용하고 matrix stack에서 matrix를 push 하고 pop하는 데 중요한 점들을 배울 것이다.

glBegin(GLenum mode) parameters:

GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES,GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP, GL_POLYGON

glBegin와 glEnd 사이에 유용한 명령어들 :

glVertex, glColor, glIndex, glNormal, glTexCoord, glEvalCoord, glEvalPoint, glMaterial, and glEdgeFlag


opengl14

 OpenGL 프로그래밍 속도 향상법

일단 몇가지 방법을 기술해보면,..

1. Vertex Array 사용
일일이 Vertex 정보를 넣어주는 것이 아니라 Vertex Array pointer를 이용하면 정보 전송량을 엄청나게 줄일 수 있습니다.

2. GL_TRIANGLES 대신 GL_TRIANGLEPAN 등을 사용
이렇게 하면 공유된 꼭지점에 대해서는 인덱스 전송을 줄일 수 있어서 경우에 따라 데이터 전송량을 1/3 정도 줄일 수 있습니다.

3. Texture Array 사용
그때그때 텍스쳐를 변경하지 않고, 미리 사용할 텍스쳐를 비디오 카드 메모리에 몽창 올린 다음, 인덱스(integer value)를 이용하여 텍스처를 전환합니다. 당연히 속도가 빨라지죠..

4. 16bit 보다는 8bit texture 사용
Permeida2 부터는 8bit texture를 제대로 지원합니다. 이것은 텍스쳐 메모리 사용량을 줄여주고 데이터 전송 시간을 줄입니다. 그러나 내부적으로 계산하는 하드 로직이 바뀌지는 않으므로 큰 효과는 없을 겁니다. OpenGL Spec 상에 따르면 8bit Palette 형식을 사용할 수 있는데, 이렇게 하면 속도는 빨라질 수 있습니다. 암튼 화질을 위해 텍스쳐만 8bit를 사용하시기를..

5. 무엇보다 중요한!! 화면에 보이는 폴리건 수 최소화하기
View volumn을 이용해서 미리 불필요한 폴리건을 제거하는 작업이 꼭 필요합니다. 백만개의 폴리건으로 이루어진 신~이라도 실제 화면에서 보이는 부분은 몇백개 내지 몇천개밖에 안되는 경우가 허다합니다. 실제 속도에 지대한 영향을 미치겠죠.

6. glRotate/glTransate 보다는 사용자 정의 matrix를 이용해서 glMultMatrix 등을 사용하고, 필요하다면 어셈블리 코드를 사용해서 직접 matrix를 곱한 후, glPushMatrix 형식으로 사용하는 것이 더 빠릅니다.


Untitled

이 도움말은 단국대 전산과 3학년 컴퓨터 그래픽을 수강하는 학생들이 만든 것으로서 OpenGL에 관한 라이브러리의 정보를 제공하고, 기타 프로그램을 작성하는데 유용한 정보가 되기 위하여 만들었습니다. 현재 국내에 OpenGL에 관한 열기가 확산되면서 여러가지 책이 나오고 있지만, 아직 이에 관한 정보는 미흡한 편이고, 실제적으로 작성하는데 커다란 도움이 되지 못하고 있습니다. 그래서 이 도움말을 만들기 위하여 인터넷상에서 얻어낸 외국의 자료를 번역하여 부족한 감을 채워볼까 하였습니다. 비록 부족한 부분이 있지만, 하나하나 채워가면서 배워나갔으면 합니다.

저희가 이번에 작성해야 할 프로그램은 일종의 그래픽 툴로써 기존에 GDI로 작성하던 것을 OpenGL을 통하여 만드는 것입니다. 점찍기, 선그리기, 도형그리기 등 간단한 그래픽 작업부터 시작하여 image에 대한 몇가지 작업을 제공하게 됩니다.

프로그래밍 원종성(92), 이근호(92), 구민철(92), 박종성(95)
번 역 조용국(92), 김용호(92), 최이곤(93), 박현선(96), 임정미(96)
도움말/매뉴얼 제작 이명학(92)


glAccum

 glAccum.3gl

Name

glAccum - 픽셀 값을 만들기 위해 Accumlater 버퍼에서 작업을 한다.

헤더파일 : <GL/gl.h>

C Specification

void glAccum( GLenum op,
GLfloat value )

Parameters

opGLenum : 적용할 Accumultion 함수. 유효한 함수는 다음과 같다.
GL_ACCUM : Accumultion 버퍼에 스케일된 컬러 버퍼 값을 추가한다.
GL_LOAD : Accumultion 버퍼에 스케일된 컬러 버퍼값을 읽어들이고 이전 값이 무엇이든간에 대치를 한다.
GL_ADD : 어큐물레이션 버퍼에 컨스턴트 컬러 버퍼를 추가한다.
GL_MULT : 컨스턴트 컬러(필터링 효과)로써 Accumultion 버퍼에 컬러 값을 곱한다.

Description

이 함수는 Accumultion 버퍼에서 작업을 한다. GL_RETURN을 제외하고는 컬러 값은 value 매개변수에 의해서 스테일 되고 추가되거나 또는 Accumulation 버퍼에 저장된다. GL_RETURN에 대해서 Accumultion 버퍼의 컬러 값은 value 매개변수에 의해서 스케일이 되고 현재 컬러 버퍼에 저장된다.

변환값 : 없음


glBegin

 glBegin.3gl

Name

glBegin - 하나 이상의 프리미티브를 정의하는 한 그룹의 정점의 시작을 나타내기 위하여 사용되었다.

헤더파일 : <gl.h>

C Specification

void glBegin(GLenum mode )

Parameters

mode GLeunum : 이 값은 구축되어질 프리미티브를 지정한다. 그것은 아래 표에 값중 하나
모드 | 프리미티브 형식
GL_POINTS | 지정된 꼭지점은 각각 하나의 포인트를 만들기 위하여 사용된다.
GL_LINES | 지정된 꼭지점은 라인 세그먼트를 만들기 위하여 사용된다. 모든 두 개의 꼭지점은 하나나 분리된 라인 세그먼트를 지정한다. 다수의 꼭지점이 홀수이면, 마지막 하나는 무시된다.
GL_LINE_STRIP | 지정된 꼭지점은 라인 스트립을 만들기 위하여 사용된다. 처음 RHr지점 다음에, 각각의 다음 꼭지점은 라인이 확장된 다음 포인트를 지정한다.
GL_LINE_LOOP | 마지막의 라인 세그먼트가 지정된 마지막과 첫 번째 꼭지점 사이에서 그려진 것을 제외하고 GL_LINE_STRIP으로서 행동한다. 이것은 일반적으로 GL_POLYGON 사용에 관해서 규칙을 위반할지도 모르는 닫혀진 지역을 그리기 위하여 사용된다.
GL_TRIANGLES | 지정된 꼭지점은 삼각형을 만들기 위하여 사용된다. 모든 세 개의 꼭지점은 새로운 삼각형을 지정한다. 다수의 꼭지점은 심지어 3으로 나눌 수 없다면, 여분의 꼭지점은 무시된다.
GL_TRIANGLE_STRIP | 지정된 꼭지점은 삼각형의 스트립을 만들기 위하여 사용된다. 처음 세 개의 꼭지점이 지정된 후, 각각의 다음 꼭지점은 다음 삼각형을 만들기 위하여 앞의 두 개와 사용된다. 각 세쌍의 꼭지점은 자동으로 삼각형의 일관된 와인딩을 확인하기 위하여 재정렬된다.
GL_TRIANGLE_FAN | 지정된 꼭지점은 삼각형 팬을 만들기 위하여 사용된다. 첫 번째 꼭지점은 원점으로서 간주된다. 그리고 세 번째다음의 각 꼭지점은 그 다음과 원점으로 혼합된다. 삼각형의 수는 이러한 방법으로 팬(fan) 될 지도 모른다.
GL_QUADS | 네 꼭지점의 각 세트는 4변형을 만들기 위하여 사용된다. 꼭지점의 수는 4로 나눌 수 없다면 나머지는 무시된다.
GL_QUAD_STRIP | 지정된 꼭지점은 4 변형의 스트립을 만들기 위하여 사용된다. 하나의 4변형은 첫 번째 쌍 다음에 꼭지점의 각 쌍에 대하여 정의된다. GL_QUADS에 대하여 정돈하는 꼭지점과는 달리, 각 쌍의 꼭지점은 일관된 와인딩을 확인하기 위하여 지정된 역순으로 사용된다.
GL_POLYGON | 지정된 꼭지점은 볼록 다각형을 만들기 위하여 사용된다. 다각형 모서리는 교차되지 않아야 한다. 마지막 꼭지점은 다각형이 닫혀져 있다는 것을 보증하기 위하여 첫 번째 꼭지점에 자동으로 연결된다.
일 것이다.

Description

이 함수는 OpenGL 프리미티브의 정점을 제한하지 않기 위하여 glEnd와의 연결에 사용된다. 다중 정점 세트는 동일한 프리미티브 형식에 대하여 있는 한, 하나의 glBegin/glEnd 쌍내로 포함될 것이다. 그 외의 셋팅은 다음의 정점에 영향을 주는 부가적인 OpenGL 명령으로 또한 만들어 질 것이다. 단지, 이러한 OpenGL 함수가 glBegin/glEnd 연속내로 불리워질 것이다. 즉, glVertex, glColor, glIndex, glNormal, glEvalCoord, glCallList, glCallLists, glTexCoord, glEdgeFlag, 그리고 glMaterial이 있다.

반환값 : 없음


glBlendFunc

 glBlendFunc.3gl

Name

glBlendFunc - 컬러 블렌딩 함수를 설정한다.

헤더 파일 : <GL/gl.h>

C Specification

void glBlendFunc( GLenum sfactor, GLenum dfactor )

Parameters

sfactor GLenum : 소스 컬러의 블렌딩 함수
아홉가지 상징적인 상수가 일반적으로 인정된다. :
GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA,
GL_ONE_MINUS_DST_ALPHA, and GL_SRC_ALPHA_SATURATE.
dfactor GLenum : 대상 필셀컬러의 블렌딩 함수
여덟가지 상징적인 상수가 일반적으로 인정된다. :
GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, and
GL_ONE_MINUS_DST_ALPHA.

Description

함수는 컬러 블렌딩을 위해 소스와 대상 블렌딩 인자를 설정한다. 컬러 블렌딩을 사용하려면 glEnable(GL_BLEND) 함수를 호출한다. 블렌딩은 RGBA 드로잉 컨텍스트에서만 활용할 수 있다. 블렌딩을 위한 기본 설정값은 glBlendFunc(GL_ONE, GL_ZERO) 이다.
함 수 | 블렌드 요소
GL_ONE | <?> 원본 컬러 사용
GL_ZERO | 원본 컬러 = 0,0,0,0
GL_DST_COLOR | 원본 컬러는 대상컬러 필셀 컬러와 곱한다
GL_ONE_MINUS_DST_COLOR | 원본 컬러는 (1,1,1,1- 대상 컬러)와 곱한다.
GL_SRC_ALPHA | 원본 컬러는 소스 알파와 곱한다.
GL_ONE_MINUS_SRC_ALPHA | 원본 컬러는 (1, - 원본 알파)와 곱한다.
GL_DST_ALPHA | 원본 칼라는 대상 알파 코드와 곱한다. 마이크로 소프드사 OpenGL은 지원하지 않는다.
GL_ONE_MINUS_DST_ALPHA | 원본 컬러는 (1-대상 알파)와 곱한다. 마이크로 소프드사 OpenGL은 지원하지 않는다.
GL_SRC_ALPHA_SATURATE | 원본 컬러는 최소의 원본과 (1-대상알파)와 곱한다. 마이크로 소프드사 OpenGL은 지원하지 않는다.
*** 원본 컬러에 대한 블렌딩 함수

*** 대상 컬러에 대한 블렌딩 함수
함수 | 블렌딩 요소
GL_ONE | <?> 대상 컬러 사용
GL_ZERO | 대상 컬러 = 0,0,0,0
GL_ONE_MINUS_SRC_COLOR | 대상 컬러는 (1,1,1,1-원본칼라)와 곱한다.
GL_SRC_ALPHA | 대상 컬러는 소스 알파와 곱한다.
GL_ONE_MINUS_SRC_ALPHA | 대상 컬러는 (1-원본칼라)와 곱한다.
GL_DST_COLOR | 대상 칼라는 대상 알파 코드와 곱한다. 마이크로 소프드사 OpenGL은 지원하지 않는다.
GL_ONE_MINUS_DST_ALPHA | 대상 컬러는 (1-대상 알파)와 곱한다. 마이크로 소프드사 OpenGL은 지원하지 않는다.
GL_SRC_ALPHA_SATURATE | 대상 컬러는 최소의 원본과 (1-대상알파)와 곱한다. 마이크로 소프드사 OpenGL은 지원하지 않는다.

반환값 : 없음


glCallList

 glCallList.3gl

Name

glCallList - 디스플레이 리스트를 실행한다.

헤더파일 : <gl.h>

C Specification

void glCallList( GLuint list )

Parameters

list GLuint : 실행되어질 디스플레이 리스트를 확인한다.

Description

리스트와 동일한 디스플레이 리스트를 실행한다. OpenGL State Machine은 이 함수가 호출된 후에는 리스토어되지 않는다. 그래서 그것은 미리 glPushMatrix를 나중에 glPopMatrix를 호출하는 것은 좋을 것이다. glCallList를 호출한다. GL_MAX_LIST_NESTING 인자를 가지는 히Get 함수는 허용 가능한 것들의 최대 수를 반환한다.(마이크로소프트 윈도우에 대하여 이 값은 64이다.)

반환값 : 없음


glCallLists

 glCallLists.3gl

Name
glCallLists - 디스플레이 리스트의 목록을 실행한다.

헤더파일 : <gl.h>

C Specification

void glCallLists( GLsizei n,
GLenum type,
const GLvoid *lists )

Parameters

n GLsizei : 디스플레이 리스트의 배열에서 요소의 수
type GLenum : *lists에서 저장된 배열의 데이터형을 지정한다. 이것은 다음의 값 중에서 하나일 수 있다. GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT,GL_UNSIGNED_INT, GL_FLOAT, GL_2_BYTES, GL_3_BYTES, 그리고 GL_4_BYTES 이다.
*lists GLvoid : typeso에 지정된 형식의 배열 요소. 데이터 형식은 수많은 데이터 형식이 사용되도록 하게 하는 것이 void이다.
Description
이 함수는 연속적인 *lists 배열에서 나열된 디스플레이 리스트를 호출한다. 이 배열은 거의 데이터 형식일 수 있다. 결과는 변환되거나 디스플레이 리스트의 실제 인텍스를 결정하기 위하여 가장 근접한 정수값으로 고정된다. 선택적으로 리스트 값은 glListBase 함수에 의해 지정된 값에 의한 오프셋일 수 있다.

반환값 : 없음


glClearColor

 glClearColor.3gl

Name

glClearColor - 컬러 버퍼를 제거하기 위한 컬러와 알파 값을 정한다.

헤더파일 : <gl.h>

C Specification

void glClearColor( GLclampf red,
GLclampf green,
GLclampf blue,
GLclampf alpha )

Parameters

red GLclampf : fill 값의 red 구성요소
green GLclampf : fill 값의 green 구성요소
blue GLclampf : fill 값의 blue 구성요소
alpha GLclampf : fill 값의 alpha 구성요소

Description

red, green, blue 그리고 alpha 버퍼를 제거할 때 사용되어질 fill 값을 정한다.
지정된 값은 [0.0f, 1.0f] 범위까지 쌓여진다.

반환값 : 없음


glClearDepth

 glClearDepth.3gl

Name

glClearDepth - depth 버퍼에 대한 depth 값을 지정한다.

헤더파일 : <GL/gl.h>

C Specification

void glClearDepth( GLclampd depth )

Parameters

depthGLclampd : depth 버퍼에 대한 클리어 값

Description

이 함수는 glClear(GL_COLOR_BUFFER_BIT) 함수로 컬러 버퍼를 클리어할 때 사용되는 depth값을 설정한다.

반환값 : 없음


glClearIndex

 glClearIndex.3gl

Name

glClearIndex - 컬러 인덱스 버퍼에 대한 제거 값을 정한다.

헤더파일 : <gl.h>

C Specification

void glClearIndex( GLfloat c )

Parameters

color GLfloat : 컬러 인덱스 버퍼가 glClear로 제거될 때 사용할 값. 기본값은 0이다.

Description

이 함수는 컬러 버퍼를 제거하기 위하여 컬러 인덱스 모드에서 사용할 컬러 인덱스를 지정한다. 이것은 color 매개변수에 의해 지정된 인덱스에서의 컬러로 백그라운드 컬러를 정하고 윈도우를 제거하는 효과를 가진다.

반환값 : 없음


glClearStencil

 glClearStencil.3gl

Name

glClearStencil - 스탠실 버퍼를 위한 스탠실 값을 지정한다.

헤더파일 : <GL/gl.h>

C Specification

void glClearStencil( GLint s )

Parameters

GLint s 스탠실 버퍼를 위한 클리어 값

Description

이 함수는 glClear(GL_STENCIL_BUFFER_BIT)함수로 스탠실 jvj를 클리어할 때 사용되는 스탠실 값을 설정한다.

반환값 : 없음


glColor

 glColor.3gl

Name

glColor3b, glColor3d, glColor3f, glColor3i, glColor3s, glColor3ub,
glColor3ui, glColor3us, glColor4b, glColor4d, glColor4f, glColor4i,
glColor4s, glColor4ub, glColor4ui, glColor4us, glColor3bv, glColor3dv,
glColor3fv, glColor3iv, glColor3sv, glColor3ubv, glColor3uiv, glColor3usv,
glColor4bv, glColor4dv, glColor4fv, glColor4iv, glColor4sv, glColor4ubv,
glColor4uiv, glColor4usv - RGBA 컬러 모드에서 현재 컬러를 정한다.

헤더파일 : <gl.h>

C Specification

void glColor3b( GLbyte red,
GLbyte green,
GLbyte blue )
void glColor3d( GLdouble red,
GLdouble green,
GLdouble blue )
void glColor3f( GLfloat red,
GLfloat green,
GLfloat blue )
void glColor3i( GLint red,
GLint green,
GLint blue )
void glColor3s( GLshort red,
GLshort green,
GLshort blue )
void glColor3ub( GLubyte red,
GLubyte green,
GLubyte blue )
void glColor3ui( GLuint red,
GLuint green,
GLuint blue )
void glColor3us( GLushort red,
GLushort green,
GLushort blue )
void glColor4b( GLbyte red,
GLbyte green,
GLbyte blue,
GLbyte alpha )
void glColor4d( GLdouble red,
GLdouble green,
GLdouble blue,
GLdouble alpha )
void glColor4f( GLfloat red,
GLfloat green,
GLfloat blue,
GLfloat alpha )
void glColor4i( GLint red,
GLint green,
GLint blue,
GLint alpha )
void glColor4s( GLshort red,
GLshort green,
GLshort blue,
GLshort alpha )
void glColor4ub( GLubyte red,
GLubyte green,
GLubyte blue,
GLubyte alpha )
void glColor4ui( GLuint red,
GLuint green,
GLuint blue,
GLuint alpha )
void glColor4us( GLushort red,
GLushort green,
GLushort blue,
GLushort alpha )

Parameters

red 컬러의 red 구성요소를 지정한다.
green 컬러의 green 구성요소를 지정한다.
blue 컬러의 blue 구성요소를 지정한다.
alpha 컬러의 alpha 구성요소를 지정한다. 네가지의 인자를 가지는 변형에만 사용된다.

C Specification

void glColor3bv( const GLbyte *v )
void glColor3dv( const GLdouble *v )
void glColor3fv( const GLfloat *v )
void glColor3iv( const GLint *v )
void glColor3sv( const GLshort *v )
void glColor3ubv( const GLubyte *v )
void glColor3uiv( const GLuint *v )
void glColor3usv( const GLushort *v )
void glColor4bv( const GLbyte *v )
void glColor4dv( const GLdouble *v )
void glColor4fv( const GLfloat *v )
void glColor4iv( const GLint *v )
void glColor4sv( const GLshort *v )
void glColor4ubv( const GLubyte *v )
void glColor4uiv( const GLuint *v )
void glColor4usv( const GLushort *v )

Parameters

*v red, green, blue 그리고 가능하다면 alpha 값으로의 포인터

Description

이 함수는 컬러의 불리된 red, green, 그리고 blue 구성요소를 지정하여 현재 컬러를 정한다. 일부 함수는 또한 알파 구성요소를 허용한다. 각 구성요소는 (0.0)에서 전체 (1.0)까지의 범위를 나타낸다. v 접미사를 가지는 함수는 구성요소를 지정하는 배열로의 포인터를 취한다. 배열에서 각 요소는 동일한 형식이여야 한다. 알파 구성요소가 지정되지 않았을 때, 1.0로 정한다. 부동소수점 형식이 아닌 것이 지정되었을 때, 0에서 가장 큰 값까지의 범위는 0.0에서 1.0의 범위의 부동 소수점에 맵된 형식에 의해 표시된다.

반환값 : 없음


glColorMask

 glColorMask.3gl

Name

glColorMask - 컬러 버퍼에서 컬러 구성요소의 수정을 가능하게 하거나 가능하지 못하게 한다.

헤더파일 : <gl.h>

C Specification

void glColorMask( GLboolean red,
GLboolean green,
GLboolean blue,
GLboolean alpha )

Parameters

bRed GLboolean : red 구성요소가 수정되어야 될 것이지를 지정한다.
bGreen GLboolean : green 구성요소가 수정되어야 될 것인지를 지정한다.
bBlue GLboolean : blue 구성요소가 수정되어야 될 것인지를 지정한다.
bAlpha GLboolean : alpha 구성요소가 수정되어야 될 것인지를 지정한다.

Description

이 함수는 사용하지 못하거나 사용할 컬러 버퍼에서 각각의 컬러 구성요소에 변화를 허용한다.(모든 것이 기본적으로 가능하다.) 예를 들어, GL_FALSE로의 bAlpha 인자를 설정하는 것은 알파 컬러 구성요소에 변경을 허용하지 않는다.

반환값 : 없음


glColorMaterial

 glColorMaterial.3gl

Name

glColorMaterial - glColor에 의해 정해졌듯이 현재 컬러를 알아내기 위하여 물질 컬러를 허용한다.

헤더파일 : <gl.h>

C Specification

void glColorMaterial( GLenum face,
GLenum mode )

Parameters

faceGLenum : 앞(GL_FRONT), 뒤(GL_BACK) 또는 양쪽(GL_FRONT_AND_BACK)이 현재의 컬러를 따라야 하는지를 지정한다.
mode GLenum : 물질 특성이 현재 컬러를 따르고 있는지를 지정한다. 이것은 GL_EMISSION, GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, 또는 GL_AMBIENT_AND_DIFFUSE 일 수 있다.

Description

이 함수는 직접 glMaterial을 호출하지 않고 정해질 물질 특성을 허용한다. 이 함수를 사용하여, 어떤 물질 특성은 glColor에 의해 지정되었듯이 현재를 컬러를 따르도록 정해질 수 있다. 기본적으로 컬러 추적은 사용가능하지 못하다. 그것을 사용가능하게 하려면, 또한 glEnable(GL_COLOR_MATERIAL)을 호출해야 한다. 컬러 추적을 다시 사용하지 못하게 하려면 glDisable(GL_COLOR_MATERIAL)을 호출한다.
반환값 : 없음


glCopyPixels

 glCopyPixels.3gl

Name

glCopyPixels - 프레임 버퍼에서 픽셀의 사각형 블록을 복사한다.

헤더파일 : <gl.h>

C Specification

void glCopyPixels( GLint x,
GLint y,
GLsizei width,
GLsizei height,
GLenum type )

Parameters

x GLint : 맨 아래 왼쪽 코너의 수평 좌표
y GLint : 맨 아래 왼쪽 코너의 수직 좌표
width GLsizei : 픽셀에서 이미지의 폭
height GLsizei : 픽셀에서 이미지의 높이. 반대라면 이미지는 위에서 아래로 그려진다. 기본은 이미지가 아래서 위로 그려진다.
type GLenum : 복사되어질 픽셀 값의 형식. 유효한 형식은 다음과 값다.
GL_COLORCloor 버퍼값
GL_DEPTHDepth 버퍼값
GL_STENCILStencil 버퍼값

Description

이 함수는 픽셀 데이터를 프레임버퍼내의 표시된 영역에서 현재의 래스터 위치로 복사한다. 현재의 래스터 위치를 정하기 위하여 glRasterPos를 사용한다. 현재의 래스터 위치가 유효하지 않다면, 픽셀 데이터는 복사되지 않는다. glPixelMap, glPixelTransfer, 그리고 glPixelZoom으로의 호출은 glCopyPixels의 작동에 영향을 준다.

반환값 : 없음


glCullFace

 glCullFace.3gl

Name

glCullFace - 폴리곤의 앞과 뒤가 드로잉에서 제거되어야 하는지를 지정한다.

헤더파일 : <gl.h>

C Specification

void glCullFace( GLenum mode )

Parameters

mode GLeunum : 컬(cull)되어야 할 폴리곤의 정면을 지정한다. 아마도 GL_FRONT나 GL_BACK일 것이다.

Description

이 함수는 조명, 음영, 그리고 컬러 계산 그리고 폴리곤의 앞이나 뒤에서의 작동을 못하게 한다. 폴리곤의 뒷 면이 객체의 회전이나 변환에 관계없이 결코 볼 수 없을 것이기 때문에 불필요한 렌더링 계산을 제거한다. 컬링은 GL_CULL_FACE 매개변수로 glEnable과 glDisable을 호출하여 사용가능하고 사용못하게 한다. 폴리곤의 앞과 뒤는 glFrontFace()의 사용과 정점이 지정한 순서에 의해 정의된다. (시계방향인 반시계방향의 감기)

반환값 : 없음


glDeleteLists

 glDeleteLists.3gl

Name

glDeleteLists - 디스플레이 리스트의 연속적인 범위를 삭제한다.

헤더파일 : <gl.h>

C Specification

void glDeleteLists( GLuint list,
GLsizei range )

Parameters

list GLuint : 삭제할 첫 번째 디스플레이 리스트의 정수 이름
range GLsizei : 초기에 지정된 리스트에 따라서 삭제되어질 디스플레이 리스트의 수

Description

이 함수는 디스플레이 리스트의 범위를 삭제한다. 범위는 처음 값에서 시작하고 range에 의해 지정되었듯이 다수의 삭제된 리스트가 완료될 때까지 진행된다. 사용되지 않은 디스플레이 리스트를 삭제하는 것은 상당히 많은 메모리를 절약할 수 있다. 이런 지정된 범위에서 사용하지 않은 디스플레이 리스트는 무시되고 에러가 발생시키지 않는다.

반환값 : 없음


glDepthFunc

 glDepthFunc.3gl

Name

glDepthFunc - depth 검사 함수를 설정한다.

헤더 파일 : <GL/gl.h>

C Specification

void glDepthFunc( GLenum func )

Parameters

func 사용할 depth 버퍼 비교 함수, 유효한 함수는 다음과 같다.
GL_NEVER 항상 거짓
GL_LESS 만일 source Z < drpth Z 라면 참
GL_EQUAL 만일 source Z = drpth Z 라면 참
GL_LEQUAL 만일 source Z <= drpth Z 라면 참
GL_GREATER 만일 source Z > drpth Z 라면 참
GL_NOTEQUAL 만일 source Z != drpth Z 라면 참
GL_GEQUAL 만일 source Z >= drpth Z 라면 참
GL_ALWAYS 항상 참

Description

이 함수는 숨겨진 표면 제거를 위하여 depth 버퍼 검사 함수를 설정한다.

반환값 : 없음


glDepthRange

 glDepthRange.3gl

Name

glDepthRange - depth 버퍼에 depth 값의 범위를 선정한다.

C Specification

void glDepthRange( GLclampd near,
GLclampd far )
Parameters
near near depth 값
far far depth 값

Description

이 함수는 숨겨진 표면 제거를 위해 depth비교를 위해서 사용된 depth 버퍼 값의 범위를 설정한다. near 은 far보다 훨씬 크다.

반환값 : 없음.


glDrawBuffer

 glDrawBuffer.3gl

Name

glDrawBuffer - 드로잉을 위한 컬러 버퍼를 지정한다.

헤더파일 : <GL/gl.h>

C Specification

void glDrawBuffer( GLenum mode )

Parameters

modeGLenum : 드로잉 작업을 할려는 컬러 버퍼를 선택한다. 예를 들면 드로잉을 위해 back 컬러 버퍼를 선택한다.
GL_NONE 어떠한 컬러 버퍼에도 드로잉을 할 수 없다.
GL_FRONT front 컬러 버퍼에 드로잉을 한다.
GL_BACK back 컬러 버퍼에 드로잉을 한다.(이중 버퍼화된 컨텍스트만)
GL_FRONT_AND_BACK front와 back 버퍼에 드로잉을 한다.(이중 버퍼화된 컨텍스트만)
GL_LEFT left-eye 컬러 버퍼에 드로잉을 한다.(stereo 컨텍스트만, 이중 버퍼시 front와 back를 선택한다.)
GL_RIGHT right-eye 컬러 버퍼에 드로잉을 한다.(stereo 컨텍스트만, 이중 버퍼시 front와 back를 선택한다.)
GL_BACK_LEFT left-eye를 위해 back 컬러 버퍼에 드로잉을 한다.(stereo, 이중버퍼 컨텍스트만 )
GL_BACK_RIGHT right-eye를 위해 back 컬러 버퍼에 드로잉을 한다.(stereo, 이중버퍼 컨텍스트만 )
GL_FRONT_LEFT left-eye를 위해 front 컬러 버퍼에 드로잉을 한다.(stereo, 이중버퍼 컨텍스트만 )
GL_FRONT_RIGHT right-eye를 위해 front 컬러 버퍼에 드로잉을 한다.(stereo, 이중버퍼 컨텍스트만 )

Description

이 함수는 연속적인 드로잉 작업을 위해 컬러 버퍼를 선택한다. 일반적으로 front, 또는 back 버퍼를 이중 버퍼와된 드로잉 컨텍스트를 선택할 때 호출한다.

변환값 : 없음


glDrawPixels

 glDrawPixels.3gl

Name

glDrawPixels - 프레임 버퍼에서 픽셀의 사각형 블록을 그린다.

헤더파일 : <GL/gl.h>

C Specification

void glDrawPixels( GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
const GLvoid *pixels )

Parameters

width GLsizei : 픽셀에서 이미지의 폭
hight GLsizei : 픽셀에서 이미지의 높이. 반대라면 이미지는 위에서 아래로 그려진다. 기본은 이미지가 아래서 위로 그려진다.
format GLenum : 그려질 픽셀의 컬러 스페이스. 유효한 포맷은 다음과 같다.
GL_COLOR_INDEXColor 인덱스 픽셀
GL_STENCIL_INDEXStencil 버퍼값
GL_DEPTH_COMPONENTDepth 버퍼값
GL_RGBA RGBA픽셀(4구성요소)
GL_RED Red 픽셀
GL_GREEN Green 픽셀
GL_BLUE Blue 픽셀
GL_ALPHA Alpha 픽셀
GL_RGB RGB 픽셀(3 구성요소)
GL_LUMINANCE Grayscale 픽셀
GL_LUMINANCE_ALPHA Grayscale+alpha 픽셀(2구성요소)
type GLenum : 그려질 픽셀의 데이터 형식. 유효한 형식은 다음과 같다.
GL_UNSIGNED_BYTE
GL_BYTE, GL_BITMAP
GL_UNSIGNED_SHORT
GL_SHORT
GL_UNSIGNED_INT
GL_INT
GL_FLOAT(부동 소수점값)
pixels GLvoid *: 이미지에 대한 픽셍 데이터로의 포인터

Description

이 함수는 픽셀 데이터를 프레임버퍼내의 표시된 영역에서 현재의 래스터 위치로 복사한다. 현재의 래스터 위치를 정하기 위하여 glRasterPos를 사용한다. 현재의 래스터 위치가 유효하지 않다면, 픽셀 데이터는 복사되지 않는다. format와 type 인자외에 여러개의 다른 매개변수는 메모리에서 픽셀 데이터의 엔코딩을 정의하고 프레임 버퍼내에 위치하기 전에 픽셀 데이터의 프로세싱을 컨트롤 한다.

반환값 : 없음


glEdgeFlag

 glEdgeFlag.3gl

Name

glEdgeFlag, glEdgeFlagv - 경계가 있거나 경계가 없는 모서리로서 폴리곤 모서리를 플래그한다. 이것은 내부의 표면 선이 볼 수 있는지를 결정하기 위하여 사용될 수 있다.

헤더파일 : <gl.h>

C Specification

void glEdgeFlag( GLboolean flag )

Parameters

flagGLboolean : 이 값으로 모서리 플래그를 참이나 거짓으로 정한다.
*flag : const GLboolean : 모서리 플래그에 대하여 사용된 값으로의 포인터

C Specification

void glEdgeFlagv( const GLboolean *flag )

Description

두 개 이상의 폴리곤이 더 큰 영역을 구성하기 위하여 결합될 때, 외부의 모서리는 새로 구성된 영역의 경계를 정의한다. 이 함수는 경계가 없는 것으로 모서리 내부를 플래그한다. 이것은 단지 폴리곤 모드가 GL_LINE이나 GL_POINT로 정해질 때만 사용된다.

반환값 : 없음


glEnable

 glEnable.3gl

Name

glEnable, glDisable - OpenGL 기능을 사용 가능/불가능 하게 한다.

헤더파일 : <GL/gl.h>

C Specification

void glEnable( GLenum cap )
void glDisable( GLenum cap )

Parameters

featureGLenum : 사용 가능하거나 불가능한 기능
GL_AUTO_NORMAL glMap 매개 변수로부터 자동으로 라이트닝 법선을 생성한다.
GL_COLOR_MATERAL 현재 드로잉 컬러러부터 materal 컬러를 할당한다.
GL_LIGHTING 라이트닝 계산을 가능하게 한다.
GL_LIGHTx 라이트 x를 가능하게 한다.
GL_MAP1_NORMAL 1D 좌표로부터 라이트닝 법선의 맵핑을 가능하게 한다.
GL_MAP2_NORMAL 2D 좌표로부터 라이트닝 법선의 맵핑을 가능하게 한다.
GL_NORMALIZE 계산을 위해서 이전에 모든 라이트닝 법선을 노멀라이즈한다.
GL_MAP1_TEXTURE_COORD_1 s 텍스트 좌표는 glEvalPoint1, glEvalMesh1,
glEvalCoord1을 호출하여 생성된다.
GL_MAP1_TEXTURE_COORD_2 s 텍스트 좌표와 t 좌표는 glEvalPoint1,
glEvalMesh1, glEvalCoord1을 호출하여 생성된다.
GL_MAP1_TEXTURE_COORD_3 s,t,r 텍스트 좌표는 glEvalPoint1, glEvalMesh1,
glEvalCoord1을 호출하여 생성된다.
GL_MAP1_TEXTURE_COORD_4 s,t,r,q 텍스트 좌표는 glEvalPoint1, glEvalMesh1,
glEvalCoord1을 호출하여 생성된다.
GL_MAP2_TEXTURE_COORD_1 s 텍스트 좌표는 glEvalPoint2,
glEvalMesh2, glEvalCoord2을 호출하여 생성된다.
GL_MAP2_TEXTURE_COORD_2 s 텍스트 좌표와 t 좌표는 glEvalPoint2,
glEvalMesh2, glEvalCoord2을 호출하여 생성된다.
GL_MAP2_TEXTURE_COORD_3 s,t,r 텍스트 좌표는 glEvalPoint2,
glEvalMesh2, glEvalCoord2을 호출하여 생성된다.
GL_MAP2_TEXTURE_COORD_4 s,t,r,q 텍스트 좌표는 glEvalPoint2,
glEvalMesh2, glEvalCoord2을 호출하여 생성된다.
GL_TEXTURE_1D 만일 2D 텍스처링이 가능하다면,1D 텍스처링이 가능하다.
GL_TEXTURE_2D 2D 텍스처링이 가능하다.
GL_TEXTURE_GEN_Q glVertex 호출로부터 q 텍스처 좌표를 자동으로 생성한다.
GL_TEXTURE_GEN_R glVertex 호출로부터 r 텍스처 좌표를 자동으로 생성한다.
GL_TEXTURE_GEN_S glVertex 호출로부터 s 텍스처 좌표를 자동으로 생성한다.
GL_TEXTURE_GEN_T glVertex 호출로부터 t 텍스처 좌표를 자동으로 생성한다.
GL_STENCIL_TEST 스탠실 버퍼 비교를 가능하게 한다.
GL_DEPTH_TEST depth 버퍼 비교를 가능하게 한다.
GL_ALPHA_TEST 알파값 검사를 한다.
GL_BLEND 픽셀 블렌딩 작업을 수행한다.
GL_CLIP_PLANEx 지정된 클립핑 플레인 외부에 드로잉 작업을 클립한다.
GL_CULL_FACE 앞 뒤 정면에 다각형을 컬링한다.
GL_DITHER 컬러 값을 디더링한다.
GL_LINE_SMOOTH 안티 알리아스 선
GL_LINE_STIPPLE 선에 비트 패턴을 적용한다.
GL_LOGIC_OP 드로잉시 픽셀에 논리 작업을 한다.
GL_POINT_SMOOTH 안티 알리아스 점
GL_POLYGON_SMOOTH 안티 알리아스 다각형
GL_POLYGON_STIPPLE 다각형에 비트 패턴을 적용한다.
GL_SCISSOR_TEST glScissor 영역 외부에 드로잉을 클립한다. glScissor 영역 외부에 드로잉을 클립한다.

Description

glDisable는 OpenGL 드로잉 기능을 사용 불가능하게 하고, glEnable는 OpenGL 드로잉 기능을 사용 가능하게 한다.

반환값 : 없음


glEvalCoord

 glEvalCoord.3gl

Name

glEvalCoord1d, glEvalCoord1f, glEvalCoord2d, glEvalCoord2f, glEvalCoord1dv, glEvalCoord1fv, glEvalCoord2dv, glEvalCoord2fv - 이전에 가능했던 1D 와 2D 맵을 평가한다.
헤더 파일 : <gl.h>

C Specification

void glEvalCoord1d( GLdouble u )
void glEvalCoord1f( GLfloat u )
void glEvalCoord2d( GLdouble u, GLdouble v )
void glEvalCoord2f( GLfloat u, GLfloat v )
void glEvalCoord1dv( const GLdouble *u )
void glEvalCoord1fv( const GLfloat *u )
void glEvalCoord2dv( const GLdouble *u )
void glEvalCoord2fv( const GLfloat *u )

Parameters

u, v : 이들 매개변수는 곡선과 표면간에 평가되어진 v 또는 u 파라메트릭한 값을 지정한다.

Description

이 함수는 꼭지점, 컬러, 법선(수직선) 또는 파라메트릭한 u/v 값을 기반으로 한 텍스처
값을 만들기 위해 이전에 가능했던 평가자(glMap로 설정하는)를 사용한다. 데이터와 함수
호출 형태는 glMap1 함수와 glMap2 함수에 의해서 지정된다.

관련정보

glBegin, glColor, glEnable, glEvalMesh, glEvalPoint, glIndex, glMap1, glMap2, glMapGrid, glNormal, glTexCoord, glVertex

반환값 : 없음


glEvalMesh

 glEvalMesh.3gl

Name

glEvalMesh1, glEvalMesh2 - 점과 선의 1D 또는 2D 그리드를 계산한다.

헤더 파일 : <gl.h>

C Specification

void glEvalMesh1( GLenum mode, GLint i1, GLint i2 )
void glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )

Parameters

mode GLdouble : 그물 구조가 점(GL_POINT), 선(GL_LINE) 또는 표면이 채워진 그물구
조(GL_FILL)로 계산되어 지는지를 지정한다.
i1, i2 GLint : u 영역에 대한 첫 번째와 마지막 정수 값을 지정한다.
j1, j2 GLint : v 영역에 대한 첫 번째와 마지막 정수 값을 지정한다.

Description

이 함수는 고 일정한 공간을 가지고 있는 u 와 v 영역 값의 그물 구조를 효율적으로 만
들기 위해 glMapGrid 함수와 함께 사용된다. glEvalMesh 함수는 실제로 그물 구조를 어림
해서 점, 선 세그먼트, 채워진 다각형을 만든다.

반환값 : 없음

관련 정보

glBegin, glEvalCoord, glEvalPoint, glMap1, glMap2, glMapGrid


glEvalPoint

 glEvalPoint.3gl

Name

glEvalPoint1, glEvalPoint2 - 그물 모양에 하나의 점을 평가하고 만든다.

헤더 파일 : <gl.h>

C Specification

void glEvalPoint1( GLint i )
void glEvalPoint2( GLint i, GLint j )

Parameters

i, j GLint : u와 v 영역 파라메트릭한 값을 지정한다.

Description

이 함수는 하나의 점에 영역을 평가하기 위해 glEvalMesh 함수 대신 사용할 수 있다. 평
가는 하나의 프리미티브(GL_POINT)를 만든다. 첫 번째 변화(glEvalPoint1)는 곡선을 위해
사용되고 두 번째 변화(glEvalPoint2)는 표면을 위한 것이다.
반환값 : 없음

관련 정보

glEvalCoord, glEvalMesh, glMap1, glMap2, glMapGrid


glFeedbackBuffer

 glFeedbackBuffer.3gl

Name

glFeedbackBuffer - 피드백 모드를 설정한다.

헤더 파일 : <gl.h>

C Specification

void glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )

Parameters

size GLsizei : *buffer에 할당된 항목의 최대 개수. 만일 피드백에 쓰여진 데이터의 블록에 할당된 많은 공간은 오버플로우가 발생한다. 버퍼에 알맞는 블록의 일부분만 쓰여진다.
type GLenum : 피드백 버퍼에 반환된 꼭지점 데이터의 종류를 지정한다. 각 RHr지점은 피드백 버퍼에 데이터의 블록을 만든다. 다음의 형식의 각각에 대해서, 데이터의 블록은 꼭지점 데이터를 따르는 프리미티브 토큰 확인자를 포함한다. 꼭지점 데이터는 특별히 다른 것을 포함한다.
GL_2D : x와 y 좌표 쌍
GL_3D : x, y, z 좌표 그리고 컬러 데이터. (컬러 인덱스에 대한 하나의 값, RGBA에 대한 4개의 값)
GL_3D_COLOR : z, y, z 좌표, 컬러 데이터(하나 또는 네 개의 값), 그리고 네 개 의 텍스트 좌표.
GL_3D_COLOR_TEXTURE : x, y, z, w 좌표, 컬러 데이터(하나 또는 네 개의 값), 네 개의 텍스트 좌표.
GL_4D_COLOR_TEXTURE : x, y, z, w 좌표, 컬러 데이터(하나 또는 네 개의 값), 네 개의 텍스트 좌표.
buffer GLfloat* : 피드백 데이터가 저장된 버퍼.
형식 | 꼭지점 좌표 | 컬러 테이터 | 텍스쳐 데이터 | 전체값
GL_2D | x, y | N/A | N/A | 2
GL_3D | x, y, z | N/A | N/A | 3
GL_3D_COLOR | x, y, z | C | N/A | 3+C
GL_3D_COLOR_TEXTURE | x, y, z | C | 4 | 7+C
GL_4D_COLOR_TEXTURE | x, y, z, w | C | 4 | 8+C
*** 피드백 버퍼 형식
토큰 | 프리미티브
GL_POINT_TOKEN | 점
GL_LINE_TOKEN | 선
GL_LINE_RESET_TOKEN | 선 스티블(stripple)이 재설정될 때, 선 세그먼트
GL_POLYGON_TOKEN | 다각형
GL_BITMAP_TOKEN | 비트맵
GL_DRAW_PIXEL_TOKEN | 그려진 픽셀 사각형
GL_COPY_PIXEL_TOKEN | 복사된 픽셀 사각형
GL_PASS_THROUGH_TOKEN | 사용자 정의한 메이커
*** 피드백 버퍼 토큰

Description

이 함수는 피드백 버퍼를 만들고 원하는 꼭지점 정보의 형식을 만든다. 피드백은 렌더링 모드이다. OpenGL은 여기서 지정된 버퍼에 꼭지점 데이터를 전송한다. 데이터의 이들 블록은 x, y, z 좌표의 위치를 포함할 수 있다(윈도우 좌표). 컬러 인덱스 모드에 대한 컬러 데이터 또는 RGBA 컬러모드, 그리고 마지막으로 텍스쳐 좌표. 원하는 형식과 양은 type 인자에 의해서 지정된다.
반환값 : 없음

See Also

glBegin, glLineStipple, glPassThrough, glPolygonMode,glRenderMode, glSelectBuffer


glFlush

 glFlush.3gl

Name

glFlush - OpenGL 명령 큐와 버퍼를 가득 채운다.

헤더파일 : <gl.h>

C Specification

void glFlush( void )
Description
OpenGL 명령은 종종 수행 능력을 푀적화하기 위하여 일괄절으로 큐되고 실행된다. 이것은 하드웨어, 드라이버, 그리고 OpenGL 수행에서 다양할 수 있다. glFlush명령은 waiting명령을 실행되게 한다.

반환값 : 없음


glFog

 glFog.3gl

Name

glFogf, glFogi, glFogfv, glFogiv - 포그 매개변수를 설명한다.

헤더 파일 : <GL/gl.h>

C Specification

void glFogf( GLenum pname, GLfloat param )
void glFogi( GLenum pname, GLint param )
void glFogfv( GLenum pname, const GLfloat *params )
void glFogiv( GLenum pname, const GLint *params )

Parameters

pname GLenum : 설정할 매개변수. 유효한 이름은 다음과 같다.
GL_FOG_MODE : 안개 종류, 안개 효과(GL_LINEAR, GL_EXP, GL_EXP2)를 만들기 위해 사용되는 공식을 지정한다.
GL_FOG_DENSITY : 안개의 밀도, 0.0 보다 큰 숫자. 밀도는 GL_EXP와 GL_EXP2 안개 모드를 위해서만 사용된다.
GL_FOG_START : 안개가 적용된 곳에 가장 근접한 거리. 이것은 0.0에서 0.1까지 Z(depth) 값의 변환이다.
GL_FOG_END : 안개가 적용된 곳에서 가장 멀리 떨어진 거리. 이것은 0.0부터 0.1 까지 Z(depth) 값의 변환이다.
GL_FOG_INDEX : 만일 OpenGL 드로잉 컨텍스트가 컬러 인덱스 모드에 있다면 안개를 위해 사용되는 컬러 인덱스이다.
GL_FOG_COLOR : 안개의 컬러, RGBA 컬러로 표현되는 4개의 숫자로 된 배열이여야 한다.

param GLfloat, GLint : 매개변수 값
params GLfloat*, GLint* : 매개 변수 배열을 가르키는 포인터

변환값 : 없음


glFrontFace

 glFrontFace.3gl

Name

glFrontFace - front-과 back-facing 다각형을 정의.

C Specification

void glFrontFace(GLenum mode)

Parameters

mode 는 front-facing 다각형의 방향을 명시합니다. GL_CW와 GL_CCW는 accept 된다. 그 디폴트 값은 GL_CCW 이다.

Description

불투명한 닫혀진 표면으로 전체적으로 구성된 장면에, back-facing polygon은 visible 하지 않다. 이 보이지 않은 다각형을 제거하는 것은 그 영상의 표현의 속력을 높이는 분명한 이익을 가지고 있습니다. back-facing polygons의 제거는 argument GL_CULL_FACE 를 사용하는 glEnable와 glDisable에 의해 가능 할 수도 가능 할 수도 있다.
GlFrontFace는 창 좌표계에 clockwise winding 을 가지는 다각형 또는 창 좌표계에 있는 counterclockwise한 wind는 front-facing이기 위해 취해진다는 것을 명시한다. mode에게 GL_CCW를 건네는 것은 front-facing으로서 counterclockwise한 다각형을 선택합니다
GL_CW는 front-facing으로서 시계바늘 방향의 다각형을 선택한다. 디폴트에 의해, counterclockwise한 다각형은 front-facing이기 위해 취해진다.

Erros

mode 가 accept value가 아니라면 GL_INVALID_ENUM이 생성된다.
glFrontFace이glBegin실행과 glend의 일치된 실행 사이에서 실생된다면
GL_INVALID_OPERATION이 생성된다.

Associated Gets

glGet with argument GL_FRONT_FACE

See also

glCullFace, glLightModel


glFrustum

 glFrustum.3gl

Name

glFrustum - multiply the current matrix by a perspective matrix

C Specification

void glFrustum( GLdouble left,
GLdouble right,
GLdouble bottom,
GLdouble top,
GLdouble near,
GLdouble far,

Parameters

left,right 왼쪽과 오른쪽 수직 clipping planes을 위한 좌표를 명시.
Bottm, top 위와 아래 수평 clipping planes을 위한 좌표를 명시.
Near, far clipping planes의 깊이를 위한 거리를 명시. 항상 positive 해야한다.

Description

GlFrustum은 전망 투영을 생산하는 전망 행렬을 설명합니다. (left, bottom, -near) and (right, top, -near) 는 그 눈이 (0, 0, 0)에서 위치된다고 가정하는 그 윈도우의 왼쪽 하단과 우측 상단 구석으로 도표에 나타내지는 near 클립핑 평면으로 그 점을 명시한다. Far 은 far clipping plane 장소는 명시한다. near and far 모두 positive 해야 한다.
현재의 행렬은 그 현재의 행렬을 교체하는 결과를 가지는 이 행렬에 의해 증가 됩니다. 즉, M은 그 현재의 행렬이고 F는 frustum perspective matrix 이라면 , M은 F와 교체됩니다.
그 현재의 행렬 스택을 세이브하고 회복하기 위해 glPushMatrix와 glPopMatrix를 사용한다.

notes

depth buffer 정밀도는 near과 far로 명시되는 값에의해 영향을 받는다
만약 r=far/near 깊이 버퍼 정밀도의 로그 r 비트는 잃어 버린다.
무한대에 접근하는 r이 0에 접근하기 때문에, Near는 0으로 set되어서는 않된다.

errors

near 나 far 가 not positive 라면. GL_INVALID_VALUE이 생성된다.
glFrustum 이 glBegin 의 실행과 glEnd 의 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성된다.

Associated Gets

glGet with argument GL_MATRIX_MODE
glGet with argument GL_MODELVIEW_MATRIX
glGet with argument GL_PROJECTION_MATRIX
glGet with argument GL_TEXTURE_MATRIX

See Also

glOrtho, glMatrixMode, glMultMatrix, glPushMatrix


glGenLists

 glGenLists.3gl

Name

glGenLists - 비어있는 디스플레이 리스트의 인접하는 집합을 생성

C Specification

GLuint glGenLists ( GLsizei range )

Parameters

range 비어있는 인접하는 디스플레이 리스트의 생성되는 수를 명시합니다.

Description

한 인수를 가지고 있습니다(range). 그것은 연속적으로 비어있는 디스플레이 리스트,
n, n+1, ..., n+range -1로 이름 지어진 range를 만족하는 정수 n을 리턴한다.
range 가 0이라면, 인접하는 range의 어떤 그룹도 사용가능한 이름을 있지
않는다면, 어떤 에러도 생성되고 어떤 디스플레이 리스트도 생성되지 않는다면, 0이 리턴
된다.

Errors

range 가 negative 하다면 GL_INVALID_VALUE이 생성된다.
glGenList가 GlBegin 의실행과 glEnd 의실행사이에서 glGetlist 가실행된다면
GL_INVALID_OPERATION은생성된다.

Associated Gets

glIsList

See Also

glCallList, glCallLists, glDeleteLists


glGetClipPlane

 glGetClipPlane.3gl

Name

glGetClipPlane - 명시된 clipping plane의 계수를 리턴

C Specification

void glGetClipPlane(GLenum plane, GLdouble *equation )

Parameters

plane clipping plane 명시. 실행에 좌우되는clipping plane의 수, 그러나 최소
여섯개의 clipping plane은 support된다. 그들은 0<=i<GL_MAX_CLIP_PLANES
을 만족하는 GL_CLIP_PLANEi로부터의 심볼릭 상수에 의해 증명된다.
equation eye좌표안의 plane 방정식의 계수인 네가지 double-precision값을 리턴.

Description

glGetClipPlane 은 equation 에서 plane 으로 부터의 plane 방정식의 4개의 계수를
리턴한다.

Notes

GL_CLIP_PLANEi = GL_CLIP_PLANE0 + i.
에러가 발생되면 만들어진 equation 의 내용은 바뀌지 않는다.

Errors

plane 이 accepted value가 아니라면 GL_INVALID_ENUM 은 generat된다.
glGetClipPlane 이 glBegin의 실행과 glEnd의 상응하는 실행사이에서 실행된다면
.GL_INVALID_OPERATION 이 generat된다.

See Also

glClipPlane


glGetError

 glGetError.3gl

Name

glGetError - 에러 정보를 리턴한다.

C Specification

GLenum glGetError ( void )

Description

glGetError는 에러 플레그의 값을 리턴한다.각 탐지된 에러는 뉴머릭 코드와 심볼릭
네임으로 assign된다. 에러가 발생 했을 때 그 에러 플레그는 적당한 에러 코드값으로
set된다. glGetError가 call 되고, 그 에러 코드가 리턴되고, 플레그가 GL_NO_ERROR으로
reset될때까지 기록되는 에러는 없다. glGetError가 GL_NO_ERROR를 리턴한다면
glGetError에 last call하거나 GL이 initialized 될 때까지 탐지되는 에러는 없다.
여러 가지 에러 플레그에 의해 분포된 실행이 인증된다.
어떤 single error flag가 기록된 에러를 갖는다면 glGetError가 call될 때 플레그의 값은
리턴되고 플레그는 GL_NO_ERROR 로 reset된다. 다른 한 플레그가 기록된 에러를
갖는다면 glGetError가 리턴되고 임의의 에러 플레그 값이 클리어 된다.
GL_NO_ERROR를 리턴 할 때까지 모든 플레그가 reset된다면 glGetError는 loop안에서
항상 call된다.
일반적으로 정의된 에러는 다음과 같다:
GL_NO_ERROR 기록된 에러가 없다. 심볼릭 상수의 값은 0 으로
guaranteed 된다.
GL_INVALID_ENUM unacceptable value는 열거된 argument로부터 명시된다.
offending command가 무시된다면 에러 플레그가 set 되는 것 보다 side effect가 없다.
GL_INVALID_VALUE numeric argument 는 범위 밖에 있다. 에러 플레그의
set 이외의 side effect를 갖지 않는 offending command는 무시된다.
GL_INVALID_OPERATION 명시된 operation은 현재 상태에서 허용되지
않는다.에러 플레그의 set 이외의 side effect를 갖지 않는 offending command는
무시된다.
GL_STACK_OVERFLOW 이 command stack overflow를 나타낸다.
플레그의 set 이외의 side effect를 갖지 않는 offending command는 무시된다.
GL_STACK_UNDERFLOW 이 command stack underflow를 나타낸다.
플레그의 set 이외의 side effect를 갖지 않는 offending command는 무시된다.
GL_OUT_OF_MEMORY 명령을 실행하기에 충분한 memory가 남겨져
있지 않다.
에러 플레그가 set 되었을 때 , GL operation의 결과는 GL_OUT_OF_MEMORY 가
발생된다면 undefined된다. 모든 경우에서 발생된 에러 command는 무시되고, GL state
나 플레임 버퍼 내용상에 결과를 갖지 않는다. 발생된 command가 하나의 값을 리턴
한다면 0을 리턴 한다. glGetError 자신이 하나의 에러를 발생 한다면 0을 리턴한다.
Errors
glGetError가 glBegin의 실행과 glEnd의 상응하는 실행사이에서 실행된다면
GL_INVALID_OPERATION은 generated된다.


glGetLight

 glGetLight.3gl

Name

glGetLightfv, glGetLightiv - light source parameter 값을 리턴 한다.

C Specification

void glGetLightfv( GLenum light,
GLenum pname,
GLfloat *params )
void glGetLightiv( GLenum light,
GLenum pname,
GLint *params )

Parameters

light light source를 명시 한다. 실행을 좌우하는 가능한 lights의 수,그러나 최소 여덟
개의 lights는 supported된다. 그것들은 0<=i< GL_MAX_LIGHTS를 만족하는
GL_LIGHTi 로 부터의 심볼릭 name에 의해 증명된다.
pname light 에 대하여 light source parameter를 명시 한다.
가능한 심벌들의 이름은
GL_AMBIENT,GL_DIFFUSE, GL_SPECULAR, GL_POSITION,
GL_SPOT_DIRECTION, GL_SPOT_EXPONENT, GL_SPOT_CUTOFF,
GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION , and
GL_QUADRATIC_ATTENUATION.
params 요청된 데이터를 리턴 한다.

Description

glGetLight는 params 안에서 그 값이나, light source의 값을 리턴 한다. light 는 light
의 이름이며 GL_LIGHTi 로 부터의 심볼릭 name이다, for 0<=i<GL_MAX_LIGHTS,
where GL_MAX_LIGHTS 는 an implementation dependent constant(실행 종속 상수)로
8과 같거나 크다. pname light source parameter 10 가지중 하나를 명시한다.
그 parameters 다음과 같다:
GL_AMBIENT params 는 light source의 ambient intensity를 나타내는 네가지
정수나 실수값을 리턴한다.
정수 값은 요청되었을 때 내부 floating-point 표현으로부터 선형적으로 mapped된다.
이것은 대부분의 positive representable 정수 값에 대해 1.0 maps 되고,
대부분의 negative representable정수 값에 대해 -1.0 maps됨을 의미. 내부 값이
[-1,1]범위 밖에 있다면, 그 상응하는 정수 리턴 값은 undefined 된다.
GL_DIFFUSE params 는 light source의 diffuse intensity를 표현하는 네가지
정수나 실수 값을 리턴한다.이것은 대부분의 positive representable
정수 값에 대해 1.0 maps 되고, 대부분의 negative representable정수
값에 대해 -1.0 maps됨을 의미. 내부 값이 [-1,1]범위 밖에
있다면, 그 상응하는 정수 리턴 값은 undefined 된다.
GL_SPECULAR params 는 light source 의 specular intensity를 표현하는 네가지
정수나 실수 값을 리턴 한다.
정수 값은 요청되었을 때 내부 floating-point 표현으로부터
선형적으로 mapped된다, 이것은 대부분의 positive representable
정수 값에 대해 1.0 maps 되고, 대부분의 negative representable정수
값에 대해 -1.0 maps됨을 의미. 내부 값이 [-1,1]범위 밖에
있다면, 그 상응하는 정수 리턴 값은 undefined 된다.
GL_POSITION params 는 light source의 위치를 나타내는 네가지 정수난 실수
값을 리턴한다.
정수 값은 요청되었을 때 가장 가까운 정수값에 내부 실수값을
rounding하는 것에 의해 계산되어 진다. 그 리턴되는 값은 eye
좌표에서 지속 된다. 그것들은 glLight가 call되는 시간에
modelview matrix가 일치하지 않는다면 glLight사용을 명시한 값과
같지 않을 것이다.
GL_SPOT_DIRECTION params 는 light source의 direction을 나타내는 세가지 정수나
실수 값을 리턴 한다.
정수 값은 요청되었을 때 가장 가까운 정수 값에 내부 실수 값을
rounding하는 것에 의해 계산되어 진다. 그 리턴 되는 값은 eye
좌표에서 지속 된다. 그것들은 glLight가 call되는 시간에
modelview matrix가 일치하지 않는다면 glLight사용을 명시한 값과
같지 않을 것이다. spot direction 이 그 lighting equation 안에서
사용되기 전에 normalized(표준화)된다 해도, 그 리턴 되는 값은
normalization 이전에 명시된 값들의 transformed 된 versions이다.
GL_SPOT_EXPONENT params 는 light의 spot exponent를 나타내는 하나의 정수나
실수 값을 리턴 한다. 정수 값은 요청되었을 때 가장 가까운
정수에 내부 실수 표현을 rounding하는 것에 의해 계산되어
진다.
GL_SPOT_CUTOFF params 는 그 light의 spot cutoff angle을 나타내는 하나의
정수나 실수 값을 리턴 한다. 정수 값은 요청되었을 때 가장 가까운
정수에 내부 실수 표현을 rounding하는 것에 의해 계산되어
진다.
GL_CONSTANT_ATTENUATION
params 는 그 light의 constant(not distance related)
attenuation를 나타내는 하나의 정수나 실수 값을 리턴 한다.
정수 값은 요청되었을 때 가장 가까운 정수에 내부 실수 표현을
rounding하는 것에 의해 계산되어진다.
GL_LINEAR_ATTENUATION
params 는 그 light의 linear attenuation(선의 가늘기)를 나타내는
하나의 정수나 실수 값을 나타낸다.
정수 값은 요청되었을 때 가장 가까운 정수에 내부 실수 표현을
rounding하는 것에 의해 계산되어진다.
GL_QUADRATIC_ATTENUATION
params 는 그 light의 quadratic attenuation을 나타내는 하나의
정수나 실수 값을 나타낸다.
정수 값은 요청되었을 때 가장 가까운 정수에 내부 실수 표현을
rounding하는 것에 의해 계산되어진다.

Notes

GL_LIGHTi = GL_LIGHT0 + i.
에러가 generated된다면, 만들어진 params의 내용은 바뀌지 않는다.

Errors

light 나 pname 이 accepted value가 아니라면 GL_INVALID_ENUM 이 generated 된다.
glGetLight이 glBegin call과 상응하는 glEnd call 사이에서 call 되어진다면
GL_INVALID_OPERATION 이 generated 된다.
See Also
glLight


glGetMap

 glGetMap.3gl

Name

glGetMapdv, glGetMapfv, glGetMapiv - evaluator parameters를 리턴 한다.

C Specification

void glGetMapdv ( GLenum target,
GLenum query,
GLdouble *v )
void glGetMapfv ( GLenum target,
GLenum query,
GLfloat *v )
void glGetMapiv ( GLenum target,
GLenum query,
GLint *v )

Parameters

target map의 심볼릭 name를 명시한다. Accepted values :
GL_MAP1_COLOR_4, GL_MAP1_INDEX, GL_MAP1_NORMAL,
GL_MAP1_TEXTURE_COORD_1, GL_MAP1_TEXTURE_COORD_2,
GL_MAP1_TEXTURE_COORD_3, GL_MAP1_TEXTURE_COORD_4,
GL_MAP1_VERTEX_3, GL_MAP1_VERTEX_4, GL_MAP2_COLOR_4 ,
GL_MAP2_INDEX, GL_MAP2_NORMAL, GL_MAP2_TEXTURE_COORD_1,
GL_MAP2_TEXTURE_COORD_2, GL_MAP2_TEXTURE_COORD_3,
GL_MAP2_TEXTURE_COORD_4, GL_MAP2_VERTEX_3,
and GL_MAP2_VERTEX_4.
query 리턴되는 parameter를 명시한다.심볼릭 names GL_COEFF, GL_ORDER, and
GL_DOMAIN 는 accepted된다.
v 요청된 데이터를 리턴 한다.

Description

glMap1 and glMap2 define evaluators. glGetMap는 evaluator parameter들을 리턴한다.
target 는map을 선택하고, query 는 명시적인 parameter를 선택하며, v 는 리턴된 값이
저장된 장소를 가리킨다.
target parameter 에 대한 acceptable values는 glMap1과 glMap2 reference page안에
표현되어 진다.
query 는 다음의 값들을 가정 할 수 있다.
GL_COEFF v 는 evaluator function에 대한 control points를 리턴 한다.
1차원 evaluators는order control points를 리턴한고,
2차원 evaluators는 uorder, xvorder control points를 리턴
한다. 각 control point는 evaluator의 타입을 좌우하는 one, two,
three, or four integer, single-precision floating-point,
or double-precision floating-point 값으로 이루어져 있다.
Two-dimensional control points 는 row-major order안으로 리턴되고,
the uorder 지수가 빠르게 증가한다. 그리고 vorder 지수는 각 열의
증가 이후에 증가한다. 정수 값은 요청되었을 때 가장 가까운
정수 값에 내부 실수 값을 rounding하는 것에 의해 계산되어 진다.
GL_ORDER v 는 evaluator function의 순서를 리턴 한다. One-dimensional
evaluators는single value, order를 리턴 한다.
Two-dimensional evaluators 는 두 개의 값, uorder 와 vorder를 리턴
한다.
GL_DOMAIN v 는 선형 u, v mapping parameters를 리턴 한다. One-
dimensional evaluators 두 개의 값, glMap1에 의해 명시된 u1 와
u2,를 리턴 한다. Two-dimensional evaluators는 glMap2에 의해
명시된 네가지 값(u1, u2,v1, and v2)을 리턴 한다.
정수 값은 요청되었을 때 가장 가까운 정수 값에 내부 실수 값을
rounding하는 것에 의해 계산되어 진다

Notes

에러가 generated 된다면, 생성된 v 의 내용은 바뀌지 않는다.

Errors

target 이나 query 가 accepted 값이 아니라면 GL_INVALID_ENUM 이 generated 된다.
glGetMap 이 glBegin call과 상응하는 glEnd call사이에서 called된다면
GL_INVALID_OPERATION 이 generated 된다.

See Also

glEvalCoord, glMap1, glMap2


glGetMaterial

 glGetMaterial .3gl

Name

glGetMaterialfv, glGetMaterialiv- material parameter를 리턴 한다.

C Specification

void glGetMaterialfv ( GLenum face,
GLenum pname,
GLfloat *params )
void glGetMaterialiv ( GLenum face,
GLenum pname,
GLint *params )

Parameters

face 두 materials의 명시는 queried 된다. GL_FRONT or GL_BACK가 들어간다.
pname 리턴 되는 material parameter를 명시 한다. GL_AMBIENT,
GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, GL_SHININESS,
GL_COLOR_INDEXES가 허용된다.
params 요청되어진 data를 리턴 한다.

Description

glGetMaterial 는 params 안에서 material faced 의 parameter pname 의 값이나 material
faced 의 값을 리턴 한다.
여섯 가지 parameters 가 다음과 같이 정의 되어있다:
GL_AMBIENT params 는 material의 ambient reflectance를 나타내는 네 개의
정수나 실수 값을 리턴 한다.
정수 값은 요청되었을 때 내부 floating-point 표현으로부터
선형적으로 mapped된다, 이것은 대부분의 positive representable
정수 값에 대해 1.0 maps 되고, 대부분의 negative representable정수
값에 대해 -1.0 maps됨을 의미. 내부 값이 [-1,1]범위 밖에
있다면, 그 상응하는 정수 리턴 값은 undefined 된다.
GL_DIFFUSE params 는 material의 diffuse reflectance를 나타내는 네 개의
정수나 실수 값을 리턴 한다. 정수 값은 요청되었을 때 내부 floating-point 표현
으로부터 선형적으로 mapped된다, 이것은 대부분의 positive representable
정수 값에 대해 1.0 maps 되고, 대부분의 negative representable정수
값에 대해 -1.0 maps됨을 의미. 내부 값이 [-1,1]범위 밖에
있다면, 그 상응하는 정수 리턴 값은 undefined 된다.
GL_SPECULAR params 는 material의 specular reflectance(반사율)을
나타내는 네 개의 정수나 실수 값을 리턴 한다.
정수 값은 요청되었을 때 내부 floating-point 표현으로부터
선형적으로 mapped된다, 이것은 대부분의 positive representable
정수 값에 대해 1.0 maps 되고, 대부분의 negative representable정수
값에 대해 -1.0 maps됨을 의미. 내부 값이 [-1,1]범위 밖에
있다면, 그 상응하는 정수 리턴 값은 undefined 된다.
GL_EMISSION params 는 material의 emitted light intensity를 나타내는
네 개의 정수나 실수값을 리턴 한다.
정수 값은 요청되었을 때 내부 floating-point 표현으로부터
선형적으로 mapped된다, 이것은 대부분의 positive representable
정수 값에 대해 1.0 maps 되고, 대부분의 negative representable정수
값에 대해 -1.0 maps됨을 의미. 내부 값이 [-1,1]범위 밖에
있다면, 그 상응하는 정수 리턴 값은 undefined 된다.
GL_SHININESS params 는 material의 specular exponent를 나타내는
하나의 정수나 실수 값을 리턴 한다.
정수 값은 요청되었을 때 가장 가까운 정수 값에 내부 실수 값을
rounding하는 것에 의해 계산되어 진다.
GL_COLOR_INDEXES params 는 material의 ambient, diffuse, and specular를
나타내는 세 개의 정수나 실수값을 리턴 한다.
정수 값은 요청되었을 때 가장 가까운 정수 값에 내부 실수 값을
rounding하는 것에 의해 계산되어 진다.

Notes

에러가 generated된다면, 생성된 params 의 내용은 변하지 않는다.

Errors

face 나 pname 이 accepted 값이 아니라면 GL_INVALID_ENUM이 generated된다.
glGetMaterial 이 glBegin call과 상응하는 glEnd call 사이에서 called 된다면
GL_INVALID_OPERATION 이 generated 된다.

See Also

glMaterial


glGetPixelMap

 glGetPixelMap.3gl

Name

glGetPixelMapfv, glGetPixelMapuiv, glGetPixelMapusv - 명시된 pixel map을 리턴 한다.

C Specification

void glGetPixelMapfv ( GLenum map,
GLfloat *values )
void glGetPixelMapuiv ( GLenum map,
GLuint *values )
void glGetPixelMapusv ( GLenum map,
GLushort *values )

Parameters

map 리턴되는 pixel map의 이름을 명시한다. Accepted values are
GL_PIXEL_MAP_I_TO_I, GL_PIXEL_MAP_S_TO_S, GL_PIXEL_MAP_I_TO_R,
GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B, GL_PIXEL_MAP_I_TO_A,
GL_PIXEL_MAP_R_TO_R, GL_PIXEL_MAP_G_TO_G,
GL_PIXEL_MAP_B_TO_B, and GL_PIXEL_MAP_A_TO_A.
values pixel map의 내용을 리턴 한다.

Description

map parameter 의 acceptable values 의 묘사에 대한 glPixelMap reference page를
보시오 .
glPixelMap은 map 에서 the pixel map의 내용을 리턴 한다.
Pixel maps 은 map color indices, stencil indices, color components, and depth
components, 그밖에 다른 값에 glReadPixel, glDrawPixel, glCopyPixel, glTexImage1D,
그리고 glTexImage2D 의 실행 동안 사용 되어 진다.
요청된 Unsigned integer values 는 1.0 maps to the largest representable integer
value, and 0.0 maps to zero와 같은 내부 fixed나 floating-point 표현으로부터 선형적으로
mapped 된다.
그 map의 값이 [0,1] 범위 안에 있지 않다면 unsigned integer values 리턴은 undefined
된다. map의 요구하는 크기를 결정하기 위하여 glGet을 적절한 심벌상수를 사용하여
호출하게 된다.

Notes

에러가 generated 된다면, 생성된 values 의 내용은 바뀌지 않는다.

Errors

map 이accepted value가 아니라면, GL_INVALID_ENUM 이 generated 된다.
glGetPixeMap이 glBegin call과 상응 하는 glEnd call사이에서 call 된다면
GL_INVALID_OPERATION 이 generated 된다.

Associated Gets

glGet with argument GL_PIXEL_MAP_I_TO_I_SIZE
glGet with argument GL_PIXEL_MAP_S_TO_S_SIZE
glGet with argument GL_PIXEL_MAP_I_TO_R_SIZE
glGet with argument GL_PIXEL_MAP_I_TO_G_SIZE
glGet with argument GL_PIXEL_MAP_I_TO_B_SIZE
glGet with argument GL_PIXEL_MAP_I_TO_A_SIZE
glGet with argument GL_PIXEL_MAP_R_TO_R_SIZE
glGet with argument GL_PIXEL_MAP_G_TO_G_SIZE
glGet with argument GL_PIXEL_MAP_B_TO_B_SIZE
glGet with argument GL_PIXEL_MAP_A_TO_A_SIZE
glGet with argument GL_MAX_PIXEL_MAP_TABLE

See Also

glCopyPixels, glDrawPixels, glPixelMap, glPixelTransfer,
glReadPixel, glTexImage1D, glTexImage2D


glGetPointervEXT

 glGetPointervEXT.3gl

Name

glGetPointervEXT - vertex data array 의 주소를 리턴 한다.

C Specification

void glGetPointervEXT(GLenum pname, GLvoid* *params )

Parameters

pname 리턴된 array 포인터를 명시한다.
GL_VERTEX_ARRAY_POINTER_EXT,
GL_NORMAL_ARRAY_POINTER_EXT,
GL_COLOR_ARRAY_POINTER_EXT,
GL_INDEX_ARRAY_POINTER_EXT,
GL_TEXTURE_COORD_ARRAY_POINTER_EXT,
GL_EDGE_FLAG_ARRAY_POINTER_EXT 는 사용가능하다.
params pname에 의해 명시된 array pointer value를 리턴 한다.

Description

glGetPointervEXT는 array 포인터 정보를 리턴 한다. pname 은 리턴된 array포인터를
나타내는 심볼릭 상수이고, params 은 리턴된 데이터가 위치한 장소를 가리키는 포인터
이다.

Notes

array pointer 들은 client side state이다.
glGetPointervEXT 는 core(핵심) GL 커맨드 set 부분이 아닌, EXT_vertex_array
확장 부분이다.
"GL_EXT_vertex_array" 가 GL_EXTENSIONS이 call 되었을 때 glGetString에 의해
리턴된 string안에 포함된다면, extension EXT_vertex_array 는 supported된다.

Errors

pname 이 accepted value가 아니라면 GL_INVALID_ENUM 이 generated 된다.

See Also

glArrayElementEXT, glColorPointerEXT, glDrawArraysEXT, glEdgeFlagPointerEXT,
glIndexPointerEXT, glNormalPointerEXT, glTexCoordPointerEXT, glVertexPointerEXT


glGetPolygonStipple

 glGetPolygonStipple.3gl

Name

glGetPolygonStipple - polygon stipple pattern을 리턴 한다.

C Specification

void glGetPolygonStipple ( GLubyte *mask )

Parameters

mask stipple pattern을 리턴.
Description
glGetPolygonStipple는 mask a 32x32 polygon stipple pattern을 리턴 한다. 그 pattern 은
32의 height 와 width를 갖는 glReadPixel, GL_BITMAP 의 type, ,GL_COLOR_INDEX 의
format 이 call되었을 때 내부 32x32 color index buffer에 저장되는 것 같이 메모리 안에
packed 된다.
반면에 glReadPixel - pixel transfer operations (shift, offset, pixel map) 는 리턴된
stipple image에 적용되지 않는다.

Notes

에러가 generated 된다면, 생성된 mask의 내용은 변하지 않는다.

Errors

glGetPolygonStipple이 glBegin의 실행과 상응하는 glEnd의 실행 사이에서 실행된다면
GL_INVALID_OPERATION 은 generated 된다.
See Also
glPixelStore, glPixelTransfer, glPolygonStipple, glReadPixels


glGetString

 glGetString.3gl

Name

glGetString - 현재 GL connection을 묘사하는 string을 리턴 한다.

C Specification

const GLubyte * glGetString( GLenum name )

Parameters

name GL_VENDOR, GL_RENDERER, GL_VERSION, or GL_EXTENSIONS 중 하나의
심볼릭 상수를 명시한다.

Description

glGetString 는 현재 GL connection의 static string을 묘사하는 포인터를 리턴한다.
name 은 다음의 하나일수 있다:
GL_VENDOR GL 실행에 대한 company responsible을 리턴 한다.
이 이름은 바뀌지 않는다 from release to release.
GL_RENDERER renderer의 이름을 리턴 한다. 이 이름은 전형적으로 H/W의
platform의 특정한 구성을 명시 한다.
GL_VERSION version 이나 release number를 리턴 한다.
GL_EXTENSIONS supported 된 GL extensions의 space-separated list를 리턴 한다.

GL이 실행의 성능 특성에 대한 질문을 포함하지 않기 때문에 , 그것은 어떤
applications 으로 expected된다, 그리고 널리 알려져 있는 플랫폼을 인식하고 이 플랫폼의
널리 알려져 있는 성능 특성 위에서 기초가 놓여진 그들의 GL 사용을 수정하기 위해
쓰여질 것입니다. Strings GL_VENDOR과 GL_RENDERER은 함께 유일하게 플랫폼을
명시합니다. 그리고 release to release로부터 공개에 변화하지 않을 것입니다. 그들은 그런
플랫폼 인식 알고리즘에 의해 사용되어야 합니다.

몇몇 응용은 표준이 되는 GL의 부분이 아닌 기능을 이용하기를 원할 것입니다.
이 기능은 표준이 되는 GL에 대한 확장으로 구현될 것입니다. GL_EXTENSIONS 문자열은
지원된 GL 확장의 영역 seperated 리스트입니다. (확장 이름은 공백 문자를 포함하지
않습니다.)

GL_VERSION 문자열은 버전 수로 시작합니다.
그 버전 number 는 major_number.minor_number나
major_number.minor_number.release_number.minor_number 나
major_number.minor_number.release_number form이다. 벤더 특정한 정보는 그
버전 수를 따를 것입니다. 그것의 포맷은 그 구현에 의존한다, 그러나 항상 그 버전이 번호를 붙이는 seperates와 그 벤더 특정한 정보는 공간이 있다.
모든 strings 은 null-terminated하다.

Notes
에러가 generated 된다면, glGetString은 0을 리턴 한다.
그 이용자와 서버는 다른 버전이나 확장을 지원할 것이다. GlGetString은 항상 호환성이
있는 버전 수나 확장의 리스트를 리턴 한다. 그 release 번호는 항상 그 서버를 설명한다.

Errors

이름이 accepted 값이 아니라면 GL_INVALID_ENUM ENUM은 생성됩니다.
glGetString이 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성됩니다.


glGetTexEnv

 glGetTexEnv.3gl

Name

glGetTexEnvfv, glGetTexEnviv- texture environment parameters를 리턴 한다.

C Specification

void glGetTexEnvfv ( GLenum target, GLenum pname, GLfloat *params )
void glGetTexEnviv ( GLenum target, GLenum pname, GLint *params )

Parameters

target texture environment를 명시한다.. Must be GL_TEXTURE_ENV.
pname texture environment parameter의 심볼릭 name를 명시 한다.
허용되는 값은 GL_TEXTURE_ENV_MODE와 GL_TEXTURE_ENV_COLOR이다.
params requested data를 리턴 한다.

Description

params에 있는 GlGetTexEnv 리턴은 glTexEnv로 명시된 texture environment의 값을
선택한다. target 목표는 texture environment을 명시한다. texture environment은
정의되고 지원되는 것:
GL_TEXTURE_ENV pname 는 특정한 texture environment 매개변수를 이름짓습니다. 그 두 매개변수는 다음과 같습니다.:
GL_TEXTURE_ENV_MODE params 는 그 단일 값 texture environment 모드, symbolic constant를 리턴한다.
GL_TEXTURE_ENV_COLOR params 는 texture environment color의 네 가지 정수나 실수 값을 리턴 한다.

Notes

에러가 generated 된다면, 생성된 params의 내용은 변하지 않는다.

Errors

target 나 pname 이 accepted value가 아니라면. GL_INVALID_ENUM은 generated 된다.
glGetTexEnv가 glBegin에 대한 호출과 glEnd에 대한 일치한 호출 사이에 호출된다면
GL_INVALID_OPERATION은 생성된다.
See Also
glTexEnv


glGetTexGen

 glGetTexGen.3gl

Name

glGetTexGendv, glGetTexGenfv, glGetTexGeniv - texture coordinate generation
parameters를 리턴 한다.

C Specification

void glGetTexGendv ( GLenum coord, GLenum pname, GLdouble *params )
void glGetTexGenfv ( GLenum coord, GLenum pname, GLfloat *params )
void glGetTexGeniv ( GLenum coord, GLenum pname, GLint *params )

Parameters

coord texture coordinate를 명시한다. Must be GL_S, GL_T, GL_R, or GL_Q.
pname 리턴된값의 심볼릭 name를 명시한다.Must be either
GL_TEXTURE_GEN_MODE texture generation plane 방정식의 이름:
GL_OBJECT_PLANE or GL_EYE_PLANE.
params requested data를 리턴 한다.

Description

params에 있는 GlGetTexGen xGen 귀환은 glTexGen을 사용하면서 명시된 texture 좌표
생성 기능의 매개변수를 선택한다. coord 는 그 texture 좌표 (s,t,r,q)중의 하나를
이름짓는다. 그리고 심볼릭 상수 GL_R, 또는 GL_Q GL_S, GL_T를 사용합니다.
pname 세 심볼릭 name 중의 하나를 명시한다:
GL_TEXTURE_GEN_MODE params 는 single-valued texture
generation function(심볼릭 상수)를 리턴 한다.
GL_OBJECT_PLANE params 는 eye linear-coordinate 생성을
명시하는 네 가지 plane 방정식 계수를 리턴 한다.
정수값은 요청 되었을 때, 그 내부의 유동 소수점
표현으로 직접적으로 도표로 map된다.
GL_EYE_PLANE params 는 eye linear-coordinate 생성을
명시하는 네 가지 plane 방정식 계수를 리턴 한다.
정수값은 요청 되었을 때, 그 내부의 유동 소수점
표현으로 직접적으로 도표로 map된다.
그 리턴된 값은 eye 좌표에서 유지 된다.
그들은 glTexGen을 사용하면서 명시된 값과 같지 않다.
그리고, modelview 행렬이 그 시간에서 동일함이지
않다면 glTexGen은 호출된다.

Notes

에러가 generated 된다면, 생성된 params의 내용은 변하지 않는다.

Errors

coord 나 pname 이 accepted 값이 아니라면, GL_INVALID_ENUM 은 generated 된다.
glGetTexGen이 glBegin에 대한 호출과 glEnd에 대한 일치 한 호출 사이에 호출된다면
GL_INVALID_OPERATION은 생성된다.
See Also
glTexGen


glGetTexImage

 glGetTexImage.3gl

Name

glGetTexImage - texture image를 리턴 한다.

C Specification

void glGetTexImage( GLenum target,
GLint level,
GLenum format,
GLenum type,
GLvoid *pixels )

Parameters

target 획득된 texture를 명시한다.
GL_TEXTURE_1D 와 GL_TEXTURE_2D가 가능하다.
level 그 요구된 image의 level-of-detail 수를 명시합니다. Level 0은
기준 image level 이다. Level n 은 the nth mipmap reduction(축소,변형)
image 이다.
format 리턴된 데이터에 대한 pixel format을 명시 한다. 지원되는 format은
GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB,
GL_RGBA, GL_LUMINANCE, and GL_LUMINANCE_ALPHA.
type 리턴된 데이터에 대한 pixel type을 명시 한다. The supported types
are GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT,
GL_SHORT, GL_UNSIGNED_INT, GL_INT, and GL_FLOAT.
pixels texture image를 리턴 한다. type 에 의해 명시된 type의 array 포인터 이다.

Description

glGetTexImage 는 pixels 로의 texture image를 리턴 한다. target 은 그 요구된 texture
image가 glTexImage1D (GL_TEXTURE_1D)에 의해 또는 glTexImage2D
(GL_TEXTURE_2D) 에 의해 명시된 하나인지를 명시합니다. level 그 요구된 영상의
level-of-detail 수를 명시합니다. format 과 type 그 요구된 영상 배열의 포맷과 유형을
명시합니다. 그 포맷과 유형 매개변수에 걸쳐서 받아들일 수 있는 값의 설명에 걸쳐서
참조 페이지 glTexImage1D와 glDrawPixels.
glGetTexImage의 연산은 선택된 내부의 four-component texture image와 image 의
크기 RGBA color 버퍼와 비교하는 것에 의해 가장 잘 이해됩니다. 그리고 나서,
glGetTexImage의 의미는 영에 착수된 x와 y를 가진 같은 format 과 type을 가지고 호출된
glReadPixels의 그것까지 동일합니다. 그리고, width은 그 texture image의 폭에 set된다.
그리고, height는 1-D 영상을 위해 하나에 set된다. 또는 그 직물의 높이에게, 2-D를 위한
영상은 상을 만듭니다. 그 내부의 직물 영상이 RGBA 영상이기 때문에, Pixel 포맷
GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT는 받아들여지지
않는다. 그리고 pixel 유형 GL_BITMAP는 받아들여지지 않는다.
그 선택된 texture image가 네 구성 요소를 포함하지 않는다면, 다음의 mappings이
적용됩니다. Single-component texture는 single-component 값에 set된 red를 가지고
RGBA 버퍼로 다루어집니다. 그리고, Green과 blue, 알파는 0으로 set된다. Two-component
texture는 그 값에 zero 구성 요소로 set된 red를 가지고 RGBA 버퍼로 다루어집니다.
그리고, 알파는 구성 요소 하나의 값에 set된다. 그리고 Green과 blue는 영에 set된다.
Three-component texture는 zero 구성 요소에 set된 red을 가지고 RGBA 버퍼로
다루어집니다. 그리고, Green은 구성 요소 하나의 값으로 set된다. 그리고, blue는 구성
요소 둘에 set된다. 그리고 알파는 0에 set된다.
pixels의 필수의 크기를 결정하기 위해, 그 내부의 texture image의 차원을 확정하기 위해
glGetTexLevelParameter를 사용한다. 그리고 format 과 type 에 근거를 두는 각각 pixel에
대해 요구된 기억장치로 pixels의 필수의 수를 scale한다. 확실히 계정 안으로 pixel 기억장
치 매개변수를 가지고간다. 특히 GL_PACK_ALIGNMENT.

Notes

에러가 generated된다면, 생성된 pixels의 내용은 변하지 않는다.

Errors

target, format, or type 이 accepted 값이 아니라면 GL_INVALID_ENUM은 generated
된다.
level 이 0 보다 작거나 GL_MAX_TEXTURE_SIZE의 리턴된 값 max에 대해 log
max보다 크다면 GL_INVALID_VALUE 이 generated 된다.
glGetTexImage가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성된다.

Associated Gets

glGetTexLevelParameter with argument GL_TEXTURE_WIDTH
glGetTexLevelParameter with argument GL_TEXTURE_HEIGHT
glGetTexLevelParameter with argument GL_TEXTURE_BORDER
glGetTexLevelParameter with argument GL_TEXTURE_COMPONENTS
glGet with arguments GL_PACK_ALIGNMENT and others

See Also

glDrawPixels, glReadPixels, glTexImage1D, glTexImage2D


glGetTexLevelParameter

 glGetTexLevelParameter.3gl

Name

glGetTexLevelParameterfv, glGetTexLevelParameteriv
- detail 의 level을 명시하는 texture parameter 값을 리턴 한다.

C Specification
void glGetTexLevelParameterfv ( GLenum target,
GLint level,
GLenum pname,
GLfloat *params )
void glGetTexLevelParameteriv ( GLenum target,
GLint level,
GLenum pname,
GLint *params )

Parameters

target target texture, GL_TEXTURE_1D 나 GL_TEXTURE_2D의 symbolic name을
명시한다.
level 요구된 image의 level-of-detail 수를 명시한다. Level 0 은 기본 image
level이다. Level n 은 n번째 mipmap reduction image 이다.
pname texture parameter 의 심볼릭 name을 명시한다.
GL_TEXTURE_WIDTH, GL_TEXTURE_HEIGHT,
GL_TEXTURE-COMPONENTS, and GL_TEXTURE_BORDER
이 가능하다.
params requested data를 리턴 한다.

Description

glGetTexLevelParameter는 level로 명시된 특정한 level-of-detail 값에 대한 texture
매개변수 값을 params에서 리턴 한다. target 1차 또는 2차원의 texturing을 명시하기
위해 GL_TEXTURE_1D나 GL_TEXTURE_2D, target texture 정의한다. pname 는 값이나
값이 되돌려 주어질 texture parameter 명시한다.
accepted parameter names 은 다음과 같다:
GL_TEXTURE_WIDTH
params 는 single value, texture image의 폭을 리턴 한다.
이 값은 texture image의 경계를 포함 한다.
GL_TEXTURE_HEIGHT
params 는 single value, texture image의 높이를 리턴 한다.
이 값은 texture image의 경계를 포함 한다.
GL_TEXTURE_COMPONENTS
params 는 single value, texture image의 components(구성 요소)를 리턴 한다.
GL_TEXTURE_BORDER
params 는 single value, texture image경계의 pixels안의 폭을 리턴한다.

Notes

에러가 generated된다면, 생성된 params의 내용은 변하지 않는다.

Errors

target 이나 pname이 accepted value가 아니라면. GL_INVALID_ENUM 은 generated된다.
level 이 0 보다 작거나 GL_MAX_TEXTURE_SIZE의 리턴된 값 max에 대해 max보다
크다면 GL_INVALID_VALUE 은 generated된다.
glGetTexLevelParameter가 glBegin에 대한 호출과 glEnd에 대한 일치 한 호출 사이에
호출된다면 GL_INVALID_OPERATION은 생성된다.
See Also
glGetTexParameter, glTeximage1D, glTeximage2D, glTexParameter


glGetTexParameter

 glGetTexParameter.3gl

Name

glGetTexParameterfv, glGetTexParameteriv
- texture parameter values를 리턴 한다.

C Specification
void glGetTexParameterfv( GLenum target,
GLenum pname,
GLfloat *params )
void glGetTexParameteriv( GLenum target,
GLenum pname,
GLint *params )

Parameters

target target texture의 심볼릭 name을 명시한다.
GL_TEXTURE_1D 와 GL_TEXTURE_2D are accepted.
pname texture parameter의 심볼릭 name을 명시한다.
GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER,
GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, and
GL_TEXTURE_BORDER_COLOR 이 허용된다.
params texture parameters를 리턴 한다.

Description

glGetTexParameter는 pname로서 명시된 texture 매개변수의 값을 params 안에서리턴
한다.target 1차 나 2차원의 texturing을 명시하기 위해 GL_TEXTURE_1D나
GL_TEXTURE_2D, 그 target texture를 정의한다. 그 같은 해석으로, Pname는
glTexParameter와 같은 기호를 받아들인다.
GL_TEXTURE_MAG_FILTER 심볼릭 상수, single-valued texture
magnification filter를 리턴 한다.
GL_TEXTURE_MIN_FILTER 심볼릭 상수, single-valued texture
minification filter를 리턴 한다.
GL_TEXTURE_WRAP_S 심볼릭 상수, texture coordinate s에 대한
single-valued wrapping function을 리턴 한다.
GL_TEXTURE_WRAP_T 심볼릭 상수, texture coordinate t에 대한
single-valued wrapping function을 리턴 한다.
GL_TEXTURE_BORDER_COLOR texture border RGBA color를 네 정수나
실수 number를 리턴 한다. Floating-point
values 는 범위 [0,1]안에 리턴 된다.
정수 값은, 가장 positive한 representable integer는
1.0 maps, 가장 negative한 representable integer는
-1.0 maps되는 내부의 유동 소수점 표현의 선형적인
map으로서 리턴 되어진다.

Notes
에러가 generated된다면, 생성된 params의 내용은 변하지 않는다.

Errors

target 이나 pname 이 accepted value가 아니라면, GL_INVALID_ENUM이 전달된다.
glGetTexParameter가 glBegin에 대한 호출과 glEnd에 대한 일치 한 호출 사이에 호출된다면 GL_INVALID_OPERATION은 생성된다.

See Also

glTexParameter


glHint

 glHint.3gl

Name

glHint - implementation-specific hints를 명시한다.

C Specification

void glHint ( GLenum target,
GLenum mode )

Parameters

target 조절되는 행동을 나타내는 심볼릭 상수를 명시한다.
GL_FOG_HINT, GL_LINE_SMOOTH_HINT,
GL_PERSPECTIVE_CORRECTION_HINT, GL_POINT_SMOOTH_HINT,
GL_POLYGON_SMOOTH_HINT 이 허용된다.
mode 그 요구된 행동을 나타내는 심볼릭상수를 명시한다.
GL_FASTEST, GL_NICEST, and GL_DONT_CARE 이 허용된다.
Description
해석에 대한 공간이 있을 때 GL의 확실한 관점은 hints로 control될수 있다. hint는 두
개의 arguments로 명시 된다. target 은 control된 행동을 나타내는 심볼릭 상수이고,
mode 는 요구된 행동을 나타내는 또다른 심볼릭 상수이다.
mode 다음 중에 하나가 될 수 있다:
GL_FASTEST 선택된 가장 능률적인 option
GL_NICEST 선택된 가장 정확하거나, 높은 품질의 option.
GL_DONT_CARE client는 preference를 가지고 있지 않다.
암시될 수 있는 구현 관점이 정의됨에도 불구하고, 그 암시의 해석은 그 구현에 의존한다.
따라서 제안된 의미와의 target으로 명시될 수 있는 암시 관점은 다음과 같다:
GL_FOG_HINT fog calculation의 정밀도를 나타낸다.per- pixel ofg 계산이
GL 구현에 의해 능률적으로 지원되지 않는다면, GL_DONT_CARE나
GL_FASTEST를 암시하는 것은 결과적으로 fog 효과의 per-vertex 계산이
될 수도 있다.
GL_LINE_SMOOTH_HINT antialiased 라인의 표본 추출 품질을 나타냅니다.
더 큰 필터 기능이 적용된다면 GL_NICEST를 암시하는 것은 결과적으로
rasterization 동안 생성되는 더 많은 pixel 파편이 될 수도 있다.
GL_PERSPECTIVE_CORRECTION_HINT 색의 품질과 texture coordinate
interpolation를 나타내다. perspective-corrected 매개변수 interpolation이
GL 구현에 의해 능률적으로 지원되지 않는다면, GL_DONT_CARE나
GL_FASTEST를 암시하는 것은 결과적으로 colors와 texture 좌표의 간단한
선형적인 interpolation이 될 수도 있다.
GL_POINT_SMOOTH_HINT antialiased 점의 표본 추출 품질을 나타낸다.
더 큰 필터 기능이 적용된다면 GL_NICEST를 암시하는 것은 결과적으로
rasterization 동안 생성되는 더 많은 pixel 파편이 될 수도 있다.
GL_POLYGON_SMOOTH_HINT antialiased 점의 표본 추출 품질을 나타낸다.
더 큰 필터 기능이 적용된다면 GL_NICEST를 암시하는 것은 결과적으로
rasterization 동안 생성되는 더 많은 pixel 파편이 될 수도 있다.

Notes

암시의 해석은 그 구현에 의존한다. glHint은 무시될 수 있다.

Errors

target 이나 mode 이 accepted value가 아니라면. GL_INVALID_ENUM 은 generated 된다. glHint이 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면 GL_INVALID_OPERATION은 생성된다.


glIndex

 glIndex.3gl

Name

glIndexd, glIndexf, glIndexi, glIndexs, glindexdv, glindexfv, glindexiv, glindexsv
- 현재 color 인덱스를 set한다.

C Specification

void glIndexd( GLdouble c )
void glIndexf( GLfloat c )
void glIndexi( GLint c )
void glIndexs( GLshort c )

Parameters

c 현재 컬러 인덱스를 위한 새로운 값을 명시.

C Specification

void glindexdv ( const GLdouble *c )
void glindexfv ( const GLfloat *c )
void glindexiv ( const GLint *c )
void glindexsv ( const GLshort *c )

Parameters

c 현재의 컬러 인덱스에 대한 새로운 값을 포함하는 one-element 배열에 맞춰 그만큼
포인터를 명시한다.

Description

glIndex는 현재 (single-valued)컬러 인덱스를 갱신 한다.
그것은 현재의 컬러 인덱스에 대한 새로운 값을 하나의 인수로 잡는다.
그 현재의 인덱스는 floating-point 값으로서 저장됩니다. 어떤 특별한 도표로 나타내지지
않는 정수 값은 직접적으로 floating-point 값으로 변환된다.
그 색 색인 버퍼의 representable한 범위 밖의 색인 값은 clamped되지 않는다. 인덱스가
그 프레임의 버퍼로 dithered되고 (if enabled)쓰여지기 전에, 그것은 고정 소수점
형식으로 변환된다. 그 프레임의 버퍼에 있는 비트와 일치하지 않는 결과의 fixed-point
값의 정수 부분에 있는 어떤 비트는 masked

Notes

그 현재의 인덱스는 언제든지 갱신될 수 있다. 특히, GlIndex는 glEnd에 대한 glBegin과
그 일치 한 호출에 대한 호출 사이에 호출될 수 있다.

Associated Gets

glGet with argument GL_CURRENT_INDEX

See Also

glColor


glIndexMask

 glIndexMask.3gl

Name

glIndexMask - 그 컬러 인덱스 버퍼에 있는 개개의 비트의 기록을 조절한다.

C Specification

void glIndexMask ( GLuint mask )

Parameters

mask 그 컬러 인덱스 버퍼에 있는 개개의 비트의 기록을 가능하게 하고 무능하게
만들기 위해 비트 마스크를 명시한다.

Description

GlIndexMask은 그 컬러 이덱스 버퍼에 있는 개개의 비트의 기록을 control한다. 마스크의
최하위 n 비트는 마스크를 명시합니다, 여기서 n은 컬러 이덱스 버퍼안의 비트의 수이다.
그 마스크에 나타나는 곳이 어디이든, 일치 한 비트 그리고, 그 컬러 이덱스 버퍼 (or
buffers)는 writable하게 만들어진다. 영이 나타나는 그 비트는 쓰기 보호된것이다
이 마스크는 단지 컬러 인덱스 모드에서 사용된다. 그리고 그것은 단지 쓰기에 대해 (see
glDrawBuffer)현재 선택된 버퍼에 영향을 미칩니다. 모든 비트는 writing enabled 하다.

Errors

glIndexMask이 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION TION은 생성된다.

Associated Gets

glGet with argument GL_INDEX_WRITEMASK

See Also

glColorMask, glDepthMask, glDrawBuffer, glIndex, glStencilMask


glIndexPointerEXT

 glIndexPointerEXT.3gl

Name

glIndexPointerEXT - 컬러 인덱스들의 array를 정의 한다.

C Specification

void glIndexPointerEXT( GLenum type,
GLsizei stride,
GLsizei count,
const GLvoid *pointer )

Parameters

type array안의 각 컬러 이덱스의 데이터 타입을 명시 한다. Symbolic constants
GL_SHORT, GL_INT, GL_FLOAT, or GL_DOUBLE_EXT, are accepted.
stride 연속적인 컬러 인덱스들 사이에서의 byte offset을 명시 한다. stride 이 zero
라면 color indexes 가 array에 tightly packed된 것을 의미 한다.
count 처음부터 카운팅된 스택틱한 인덱스들의 수를 명시한다.
pointer array에 첫 번째 인덱스를 가리키는 포인터를 명시한다.

Description

GlIndexPointerEXT는 vertex array extension을 사용하면서 rendering 할 때 사용하는
컬러 인덱스 array의 장소와 그 데이타 양식을 명시한다. type은 각각의 컬러 인덱스의
데이타 유형을 명시한다, 그리고 stride는 한 컬러 인덱스로부터 다음의 vertexes 에게 byte
stride을 준다, 그리고 하나의 배열 안에 packed되거나 분리된 배열에 저장되기 위해
속하한다. (Single-array 기억장치는 몇몇 구현에 더 효율적일 지도 모른다.) count 는
정적인 배열 요소의 수를 나타냅니다.(counting from the first).
정적인 요소는 그 응용에 의해 수정될 지도 모른다. 그러나 그들이 수정되면, 그 응용은
명백히 어떤 rendering을 그것을 사용하기 전의 배열을 respecify해야 한다. 컬러 인덱스
배열이 명시될 때, type, stride, count 그리고 pointer는 client-side 상태로서 구하여진다.
그리고 정적인 배열 요소는 그 구현에 의해 저장되어야 한다.
그 컬러 이덱스 배열은 가능하게 되고 인수 GL_INDEX_ARRAY_EXT로 glEnable와
glDisable를 사용하면서 무능하게 만들어진다. enabled하다면 그 컬러 이덱스 배열은
glDrawArraysEXT나 glArrayElementEXT가 호출되었을 때 사용된다.
pre-specified vertex 와 vertex attribute arrays로부터 원시의(모든 같은 타입)sequence
정의에 glDrawArraysEXT를 사용.
인덱스 버텍스와 버텍스 어트리뷰트에 의한 primitives명시에 glArrayElementEXT를 사용.

Notes

Non-static 배열 요소는 glArrayElementEXT나 glDrawArraysEXT가 실행될 때까지
접근되지 않는다. 디폴트에 의해 컬러 인덱스 배열은 disabled되고 glArrayElementEXT나
glDrawArraysEXT가 호출될 때 그것은 접근되지 않을 것이다.
glBegin 중의 실행 glEnd 중의 일치 한 실행 사이에서 glIndexPointerEXT이 호출되는
것이 에러가 아니라도 그결과는 undefined(불확실)하다.
GlIndexPointerEXT는 어떤 프로토콜도 가지지 않은 이용자 측으로 일반적으로 구현될
것이다. 컬러 인덱스 배열 매개변수가 이용자 측 상태인 동안, 그들은 glPushAttrib와
glPopAttrib에 의해 saved되거나 restored되지 않는다.
glIndexPointerEXT commands는 display lists에 entered되지 않는다.
glIndexPointerEXT는 EXT_vertex_array extension의 부분지만core GL command set
의 부분은 아니다. "GL_EXT_vertex_array"가 argument GL_EXTENSIONS를 가지고
호출되었을 때, glGetString에 의해 리턴된 스트링에 포함된다면 , extension
EXT_vertex_array 는 supported된다.

Errors

type 이 accepted value가 아니라면. GL_INVALID_ENUM 은 generated 된다.
stride 나 count 가 negative라면 GL_INVALID_VALUE 은 generated 된다.

Associated Gets

glIsEnabled with argument GL_INDEX_ARRAY_EXT
glGet with argument GL_INDEX_ARRAY_SIZE_EXT
glGet with argument GL_INDEX_ARRAY_TYPE_EXT
glGet with argument GL_INDEX_ARRAY_STRIDE_EXT
glGet with argument GL_INDEX_ARRAY_COUNT_EXT
glGetPointervEXT with argument GL_INDEX_ARRAY_POINTER_EXT
See Also
glArrayElementEXT, glColorPointerEXT, glDrawArraysEXT,glEdgeFlagPointerEXT,
glGetPointerEXT, glNormalPointerEXT


glInitNames

 glInitNames.3gl

Name

glInitNames - name stack을 초기화 한다.

C Specification

void glInitNames( void )

Description

그 이름 스택은 표현의 집합이 유일하게 식별되기 위해 명령한다는 것을 허락하기 위해
선택 모드 동안 사용된다. 그것은 unsigned된 정수 중에서 정연한 집합으로 구성된다.
glInitNames는 name stack이 디폴트로 empty state를 초기화 한다.
그 이름 스택은 항상 그 render 모드가 GL_SELECT가 아닌 동안 비어있다.
그 render 모드가 GL_SELECT가 아닌 동안 glInitNames Calls되는 것은 무시된다.

Errors

glInitNames가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된 있다면
GL_INVALID_OPERATION ON은 생성된다.

Associated Gets

glGet with argument GL_NAME_STACK_DEPTH
glGet with argument GL_MAX_NAME_STACK_DEPTH

See Also

glLoadName, glPushName, glRenderMode, glSelectBuffer


glIsEnabled

 glIsEnabled.3gl

Name

glIsEnabled - capability 가 enabled한지 테스트한다.

C Specification

GLboolean glIsEnabled ( GLenum cap )

Parameters

cap GL capability를 나타내는 심볼릭 상수를 명시한다.

Description

glIsEnabled는 cap 이 enabled capability 이고 반면에 GL_FALSE를 리턴한다면
GL_TRUE를 리턴 한다. 다음의 capabilities는 cap에 의해 accepted된다.

GL_ALPHA_TEST See glAlphaFunc.
GL_AUTO_NORMAL See glEvalCoord.
GL_BLEND See glBlendFunc.
GL_CLIP_PLANEi See glClipPlane.
GL_COLOR_ARRAY_EXT See glColorPointerEXT.
GL_COLOR_MATERIAL See glColorMaterial.
GL_CULL_FACE See glCullFace.
GL_DEPTH_TEST See glDepthFunc and glDepthRange.
GL_DITHER See glEnable.
GL_EDGE_FLAG_ARRAY_EXT See glEdgeFlagPointerEXT.
GL_FOG See glFog.
GL_INDEX_ARRAY_EXT See glIndexPointerEXT.
GL_LIGHTi See glLightModel and glLight.
GL_LIGHTING See glMaterial, glLightModel, and glLight.
GL_LINE_SMOOTH See glLineWidth.
GL_LINE_STIPPLE See glLineStipple.
GL_LOGIC_OP See glLogicOp.
GL_MAP1_COLOR_4 See glMap1.
GL_MAP1_INDEX See glMap1.
GL_MAP1_NORMAL See glMap1.
GL_MAP1_TEXTURE_COORD_1 See glMap1.
GL_MAP1_TEXTURE_COORD_2 See glMap1.
GL_MAP1_TEXTURE_COORD_3 See glMap1.
GL_MAP1_TEXTURE_COORD_4 See glMap1.
GL_MAP1_VERTEX_3 See glMap1.
GL_MAP1_VERTEX_4 See glMap1.
GL_MAP2_COLOR_4 See glMap2.
GL_MAP2_INDEX See glMap2.
GL_MAP2_NORMAL See glMap2.
GL_MAP2_TEXTURE_COORD_1 See glMap2.
GL_MAP2_TEXTURE_COORD_2 See glMap2.
GL_MAP2_TEXTURE_COORD_3 See glMap2.
GL_MAP2_TEXTURE_COORD_4 See glMap2.
GL_MAP2_VERTEX_3 See glMap2.
GL_MAP2_VERTEX_4 See glMap2.
GL_NORMAL_ARRAY_EXT See glNormalPointerEXT.
GL_NORMALIZE See glNormal.
GL_POINT_SMOOTH See glPointSize.
GL_POLYGON_SMOOTH See glPolygonMode.
GL_POLYGON_STIPPLE See glPolygonStipple.
GL_SCISSOR_TEST See glScissor.
GL_STENCIL_TEST See glStencilFunc and glStencilOp.
GL_TEXTURE_1D See glTexImage1D.
GL_TEXTURE_2D See glTexImage2D.
GL_TEXTURE_COORD_ARRAY_EXT See glTexCoordPointerEXT.
GL_TEXTURE_GEN_Q See glTexGen.
GL_TEXTURE_GEN_R See glTexGen.
GL_TEXTURE_GEN_S See glTexGen.
GL_TEXTURE_GEN_T See glTexGen.
GL_VERTEX_ARRAY_EXT See glVertexPointerEXT.

Notes

에러가 generated된다면, glIsEnabled는 0을 리턴 한다.

Errors

cap 이 accepted value가 아니라면. GL_INVALID_ENUM 은 generated된다.
glIsEnabled가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성된다.

See Also

glEnable


glIsList

 glIsList.3gl

Name

glIsList - display-list 존재에 대해 테스트 한다.

C Specification

GLboolean glIsList( GLuint list )

Parameters

list 가능한 display-list name을 명시한다.

Description

list가 디스플레이 리스트의 이름이고 GL_FALSE를 리턴한다면, GlIsList 리스트는
GL_TRUE를 리터한다.

Errors

glIsList이 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION TION은 생성된다.
See Also
glCallList, glCallLists, glDeleteLists, glGenLists, glNewList


glLight

 glLight.3gl

Name

glLightf, glLighti, glLightfv, glLightiv - light source parameters를 set.

C Specification

void glLightf ( GLenum light,
GLenum pname,
GLfloat param )
void glLighti ( GLenum light,
GLenum pname,
GLint param )
void glLightfv ( GLenum light,
GLenum pname,
const GLfloat *params )
void glLightiv ( GLenum light,
GLenum pname,
const GLint *params )

Parameters

light light를 명시한다. lights의 수는 그 실행에 의존한다, 그러나 최소 여덟 lights는
supported된다. 그들은 0 <= i <GL_MAX_LIGHTS를 만족하는 GL_LIGHTi로
부터의 심볼릭 names에 의해 확인된다.
pname light에 대한 single-valued light source parameter를 명시한다.
GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTANT_ATTENUATION,
GL_LINEAR_ATTENUATION, and GL_QUADRATIC_ATTENUATION 가 허용된다.
param light에 set되어질 light source의 parameter pname값을 명시한다.
Description
GlLight은 개개의 광 자원 매개변수의 값을 세트합니다. light는 light이름 이며
0<=i< GL_MAX_LIGHTS를 만족허는 form GL_LIGHTi의 심볼릭 name이다.
심볼릭 name으로 Pname는 열가지 light source parameters 중의 하나를 명시한다.
params은 새로운 값을 포함하는 배열의 포인터이거나 single value이다.
Lighting 계산은 인수 GL_LIGHTING로 glEnable와 glDisable를 사용하면서 가능하게 되고
무능하게 된다. lighting이 가능하게 될 때, 가능하게 되는 light sources는 그 lighting 계산에
공헌한다. Light source i 는 argument GL_LIGHTi를 가지고 glEnable과 glDisable를 사용
하는 것에 의해 가능할수도 가능하지 않을수도 있다.

그 열가지 light parameters는 다음과 같다:

GL_AMBIENT Params는 light의 ambient RGBA intensity를 명시하는
네 정수나 floating-point 값을 포함한다.
Integer values 는 대부분의 positive representable value가 1.0에
maps되고 대부분의 negative representable value가 -1.0에
maps되는 것 같이 선형적으로 map된다.
Floating-point values는 직접적으로 mapped된다.정수와
floating-point 값은 clamped하지 않다. 그 default ambient
light intensity는 (0.0, 0.0, 0.0, 1.0).
GL_DIFFUSE Params는 light의 diffuse RGBA intensity를 명시하는
네 정수나 floating-point 값을 포함한다.
Integer values 는 대부분의 positive representable value가 1.0에
maps되고 대부분의 negative representable value가 -1.0에
maps되는 것 같이 선형적으로 map된다.
Floating-point values는 직접적으로 mapped된다.정수와
floating-point 값은 clamped하지 않다. 그 default diffuse
light intensity는 (0.0, 0.0, 0.0, 1.0). for all lights other
than light zero. 그 light zero의 default diffuse intensity는
(1.0, 1.0, 1.0, 1.0)이다.
GL_SPECULAR Params는 light의 specular RGBA intensity를
명시하는 네 정수나 floating-point 값을 포함한다.
Integer values 는 대부분의 positive representable value가 1.0에
maps되고 대부분의 negative representable value가 -1.0에
maps되는 것 같이 선형적으로 map된다.
Floating-point values는 직접적으로 mapped된다.정수와
floating-point 값은 clamped하지 않다. 그 default specular
light intensity는 (0.0, 0.0, 0.0, 1.0). for all lights other
than light zero. 그 light zero의 default specular intensity는
(1.0, 1.0, 1.0, 1.0)이다.
GL_POSITION params 동질의 객체[목표] 좌표에 있는 광의 위치를
명시하는 네 정수나 floating-point 값을 포함한다. 정수와 floating-point
값 모두는 직접적으로 도표로 나타내진다. 정수와 floating-point 값은
clamped하지 않다.
glLight이 호출될 (just as if it were a point)때 그리고 그것이
eye 좌표에 저장될때, 그 위치는 modelview 행렬에 의해
변형됩니다. 그 위치의 w 구성 요소가 0.0이라면, 그 광은 방향
자원으로 다루어진다. Diffuse 하고 specular한 lighting계산은
light의 방향을 잡는다, 그러나 actual position, into account,
그리고 attenuation은 disabled하다. 반면에 diffuse 하고 specular한
lighting 계산은 eye 좌표에 있는 light의 현실의 장소에 기반한다,
그리고 attenuation 가능하게 된다.
그 default position 은(0,0,1,0)이다; 따라서, 그 default light source
는 directional하고, parallel to하며, -z축의 방향안에서 있다.
GL_SPOT_DIRECTION params 동질의 객체[목표] 좌표에 있는 광의
방향을 명시하는 세 가지 정수나 floating-point 값을 포함한다. 정수와
floating-point 값 모두는 직접적으로 도표로 나타내진다. 정수와
floating-point 값은 clamped하지 않다.
modelview 행렬의 역에 의해 그 spot direction glLight이 호출될
(just as it it were a normal)때 변형된다. 그리고 그것은 eye
좌표에 저장된다.
GL_SPOT_CUTOFF가 디폴트에 의해 180이 아닐 때 그것은
중요하다. 그 default direction 은 (0,0,-1)이다.
GL_SPOT_EXPONENT params 는 light의 intensity distribution를 명시
하는 single integer 나 floating-point 값이다.
정수와 floating-point 값은 직접적으로 mapped된다.
단지 범위[0,128]안의 값만이 accepted된다.
효과적인 밝기는 그 light의 방향과 lighted되는 vertex에 대한
light로부터의 방향 사이의 각도의 코사인에 의해 약하게
만들어진다. 그런데, 그것은 그 즉석의 지수의 힘에 raised된다.
그 default spot exponent 는 0 이다.
GL_SPOT_CUTOFF params 는 light 소스의 maximum spread angle를
명시하는 single integer 난 floating-point 값이다.
Integer 와 floating-point 값은 직접적으로 mapped 된다.
단지 범위[0,90]안의 값과, special value 180은 accepted된다.
만일 light의 방향사이의 각도와 light로부터 lighted된 vertex로의
방향이 spot cutoff angle보다 크다면 그 light 는 완벽하게
masked된다. 반면에, 그 intensity 는 spot exponent 와 attenuation
factors에 의해 controlled된다. 그 default spot cutoff 는 180이다.
GL_CONSTANT_ATTENUATION
GL_LINEAR_ATTENUATION
GL_QUADRATIC_ATTENUATION
params 는 세 light attenuation factors중 하나를 명시하는 single
integer 나 floating-point 값이다.
Integer 와 floating-point 값은 직접적으로 mapped된다.
단지 nonnegative 값만이 accepted된다. 만일 light가 directional보다
positional 하다면, 그 intensity 는 constant factor,또 light와
lighted된 vertex사이의 거리-linear factor times, 그리고 같은
거리의 사각형-2차의 factor times- 이것들 상호간의 합들에 의해
attenuated된다.

Notes

그것은 항상 GL_LIGHTi = GL_LIGHT0 + i case이다.

Errors

light 나 pname이 accepted값이 아니라며 GL_INVALID_ENUM 은 generated된다.
spot exponent value 가 범위 [0,128]밖에서 명시되거나, spot cutoff 이 범위
[0,90](except for the special value 180)밖에서 명시되거나, negative attenuation
factor 가 명시된다면, GL_INVALID_VALUE 은 generated 된다.
glLight이 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서
실행된다면 GL_INVALID_OPERATION ON은 생성된다.

Associated Gets

glGetLight
glIsEnabled with argument GL_LIGHTING

See Also

glColorMaterial, glLightModel, glMaterial


glLightModel

 glLightModel.3gl

Name

glLightModelf, glLightModeli, glLightModelfv, glLightModeliv
- lighting model parameters를 set한다.

C Specification

void glLightModelf ( GLenum pname,
GLfloat param )
void glLightModeli ( GLenum pname,
GLint param )
void glLightModelfv ( GLenum pname,
const GLfloat *params )
void glLightModeliv ( GLenum pname,
const GLint *params )

Parameters

pname 단일값 lighting model parameter를 명시한다.
GL_LIGHT_MODEL_LOCAL_VIEWER
GL_LIGHT_MODEL_TWO_SIDE
param param이 set 되어질 값을 명시.
Description
glLightModel은 lighting model parameter를 명시한다. pname 는 parameter와
params 가 gives하는 새로운 값의 names이다. 그것들은 세 가지 lighting model
parameters이다.:
GL_LIGHT_MODEL_AMBIENT
params는 전체 장면의 ambient RGBA intensity를 명시하는 네 정수나 또는,
floating-point값을 포함 한다. Integer values 는 대부분의 positive
representable value가 1.0에 maps되고 대부분의 negative representable value가
-1.0에 maps되는 것 같이 선형적으로 map된다.
Floating-point values 는 직접적으로 map된다.
정수와 floating-point values는 clamped하지 않다. 그 default ambient scene
intensity 는 (0.2, 0.2, 0.2, 1.0)이다.
GL_LIGHT_MODEL_LOCAL_VIEWER
params 는 specular reflection angles의 계산을 명시하는 single integer 나
floating-point 값이다. params 가 0 (or 0.0)이라면, specular reflection angles
는 parallel하게 그리고 eye 좌표의 방향과 무관하게 -z axis의 방향안에서 view
direction을 잡는다. 반면에 specular reflections 는 eye 좌표 시스템의
원점(시작)으로부터 계산되어 진다. 그 default 는 0이다..
GL_LIGHT_MODEL_TWO_SIDE
params 은 1차 또는 2차 lighting 계산이 폴리곤에 대해 수행되어 진다는 것을
명시하는 single integer 또는 floating-point 값이다. 그것은 점, 라인, 또는
Bitmaps에 대한 lighting 계산에게 아무런 영향을 미치지 않는다. params 가 0
(or 0.0)이라면 one-sided lighting은 명시되고 그 정면의 자료 매개변수는 그
lighting 방정식에서 사용된다. 반면에 two-sided lighting 은 명시된다. 이
경우에 , back-facing polygons의 vertices 는 back material parameters를
사용하면서 lighted된다, 그리고 그 lighting 방정식이 평가되기 전에 그들의
표준을 반대로 가지게 된다. front-facing 폴리곤의 정점들은 항상 그들의
표준에 어떤 변경도 가지지 않은 fornt 자료 매개변수를 사용하면서
lighted된다. 그 default 는 0 이다..
RGBA mode에서, vertex의 lighted color 는 그 자료 방사 밝기, material ambient
reflectance(물질 환경 반사율)와 lighting model full-scene ambient intensity,
그리고 가능하게 된 각각의 가능한 light 자원의 contribution의 합이다. 각각의
광 자원은 세 항(ambient, diffuse, and specular)의 합계를 contributes한다. 그
ambient light source contribution 는 그 material ambient reflectance 와 the
light's ambient intensity(빛의 환경 치수)의 산물이다. diffuse한 light source
contribution 는 material diffuse reflectance, the light's diffuse intensity,그리고
그 광 자원에 대한 그 vertex로부터의 표준화된 벡터, 그 vertex표준에 대한
dot product의 산물이다. specular light source contribution 은 material
specular reflectance와, light's specular intensity, 그리고 그 자료의
shininess의 힘으로 raised되는 표준화된 vertex-to-eye 와 vertex-to-light
vectors의 dot product의 산물이다.
모든 세 light 자원 contributions는 그 light 자원으로의 그 vertxe로부터 거리로
그리고 light 자원 방향, spread exponent, 그리고 spread cutoff angle 에서
같게 기초가 놓여지면서 attenuated 된다.
그들이 부정 값까지 평가한다면, 모든 dot product는 영과 교체된다.
resulting lighted color의 alpha component 는 그 material diffuse
reflectance(물질 방산 반사율)의 alpha value 에 set된다.
GL_COLOR_INDEXES. Diffuse 하고 specular한 계수는, (.30,.59, .11) lights'
colors weighting과 , the shininess of the material, 그리고 같은(same)
reflection 와 RGBA case에서의 attenuation equations를 가지고 계산된다. ,

Errors
pname accepted value가 아니라면, GL_INVALID_ENUM 은 generated 된다.
glLightModel이 glBegin에 대한 호출과 glEnd에 대한 일치 한 호출 사이에 호출된다면
GL_INVALID_OPERATION ON은 생성된다.

Associated Gets

glGet with argument GL_LIGHT_MODEL_AMBIENT
glGet with argument GL_LIGHT_MODEL_LOCAL_VIEWER
glGet with argument GL_LIGHT_MODEL_TWO_SIDE
glIsEnabled with argument GL_LIGHTING

See Also

glLight, glMaterial


glLineStipple

 glLineStipple.3gl

Name

glLineStipple - line stipple pattern을 명시한다.

C Specification

void glLineStipple ( GLint factor,
GLushort pattern )

Parameters

factor line stipple pattern안의 각 비트 에 대한 multiplier를 명시한다.
예를 들어 factor 가 3이라면 각 비트는 그 패턴 안에서 다음 비트 전에 3번
사용되어진다. factor 는 범위[1, 256]안에서 clamped되고 하나에 defaults된다.
pattern 비트 패턴이 라인이 rasterized일 때 그려질 라인의 fragments를 결정하는
6-bit 정수를 명시합니다.
Bit 0 은 처음에 사용된다,그리고 default pattern is all ones.

Description

Line stippling은 rasterization에 의해 생산된 확실한 fragments를 밖으로 masks한다.;
그 fragments들은 그려지지 않을 것이다. masking 은 세 파라메터(the 16-bit line stipple
pattern pattern, the repeat count factor, and an integer stipple counter s.)의 사용에
의해 achieved된다. Counter s 는glBegin이 called되고 glBegin(GL_LINES)/glEnd
sequence의 각 라인 세그먼트가 generated된다면 항상 0으로 reset된다. 그것은 unit
width aliased line segment의 각 플레그먼트가 generated된 후,또는 i width line
segment의 i 플레그먼트가 generated된 후에 증가된다. count s를 가지고 associated된 i
fragments 는 pattern bit (s / factor) mod 16이 0 이라면 masked out된다,
반면에 그 플레그먼트들은 프레임 버퍼에 보내진다. pattern의 비트 0 은 최하위
비트이다.
Antialiased 라인은 stippling 목적을 위해 일련의 1xwid 사각형으로 다루어진다.
직사각형 s는 rasterized되거나 프레그먼트의 그룹보다는 직사각형을 세는 aliased lines에
대해 묘사된 플레그먼트 룰에 기반을 두지 않는다.
Line stippling 는 변수 GL_LINE_STIPPLE를 가지는 glEnable와 glDisable의 사용에
의해 가능할수도 불가능할수도 있다. enabled되었을때, 그 line stipple pattern 설명대로
적용된다. disabled일때, it is as if the pattern were all ones. 최초에, line stippling 은
disabled된다.

Errors

glLineStipple가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성된다.

Associated Gets

glGet with argument GL_LINE_STIPPLE_PATTERN
glGet with argument GL_LINE_STIPPLE_REPEAT
glIsEnabled with argument GL_LINE_STIPPLE

See Also

glLineWidth, glPolygonStipple


glLineWidth

 glLineWidth.3gl

Name

glLineWidth - rasterized의 폭을 명시한다.

C Specification
void glLineWidth ( GLfloat width )

Parameters

width rasterized lines의 폭을 명시한다. default 는 1.0이다.

Description

glLineWidth는 aliased 와 antialiased 라인의 rasterized된 폭을 명시한다.
1.0과는 다른 라인 폭을 사용하는 것은 다른 효과를 가지고 있습니다. - 라인
antialiasing이 가능하게 되든 간에 depending된다.
Line antialiasing은 인수 GL_LINE_SMOOTH로 glEnable와 glDisable를 호출하는 것에
의해 조절된다.
라인 antialiasing이 disabled된다면, 그 현실의 폭은 가장 가까운 정수로 그 공급된 폭을
둥글게 하는 것에 의해 결정된다. (If the rounding results in the value 0, it is as if the
line width were 1.). |dx| >= |dy|이라면, i pixels 은 rasterized된 각 컬럼에 채워진다,
여기서 i width의 round된 값이다. 반면에, I pixels 은 rasterized된 각 row에 채워진다.
antialiasing이 가능하게 된다면, 라인 rasterization은 그 현재의 라인 폭과 같은 라인, 그
라인의 실제 길이와 같은 길이,그리고 그 수학적인 라인 위에 중심이된 세그먼트를
가지고 있는 사각형 안에 그 lying 영역을 가로지르는 각각의 pixel 정사각형을 위해
플레그먼트를 생산한다. 각각 플레그먼트를 위한 적용범위 값은 일치 한 pixel square로
그 직사각형의 영역의 교차의 윈도우 좌표 영역이다. 이값은 최종 rasterization step에서
세이브되고 사용된다.
라인 antialiasing이 가능하게 될 때 모든 폭은 support될수 있는 것은 아니다.
unsupported한 폭이 요구된다면, 가장 가까운 support한 폭이 사용된다. 단지 폭 1.0만이
supported되기위해 guaranteede된다.; 다른 몇몇은 그 구현에 의존한다. support된 폭과
그 크기 차이의 범위는 그 범위의 안에 있는 support된 폭 사이에서 인수로 glGet을
GL_LINE_WIDTH_RANGE와 GL_LINE_WIDTH_GRANULARITY로 호출하는것에 의해
queried될수 있다.

Notes

glLineWidth에 의해 명시된 라인 폭은 GL_LINE_WIDTH 이 queried되었을 때 항상
리턴된다. aliased와 antialiased라인에 대한 Clamping 과 rounding은 그 명시된 값에게
아무런은 영향을 미치지 않는다.
Non-antialiased 라인 폭은 implementation-dependent 최대값에 clamped될수 있다.
이 최대값이 질의되지 않을지라도, 그것은 antialiased 라인에 대한 최대값보다는 작은
값이다. 그런데, 그것은 가장 가까운 정수 값에 round된다.

Errors
width가 0보다 작거나 같다면, GL_INVALID_VALUE 은 generated된다.
glLineWidth가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성됩니다.

Associated Gets

glGet with argument GL_LINE_WIDTH
glGet with argument GL_LINE_WIDTH_RANGE
glGet with argument GL_LINE_WIDTH_GRANULARITY
glisenabled with argument GL_LINE_SMOOTH

See Also

glEnable, glLineSmooth


glListBase

 glListBase.3gl

Name

glListBase - glCallLists에 대한 display-list 기준을 set한다.

C Specification

void glListBase( GLuint base )

Parameters

base display-list 이름을 생성시키기 위해 glCallLists 오프셋에 추가될 정수 오프셋을
명시합니다. 내부값은 0이다.

Description

glCallLists는 오프셋의 array를 명시한다. Display-list 이름은 각각 오프셋에 base를
더하는 것에 의해 생성된다. 유효한 디스플레이 리스트를 참조하는 Names는
executed된다; 다른것들은 무시된다.

Errors

glListBase가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서
실행된다면 GL_INVALID_OPERATION TION은 생성됩니다.

Associated Gets

glGet with argument GL_LIST_BASE

See Also

glCallLists


glLoadIdentity

 glLoadIdentity.3gl

Name

glLoadIdentity - 동일한 행렬로 현재의 행렬을 교체한다.

C Specification

void glLoadIdentity ( void )

Description

glLoadIdentity는 동일한 행렬로 현재의 행렬을 교체한다. 그것은 그 동일한 행렬을
가지고 호출하는 glLoadMatrix와 의미론적으로 동등하다.

| 1 0 0 0 |
| |
| 0 1 0 0 |
| 0 0 1 0 |
| |
| 0 0 0 1 |

그러나 몇몇 경우에, 그것이 더 효율적이다.

Errors

glLoadIdentity가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION TION은 생성된다.

Associated Gets

glGet with argument GL_MATRIX_MODE
glGet with argument GL_MODELVIEW_MATRIX
glGet with argument GL_PROJECTION_MATRIX
glGet with argument GL_TEXTURE_MATRIX

See Also

glLoadMatrix, glMatrixMode, glMultMatrix, glPushMatrix


glLoadMatrix

 glLoadMatrix.3gl

Name

glLoadMatrixd, glLoadMatrixf
- 정해지지 않은 행렬로 현재의 행렬을 교체한다.

C Specification

void glLoadMatrixd( const GLdouble *m )
void glLoadMatrixf( const GLfloat *m )

Parameters

m 연속적인 열여섯 값으로서, coumn-major order에 저장된 4x4
행렬에 대한 포인터를 명시한다.

Description

GlLoadMatrix는 m에서 명시된 하나로 그 현재의 행렬을 교체한다. 현재의 행렬은 그
투영 행렬, Modelview 행렬, 또는 그 현재의 행렬 모드에 의해 결정된 texture
행렬이다.(참조 glMatrixMode)
m은 coumn-major 명령에 저장된 single이나 배정밀도 floating-point 값의 4x4 행렬을
가리킨다. 즉,그 행렬은 다음과 같이 저장된다.

|a0 a4 a8 a12|
|a1 a5 a9 a13|
|a2 a6 a10 a14|
|a3 a7 a11 a15|

Errors
glLoadMatrix가 glBegin에 대한 호출과 glEnd에 대한 일치 한 호출 사이에 호출된다면
GL_INVALID_OPERATION TION은 생성된다.

Associated Gets
glGet with argument GL_MATRIX_MODE
glGet with argument GL_MODELVIEW_MATRIX
glGet with argument GL_PROJECTION_MATRIX
glGet with argument GL_TEXTURE_MATRIX

See Also

glLoadIdentity, glMatrixMode, glMultMatrix, glPushMatrix


glLoadName

 glLoadName.3gl

Name

glLoadName - name 스택위에 name을 로드한다.

C Specification

void glLoadName( GLuint name )

Parameters

name 그 이름 스택의 위에 있는 top value를 교체할 이름을 명시합니다.

Description

그 이름 스택은 표현의 집합이 유일하게 식별되기 위해 명령한다는 것을 허락하기 위해
선택 모드 동안 사용된다. 그것은 unsigned된 정수 중에서 정연한 집합으로 구성된다.
GlLoadName는 name이 내부적으로 비어있는 이름 스택의 top에서 그 값을 교체하게 한다.
그 이름 스택은 항상 그 rendr 모드가 GL_SELECT가 아닌 동안 empty하다.
render 모드가 GL_SELECT가 아닌 동안 glLoadName이 Calls되는것은 무시된다.

Errors

name 스택이 비어있는동안 glLoadName called된다면 GL_INVALID_OPERATION은
generated된다.
glLoadName가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성됩니다.

Associated Gets

glGet with argument GL_NAME_STACK_DEPTH
glGet with argument GL_MAX_NAME_STACK_DEPTH

See Also

glInitNames, glPushName, glRenderMode, glSelectBuffer


glLogicOp

 glLogicOp.3gl

Name

glLogicOp - 컬러 이덱스 rendering엗대한 론리적 pixel 연산을 명시한다.

C Specification

void glLogicOp( GLenum opcode )

Parameters

opcode 논리적 연산을 선택하는 심볼릭 상수를 명시한다.
다음의 symbols는 accepted된다.: GL_CLEAR, GL_SET, GL_COPY,
GL_COPY_INVERTED, GL_NOOP, GL_INVERT, GL_AND, GL_NAND,
GL_OR, GL_NOR, GL_XOR, GL_EQUIV, GL_AND_REVERSE,
GL_AND_INVERTED, GL_OR_REVERSE, and GL_OR_INVERTED.

Description

GlLogicOp는 가능하게 되었때 그 들어오는 컬러 인덱스와 그 프레임의 버퍼에 일치 한
장소에서의 컬러 인덱스에 적용되는 논리적인 연산을 명시한다. 그 논리적 연산은 심볼릭
상수 GL_LOGIC_OP를 사용하는 glEnable와 glDisable로 가능 또는 무능하게 만들어진다.
opcode는 그 리스트로 밑으로부터 선택된 상징적인 상수이다. 그 논리적 연산의
설명에서, s는 들어오는 컬러 인덱스를 나타내고 d는 그 프레임의 버퍼에서 그 인덱스를
나타낸다. Standard C-language operators 가 사용된다.이 bitwise 오퍼레이터가 제안하는
대로, 그 논리적 연산은 그 자원과 목적지 indices의 각각의 비트 쌍에 독립하여
적용되어진다.

opcode
resulting value

GL_CLEAR
GL_SET
GL_COPY
GL_COPY_INVERTED
GL_NOOP
GL_INVERT
GL_AND
GL_NAND
GL_OR
GL_NOR
GL_XOR
GL_EQUIV
GL_AND_REVERSE
GL_AND_INVERTED
GL_OR_REVERSE
GL_OR_INVERTED

0
1
s
!s
d
!d
s &amp; d
!(s &amp; d)
s | d
!(s | d)
s ^ d
!(s ^ d)
s &amp; !d
!s &amp; d
s | !d
!s | d

Notes

논리적 pixel 연산은 RGBA 컬러 버퍼에 적용되어지지 않는다
하나 이상의 컬러 인덱스 버퍼가 그리는 것이 가능하게 될 때, 논리적 연산은 각 가능한
버퍼에 대해 독립적으로 수행된다. 그리고 그 목적지 인덱스 위해 그 버퍼의 내용을
사용한다.(참조glDrawBuffer)
opcode 는 열여섯 accepted values중 하나이다. 다른 값들은 결과적으로 에러이다.

Errors

opcode가 accepted value가 아니라면, GL_INVALID_ENUM 는 generated된다.
glLogicOp이 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성됩니다.

Associated Gets

glGet with argument GL_LOGIC_OP_MODE
glIsEnabled with argument GL_LOGIC_OP
See Also
glAlphaFunc, glBlendFunc, glDrawBuffer, glEnable, glStencilOp


glMap1

 glMap1.3gl

Name

glMap1d, glMap1f - 일차원 evaluator를 명시한다.

C Specification

void glMap1d( GLenum target,
GLdouble u1,
GLdouble u2,
GLint stride,
GLint order,
const GLdouble *points )
void glMap1f( GLenum target,
GLfloat u1,
GLfloat u2,
GLint stride,
GLint order,
const GLfloat *points )

Parameters

target evaluator에의해 generated된 값들의 종류를 명시한다.
Symbolic constants GL_MAP1_VERTEX_3, GL_MAP1_VERTEX_4,
GL_MAP1_INDEX, GL_MAP1_COLOR_4, GL_MAP1_NORMAL,
GL_MAP1_TEXTURE_COORD_1, GL_MAP1_TEXTURE_COORD_2,
GL_MAP1_TEXTURE_COORD_3, and GL_MAP1_TEXTURE_COORD_4
u1, u2 이 명령(glEvalCoord1)에 의해 명시된 방정식에 의해 평가되는 변수 u가
glEvalCoord1에 presented되는 것 같이 u의 선형적 mapping을 명시한다.
stride points안에 참조된 데이터 구조에서 하나의 control포인트의 시작과 다른 하나의
시작사이에서의 floats 와 doubles의 수를 명시한다. 이것은 정해지지 않은
데이터 구조안에 끼워넣어진 control points를 allow(인정)한다. 특정한 control
포인트에대한 값 constraint 은 반드시 인접한 메모리 로케이션을 점유한다.
order control 포이트의 수를 명시한다. 그것은 positive하다.
points control 포이트의 array를 가리키는 포인터를 명시한다.

Description

evaluators는 생산된 vertices, normals, texture coordinates, 그리고 colors에
polynomial(다항식) or rational polynomial mapping(유리수 다항식 메핑)을 사용하는
방법을 준비한다. evaluator에 의해 생산된 값은 glVerTex, glNormal, glTexCoord 그리고
glColor명령 사용이present된다면 갱신되지 않은 현재의 normal, texture coordinates,
또는 color의 generated된 값이 제외되는 것같이 GL프로세싱의 further stages에 보내진다.
어떤 차수의(up to GL실행에 의해 supported된 최대 차수) 모든 polynomial 이나 rational
polynomial splines은 evaluators사용에 묘사될수 있다.
이것들은 컴퓨터 그래픽스에서 사용된 거의 모든 splines을 포함한다.- B-splines, Bezier
curves, Hermite splines, 등등.
glMap1은 basis와 생산된 값들의 종류의 명시를 정의하는데 사용된다. 한번 정의된
map은 map name(아래로 묘사된 target의 9개의 미리 정의된 값 중 하나)를 가진
glEnable와 glDisable의 호출에의해 enabled하고 disabled할수 있다.
glEvalCoord1는 가능한 1차원 maps를 평가한다.
target 은 control 포이트가 points에서 provide되고 output이 map가 평가되었을
때generated된 것을 가리키는 심볼릭 상수이다. 그것은 9가지 미리정의된 값중 하나라고
가정할 수 있다:

GL_MAP1_VERTEX_3 각 control point 는 x,y,z를 가리키는 세가지 floating-point
values이다.
내부 glVertex3 명령은 map이 평가될 때 generated된다.
GL_MAP1_VERTEX_4 각 control point 는 x,y,z,w를 가리키는 네 가지 floating-point
values이다. 내부 glVertex4 명령은 map이 평가될 때
generated된다.
GL_MAP1_INDEX 각control point 는 컬러 인덱슬를 가리는 single floating-point
value이다. 내부 glIndex명령은 map가 평가되었을 때
generated된다. 현재의 인덱스는 glIndex의 값을 가지고
갱신되진 않는다.
GL_MAP1_COLOR_4 각 control point 는 red, green, blue, and alpha를 가리키는 네
가지 floating-point values이다.
내부 glColor4명령은 map가 평가되었을 때 generated된다.
현재의 컬러는 glColor4 commands의 값을 가지고 갱신되지
않는다.
GL_MAP1_NORMAL 각 control point 는 normal 벡터의 구성 x,y,z를 가리키는
세가지 floating-point values이다. 내부 glNormal명령은
map가 평가되었을 때 generated된다.현재의
normal은glNormal명령의 값을 갖고 갱신되지 않는다.
GL_MAP1_TEXTURE_COORD_1 각 control point 는 s texture coordinate를 가리키는
single floating-point value이다. 내부 glTexCoord1
commands 는 map가 평가되었을 때 generated된다. 현재의
texture coordinates 는 glTexCoord 명령을 가지고 갱신되지
않는다.
GL_MAP1_TEXTURE_COORD_2 각 control point 는 s and t texture coordinates를
가리키는 two floating-point values이다. 내부 glTexCoord2
명령은 map이 평가되었을 때 generated된다. 현재의
texture coordinates 는 glTexCoord 명령을 가지고 갱신되지
않는다.
GL_MAP1_TEXTURE_COORD_3 각 control point 는 s, t, r texture coordinates를
가리키는 three floating-point values이다. 내부 glTexCoord3
명령은 map이 평가되었을 때 generated된다. 현재의
texture coordinates 는 glTexCoord 명령을 가지고 갱신되지
않는다.
GL_MAP1_TEXTURE_COORD_4 각 control point 는 s, t, r, q texture coordinates를
가리키는 four floating-point values이다. 내부 glTexCoord4
명령은 map이 평가되었을 때 generated된다. 현재의
texture coordinates 는 glTexCoord 명령을 가지고 갱신되지
않는다.

stride, order, and points 는 contor포인트 엑세싱에 대한 array addressing을 정의한다.
points 는 정의된 map에 의존하는 one, two, three, or four 연속적 메모리 locations을
점유하는 첫 번째 control 포인트의 장소이다. order 는 array안의 control points의 수이다.
stride는 얼마나 많은 float or double locations이 advance되었는지, 그 내부 메모리
포인터가 다음 컨트롤 포인트에 도착하였는지를 나타내다.

Errors

target 이 accepted value가 아니라면. GL_INVALID_ENUM 는 generated된다.
u1 이 u2과 같다면, GL_INVALID_VALUE 은 generated 된다.
stride가 컨트롤 포인트내의 값의 수보다 작다면, GL_INVALID_VALUE은
generated된다.
order 가 1보다 작거나 GL_MAX_EVAL_ORDER보다 크다면, GL_INVALID_VALUE 은
generated된다.
glMap가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성됩니다.

Associated Gets

glGetMap
glGet with argument GL_MAX_EVAL_ORDER
glIsEnabled with argument GL_MAP1_VERTEX_3
glIsEnabled with argument GL_MAP1_VERTEX_4
glIsEnabled with argument GL_MAP1_INDEX
glIsEnabled with argument GL_MAP1_COLOR_4
glIsEnabled with argument GL_MAP1_NORMAL
glIsEnabled with argument GL_MAP1_TEXTURE_COORD_1
glIsEnabled with argument GL_MAP1_TEXTURE_COORD_2
glIsEnabled with argument GL_MAP1_TEXTURE_COORD_3
glIsEnabled with argument GL_MAP1_TEXTURE_COORD_4

See Also

glBegin, glColir, glEnabl, glEvalCoord, glEvalMesh, glEVALpoint, glMap2


glMap2

 glMap2.3gl

Name

glMap2d, glMap2f - 2차원 evaluator를정의 한다.

C Specification

void glMap2d( GLenum target,
GLdouble u1,
GLdouble u2,
GLint ustride,
GLint uorder,
GLdouble v1,
GLdouble v2,
GLint vstride,
GLint vorder,
const GLdouble *points )
void glMap2f( GLenum target,
GLfloat u1,
GLfloat u2,
GLint ustride,
GLint uorder,
GLfloat v1,
GLfloat v2,
GLint vstride,
GLint vorder,
const GLfloat *points )

Parameters

target evaluator에 의해 generated된 값들의 종류를 명시한다.
Symbolic constants GL_MAP2_VERTEX_3, GL_MAP2_VERTEX_4,
GL_MAP2_INDEX, GL_MAP2_COLOR_4, GL_MAP2_NORMAL,
GL_MAP2_TEXTURE_COORD_1, GL_MAP2_TEXTURE_COORD_2,
GL_MAP2_TEXTURE_COORD_3, and GL_MAP2_TEXTURE_COORD_4
u1, u2 glEvalCoord2, u에 presented된 것 같이 u의 선형적 mapping을 명시한다.
- 이 명령에 의해 명시된 방정식에 의해 평가된 두 값중 하나.
ustride control 포인트 R 의 시작과 control 포인트 R, i 와 j 가 u와v의 컨트롤 포이트
인덱스일 때 ij (i+1)j 사이에서 floats 나 doubles의 수를 명시한다.
이 allows control points는 정해지지 않은 데이터 구조에서 embedded된다.
단지 constraint만이 연속된 메모리 장소에 점유된 특정한 control포인트에 대한
값이다.
uorder u axis안의 control 포인트 array의 범위를 명시한다. 이것은 positive하다.
v1, v2 glEvalCoord2, v에 presented된 것 같이 v의 선형적 mapping을 명시한다.
- 이 명령에 의해 명시된 방정식에 의해 평가된 두 값중 하나.
vstride control 포인트 R 의 시작과 control 포인트 R, i 와 j 가 u와v의 컨트롤 포이트
인덱스일 때 ij (i+1)j 사이에서 floats 나 doubles의 수를 명시한다.
이 allows control points는 정해지지 않은 데이터 구조에서 embedded된다.
단지 constraint만이 연속된 메모리 장소에 점유된 특정한 control포인트에 대한
값이다.
vorder v axis안의 control 포인트 array의 범위를 명시한다. 이것은 positive하다.
points control 포인트의 array포인터를 명시한다.

Description

Evaluators provide a way to use pevaluators는 생산된 vertices, normals, texture
coordinates, 그리고 colors에 polynomial(다항식) or rational polynomial mapping(유리수
다항식 메핑)을 사용하는 방법을 준비한다. evaluator에 의해 생산된 값은 glVerTex,
glNormal, glTexCoord 그리고 glColor명령 사용이present된다면 갱신되지 않은 현재의
normal, texture coordinates, 또는 color의 generated된 값이 제외되는 것같이
GL프로세싱의 further stages에 보내진다.
어떤 차수의(up to GL실행에 의해 supported된 최대 차수) 모든 polynomial 이나 rational
polynomial splines은 evaluators사용에 묘사될수 있다.
이것들은 컴퓨터 그래픽스에서 사용된 거의 모든 splines을 포함한다.- B-spline surfaces,
NURBS surfaces, Bezier surfaces 등등.
Evaluators는 Bernstein polynomials에 기초를 둔 곡선을 정의한다.
glMap1은 basis와 생산된 값들의 종류의 명시를 정의하는데 사용된다. 한번 정의된
map은 map name(아래로 묘사된 target의 9개의 미리 정의된 값 중 하나)를 가진
glEnable와 glDisable의 호출에의해 enabled하고 disabled할수 있다.
glEvalCoord2이 u의 현재의 값일때, Bernstein functions 는 u와v 사용을 evaluated한다.
target 은 control 포이트가 points에서 provide되고 output이 map가 평가되었을
때generated된 것을 가리키는 심볼릭 상수이다. 그것은 9가지 미리정의된 값중 하나라고
가정할 수 있다:
GL_MAP2_VERTEX_3 각 control point 는 x,y,z를 가리키는 세가지
floating-point values이다.
내부 glVertex3 명령은 map이 평가될 때 generated된다.
GL_MAP2_VERTEX_4 각 control point 는 x,y,z,w를 가리키는 네 가지 floating-point
values이다. 내부 glVertex4 명령은 map이 평가될 때
generated된다.
GL_MAP2_INDEX 각control point 는 컬러 인덱슬를 가리는 single floating-point
value이다. 내부 glIndex명령은 map가 평가되었을 때
generated된다. 현재의 인덱스는 glIndex의 값을 가지고
갱신되진 않는다.
GL_MAP2_COLOR_4 각 control point 는 red, green, blue, and alpha를 가리키는 네
가지 floating-point values이다.
내부 glColor4명령은 map가 평가되었을 때 generated된다.
현재의 컬러는 glColor4 commands의 값을 가지고 갱신되지
않는다.
GL_MAP2_NORMAL 각 control point 는 normal 벡터의 구성 x,y,z를 가리키는
세가지 floating-point values이다. 내부 glNormal명령은
map가 평가되었을 때 generated된다.현재의
normal은glNormal명령의 값을 갖고 갱신되지 않는다.
GL_MAP2_TEXTURE_COORD_1 각 control point 는 s texture coordinate를 가리키는
single floating-point value이다. 내부 glTexCoord1
commands 는 map가 평가되었을 때 generated된다. 현재의
texture coordinates 는 glTexCoord 명령을 가지고 갱신되지
않는다.
GL_MAP2_TEXTURE_COORD_2 각 control point 는 s and t texture coordinates를
가리키는 two floating-point values이다. 내부 glTexCoord2
명령은 map이 평가되었을 때 generated된다. 현재의
texture coordinates 는 glTexCoord 명령을 가지고 갱신되지
않는다.
GL_MAP2_TEXTURE_COORD_3 각 control point 는 s, t, r texture coordinates를
가리키는 three floating-point values이다. 내부 glTexCoord3
명령은 map이 평가되었을 때 generated된다. 현재의
texture coordinates 는 glTexCoord 명령을 가지고 갱신되지
않는다.
GL_MAP2_TEXTURE_COORD_4 각 control point 는 s, t, r, q texture coordinates를
가리키는 four floating-point values이다. 내부 glTexCoord4
명령은 map이 평가되었을 때 generated된다. 현재의
texture coordinates 는 glTexCoord 명령을 가지고 갱신되지
않는다.
ustride, uorder, vstride, vorder, and points 는 contor포인트 엑세싱에 대한 array
addressing을 정의한다. points 는 정의된 map에 의존하는 one, two, three, or four 연속적
메모리 locations을 점유하는 첫 번째 control 포인트의 장소이다.
이것들은 array안의 uorderxvorder control points이다. ustride, vstride 는 얼마나 많은
float or double locations 이 control 포이트 R에서 control 포이트 R의 내부 메모리
포인터가 advance되는 것이 스킵되었는지를 나타낸다.

Errors
target 이 accepted value가 아니라면. GL_INVALID_ENUM 는 generated된다.
u1 이 u2 또는, v1이 v2 와 같다면, GL_INVALID_VALUE 은 generated 된다.
ustride, vstride 가 컨트롤 포인트내의 값의 수보다 작다면, GL_INVALID_VALUE은
generated된다.
uorder, vorder 가 1보다 작거나 GL_MAX_EVAL_ORDER보다 크다면,
GL_INVALID_VALUE 은 generated된다.
glMap2가 glBegin 중의 실행과 glEnd 중의 일치 한 실행 사이에서 실행된다면
GL_INVALID_OPERATION은 생성됩니다.

associated Gets

glGetmap
glGet with argument GL_MAX_EVAL_ORDER
glIsEnabled with argument GL_MAP2_VERTEX_3
glIsEnabled with argument GL_MAP2_VERTEX_4
glIsEnabled with argument GL_MAP2_INDEX
glIsEnabled with argument GL_MAP2_COLOR_4
glIsEnabled with argument GL_MAP2_NORMAL
glIsEnabled with argument GL_MAP2_TEXTURE_COORD_1
glIsEnabled with argument GL_MAP2_TEXTURE_COORD_2
glIsEnabled with argument GL_MAP2_TEXTURE_COORD_3
glIsEnabled with argument GL_MAP2_TEXTURE_COORD_4

See Also

glBegin, glColir, glEnabl, glEvalCoord, glEvalMesh, glEVALpoint, glMap1,
glMapGrid, glNormal, glTexCoord, glVertex


glMapGrid

 glMapGrid.3gl

Name

glMapGrid1d, glMapGrid1f, glMapGrid2d, glMapGrid2f
- 1차원 또는 2차원 mesh를 정의한다.

C Specification

void glMapGrid1d( GLint un,
GLdouble u1,
GLdouble u2 )
void glMapGrid1f( GLint un,
GLfloat u1,
GLfloat u2 )
void glMapGrid2d( GLint un,
GLdouble u1,
GLdouble u2,
GLint vn,
GLdouble v1,
GLdouble v2 )
void glMapGrid2f( GLint un,
GLfloat u1,
GLfloat u2,
GLint vn,
GLfloat v1,
GLfloat v2 )

Parameters

un 내부 grid range [u1, u2]내의 파티션의 수를 명시한다.
Must be positive.
u1, u2
integer grid domain values i=0 and i=un에 대한 메핑을 명시한다.
vn 내부 grid range [v1, v2]내의 파티션의 수를 명시한다.
(glMapGrid2 only).
v1, v2
integer grid domain values i=0 and i=vn에 대한 메핑을 명시한다.
(glMapGrid2 only).

Description

glMapGrid 와 glEvalMesh 는 efficiently generate하고 고르게 spaced한 map domain
values의 연속적 평가의 tandem안에서 사용된다. glEvalMesh는 glMap1 과 glMap2에 의해
명시된 방정식 map의 도메인의 범위인 1차 또는 2차원 grid의 integer domain까지의
step이다.
glMapGrid1 와 glMapGrid2는 i(or i and j) integer grid 좌표와 u(or u and v)
floating-point evaluation map 좌표-사이의 선형적 grid mappings을 명시한다.
u 와 v좌표가 평가된 방법의 detail에 대한 glMap1와 glMap2를 보시오.
glMapGrid1는 정수 grid 좌표 0이 정확히 u1에 map되고, 정수 grid좌표 un이 정확히
u2에 map되는 것을 만족하는 single linear mapping 명시한다.
나머지 모든 integer grid 좌표 i 는 u = i(u2-u1)/un + u1를 만족하면서 map된다.
glMapGrid2는 두 선형적 mapping을 명시한다. 그중 하나는 integer grid 좌표 i=0이
정확히 u1에 map되고 integer grid 좌표 i=un는 정확히 u2에 map된다. 다른 하나는
integer grid 좌표 j=0이 정확히 v1에 map되고 integer grid 좌표 j=vn이 정확히 v2에
map된다. 나머지 integre grid 좌표 i와 j는 다음 수식을 만족한면서 map된다.
u = i(u2-u1)/un + u1
v = j(v2-v1)/vn + v1
그 mappings은 glMapGrid이 glEvalMesh와 glEvalPoint에 의해 동일하게 사용되는 것에
의해 명시된다.

Errors

un 나 vn 중 어는하나가 positive가 아니라면, GL_INVALID_VALUE 은 generated 된다.
glMapGrid가 glBegin 중의 호출과 glEnd 중의 일치 한 호출 사이에서 호출된다면
GL_INVALID_OPERATION은 생성됩니다.

Associated Gets

glGet with argument GL_MAP1_GRID_DOMAIN
glGet with argument GL_MAP2_GRID_DOMAIN
glGet with argument GL_MAP1_GRID_SEGMENTS
glGet with argument GL_MAP2_GRID_SEGMENTS

See Also

glEvalCoord, glEvalMesh, glEvalPoint, glMap1, glMap2


glMaterial

 glMaterial.3gl

Name

glMaterialf, glMateriali, glMaterialfv, glMaterialiv
- lighting 모델에 대한 물질 파라메터를 명시한다.

C Specification

void glMaterialf( GLenum face,
GLenum pname,
GLfloat param )
void glMateriali( GLenum face,
GLenum pname,
GLint param )

Parameters

face face 나 faces가 갱신 됨을 명시한다.
GL_FRONT, GL_BACK, 또는 GL_FRONT_AND_BACK중의 하나를 사용한다.
pname face의 단일값 물질 파라메터나 갱신된 faces를 명시한다.
GL_SHININESS이여야 한다.
param 파라메터 GL_SHININESS이 set될 값을 명시한다.

C Specification

void glMaterialfv( GLenum face,
GLenum pname,
const GLfloat *params )
void glMaterialiv( GLenum face,
GLenum pname,
const GLint *params )

Parameters

face face 나 faces가 갱신 됨을 명시한다.
GL_FRONT, GL_BACK, GL_FRONT_AND_BACK중의 하나이다.
pname face의 파라메터나 갱신된 faces를 명시한다.
GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, GL_SHININESS,
GL_AMBIENT_AND_DIFFUSE, or GL_COLOR_INDEXES 중의 하나이다.
params pname이 set될 값이나 그 값에 대한 포이터를 명시한다.

Description

glMaterial은 물질 파라메터 값을 할당한다. 그것들은 물질 파라메터의 two matched
sets이다. 하나는, shade points, lines, bitmaps, 그리고 polygons (two-sided lighting이
disabled되었을때)에 사용된 front-facing set이거나 단지 , front-facing polygons이다(when
two-sided lighting이 enabled되었을때). 다른 set은 단지 two-sided lighting 이
enabled되었을 때 shade back-facing polygons에 사용된 back-facing이다. 단일면 과 2면
lighting calculations에 관하여 detail에 관한 glLightModel 참조 페이지에 귀착시킨다.
glMaterial은 세가지의 독립변수를 갖는다. 그 첫 번째 face는 GL_FRONT materials, the
GL_BACK materials, 나 변경된 GL_FRONT_AND_BACK materials을 명시한다. 두 번째 ,
pname는 변경된 하나,또는 양쪽의 set안에서 여러 가지 파라메터를 명시한다. 세 번째
params는 명시된 파라메터에 할당된 값을 명시한다.
Material 파라메터들은 lighting 방정식- 임의적으로 적용된 각 정점-에서 사용된다. 그
방정식들은 glLightModel 참조 페이지 안에서 논의된다. glMaterial 사용이 명시될수 있고 ,
lighting 방정식에 의해 해석되어지는 파라메터들은 다음과 같다.:
GL_AMBIENT params는 물질의 ambient RGBA 반사율을 명시하는 네 정수나
floating-point 값을 포함한다. 정수값은 대부분의 positive 는 1.0에
map되는 것으로 그리고 대부분의 negative는 -1.0에 map되는
것으로 표현되는 것 같이 선형적으로 map된다.
Floating-point 값은 직접적으로 map된다. 정수나 floating-point 값
모두는 clamped하지 않다. 물질의 front 와 back-facing에 대한
default ambient 반사율은 (0.2, 0.2, 0.2, 1.0)이다.
GL_DIFFUSE params는 물질의 diffuse RGBA 반사율을 명시하는 네 정수나
floating-point 값을 포함한다. 정수값은 대부분의 positive 는 1.0에
map되는 것으로 그리고 대부분의 negative는 -1.0에 map되는
것으로 표현되는 것 같이 선형적으로 map된다.
Floating-point 값은 직접적으로 map된다. 정수나 floating-point 값
모두는 clamped하지 않다. 물질의 front 와 back-facing에 대한
default diffuse 반사율은 (0.8, 0.8, 0.8, 1.0)이다.
GL_SPECULAR params는 물질의 specular RGBA 반사율을 명시하는 네
정수나 floating-point 값을 포함한다. 정수값은 대부분의 positive
는 1.0에 map되는 것으로 그리고 대부분의 negative는 -1.0에
map되는것으로 표현되는 것 같이 선형적으로 map된다.
Floating-point 값은 직접적으로 map된다. 정수나 floating-point
값 모두는 clamped하지 않다. 물질의 front 와 back-facing에
대한 default specular 반사율은 (0.0, 0.0, 0.0, 1.0)이다.
GL_EMISSION params는 물질의 RGBA 방사된 빛의 강도를 명시하는 네
정수나 floating-point 값을 포함한다. 정수값은 대부분의 positive
는 1.0에 map되는 것으로 그리고 대부분의 negative는 -1.0에
map되는것으로 표현되는 것 같이 선형적으로 map된다.
Floating-point 값은 직접적으로 map된다. 정수나 floating-point
값 모두는 clamped하지 않다. 물질의 front 와 back-facing에
대한 default 방사 강도는 (0.0, 0.0, 0.0, 1.0)이다.
GL_SHININESS params는 물질의 RGBA specular exponent(멱지수)를
명시하는 하나의 정수나 floating-point 값을 포함한다.
정수와 floating-point 값은 직접적으로 map된다.
단지 범위 [0,128]안의 값만이 인정된다. 물질의 front 와
back-facing에 대한 default specular exponent(멱지수)는 0이다.
GL_AMBIENT_AND_DIFFUSE
glMaterial은 같은종류의 파라메터 값을 가지고 두 번 호출된다.
한번은 GL_AMBIENT 그리고 또 한번은 GL_DIFFUSE.
GL_COLOR_INDEXES params는 ambient, diffuse, specular lighting에 대한 컬러
인덱스들을 명시하는 세 정수나 floating-point 값을 포함한다. 이 세 값과
GL_SHININESS는 단지 color index mode lighting equation에 의해 사용된 물질
값들이다. 컬러 이덱스 lighting의 논의에 대한 glLightModel 참조 페이지에 귀착시킨다.

Notes

물질 파라메터는 언제라도 갱신 될 수 있다. 특별하게 glMateral은 glBegin 중의 호출과
glEnd 중의 일치 한 호출 사이에서 호출될수 있다. 그러나 단지 단이값 물질 파라메터가
정점에 대하여 변화한다면 glColorMaterial이 glMaterial에 우선한다.(참조 glColorMaterial)

Errors

face 나 pname, 어느 하나가 accepted값이 아니라면, GL_INVALID_ENUM 은
generated된다.
specular exponent(멱지수)가 범위 [0,128]밖에 있는 것이
명시된다면. GL_INVALID_VALUE 은 generated된다.

Associated Gets

glGetMaterial

See Also

glColorMaterial, glLight, glLightModel


glMatrixMode

 glMatrixMode.3gl

Name

glMatrixMode - matrix를 정확한 matrix로 규격화 시킨다.

C Specification

void glMatrixMode(GLenum mode)

Parameters

mode mateix stack : 다음의 mateix 연산자를 위한 타킷으로 규격화된다. 이 세 값이 적용된다: GL_MODELVIEW, GL_PROJECTION, 그리고 GL_TEXTURE인데, default 값은 GL_MODELVIEW이다.
Description
glMatrixMode 정확한 matrix mode를 열거한다. mode3개의 값 중 하나로 추정된다.
GL_MODELVIEW : matrix stack을 볼 수 있는 다음의 matrix 연산자로 적용된다.
GL_PROJECTION : matrix stack을 투영되는 다음의 matrix 연산자로 적용된다.
GL_TEXTURE : matrix stack을 조직하는 다음의 matrix 연산자로 적용된다.

Errors

GL_INVALID_ENUM 일반적으로 mode가 적용되지 않는다면 발생시킨다.
GL_INVALID_OPERATION glMatrixMode가 glBegin의 수행과 대응하는 glEnd 수행사이에서 수행되어진다

Associated Gets

glGet with argument GL_MATRIX_MODE

See Also

glLoadMatrix, glPushMatrix


glMultMatrix

 glMultMatrix.3gl

Name

glMultMatrixd, glMultMatrixf - 독립의 matrix에 의해 정확한 matrix로 곱해진다.

C Specification

void glMultMatrixd(const GLdouble *m)
void glMultMatrixf(const GLfloat *m)

Parameters

m 16개의 연속된 값을 컬럼처럼 16개의 저장된 pointer로 표시한다.

Description

glMultMatrix
하나의 명시된 m과 함께 현재의 matrix로 곱한다. 다시말해 M이 지금의 matrix이고 T가 지나간 glMultMatrix라면, 그리고나서 M은 M◎T로 대신한다. 지금의 matrix는 투영된 matrix, 모델을 볼 수 있는 matrix이고 또한 조직 matrix, 지금의 matrix mode로 결정된 (glMatrixMode를 참고).
m은 column-major order처럼 저장되어진 1-2배의 소수점의 4x4 matrix를 가리킨다. 다시말해
|a0 a4 a8 a12|
|a1 a5 a9 a13|
|a2 a6 a10 a14|
|a3 a7 a11 a15| 처럼저장된다.
Errors
GL_INVALID_OPERATION glMultMatrix는 glBegin의 실행과 상응하는 glEnd 실행 사이에서 정의될때 발생한다..

Associated Gets

glGet with argument GL_MATRIX_MODE
glGet with argument GL_MODELVIEW_MATRIX
glGet with argument GL_PROJECTION_MATRIX
glGet with argument GL_TEXTURE_MATRIX

See Also

glMatrixMode, glLoadIdentity, glLoadMatrix, glPushMatrix


glNewList

 glNewList.3gl

Name

glNewList, glEndList - 열거한 list를 생성하거나 대체한다.

C Specification

void glNewList(GLuint list, GLenum mode)

Parameters

list list name을열거한다.
mode 완전한GL_COMPILE 나 GL_COMPILE_AND_EXECUTE로 모드로 열거한다.

C Specification

void glEndList(void)

Description

열거한 리스트는 다음에 실행에 의해 저장되어진 GL의 그룹들이다. 열거한 리스트는 glNewList에 의해 만들어진다.
모든 다음의 명령어들은 glEndList가 호출되기 전까지 열거한 리스트에 의해 결정된다. glNewList는 두개의 인자를 가진다. 첫번째 인자는 열거한 리스트를 위해 유일하게 이름 붙여진 명확 정수형list이다. 이름들은 glGenLists에 언급되거나 생성될 수 있고 glIsList에 유일하게 시험되어진다. 두번째인자는 두개의 값으로 추측할 수 있는 상징적인 정수인 mode이다.
GL_COMPILE 명령어는 단지 컴파일만 한다.
GL_COMPILE_AND_EXECUTE 명령어에 의해 열거된 리스트는 컴파일되어진 것처럼 실행된다.
어떤 명령들은 열거한 list에 컴파일되지는 않는다. 그러나 열거한 리스트모드로 고려되지 않는 즉시 실행된다. 이런 명령어들은 glIsList, glGenLists, glDeleteLists, glFeedbackBuffer, glSelectBuffer, glRenderMode, glReadPixels, glPixelStore, glFlush, glFinish, glIsEnabled, 그리고 glGet계열의 모든 명령어들이다.
glEndList를 만났을 때는, 열거된 리스트의 정의는 유일한 이름의 리스트(glNewList 명령어들에 명시되어진) 에 연상되어진 것에 의해 완성되어진다.

Notes

glCallList와 glCallLists는 display lists로 들어갈 수 있다. 열거한 스트의 명령어들이 나리스트들은 심지어 리스트 생성 모드가 GL_COMPILE_AND_EXECUTE이거나 열거된 리스트생성이 포함되지 않은 glCallList 또는 glCallLists에 실행되어진다. 하나의 열거된 리스트는 단지 명령어나 인자들의 그룹이다. 그래서 에러들은 리스트가 실핼할때 일반화되어진 열거된 리스트에서 명령어들에 일반화 되어진다.
만약 리스트가 GL_COMPILE mode를 생성한다면, 에러들은 리스트가 실행되기 전까지 명시되지 않는다.

Errors

GL_INVALID_VALUE list가 0일 경우에 해당한다.
GL_INVALID_ENUM mode가 제대로 된 값이 아닐 경우 해당한다.
GL_INVALID_OPERATION glEndList가 바로 앞의 glNewList 없이 호출되어지거나, glNewList가 열거한 리스트가 정의되는 동안 호출되었을때 명시되어진다.
GL_INVALID_OPERATION glNewList나 glEndList는 glBegin과 glEnd의 사이에서 정의되는 실행에서 표현해야 한다.
GL_OUT_OF_MEMORY 열거된 리스트가 컴파일할 충분할 메모리가 있을때 명시된다.

Associated Gets

glIsList

See Also

glCallList, glCallLists, glDeleteLists, glGenLists


glNormal

 glNormal.3gl

Name

glNormal3b, glNormal3d, glNormal3f, glNormal3i, glNormal3s, glNormal3bv, glNormal3dv, glNormal3fv, glNormal3iv, glNormal3sv
- 다음 정점에 대한 표면 수직이나 지정된 정점의 세트를 정의한다.

C Specification

void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
void glNormal3i(GLint nx,GLint ny,GLint nz)
void glNormal3s(GLshort nx,GLshort ny,GLshort nz)

Parameters

nx, ny, nz 새로운 기준의 x, y, z를 명시한다. 그 최초의 설정좌표는 (0,0,1) 이다.

C Specification

void glNormal3bv(const GLbyte *v)
void glNormal3dv(const GLdouble *v)
void glNormal3fv(const GLfloat *v)
void glNormal3iv(const GLint *v)
void glNormal3sv(const GLshort *v)

Parameters

v 3개의 요소 array pointer를 명시한다. 최초의 설정좌표는 x, y, z이다.

Description

현재의 표준은 glNormal이 실행될때마다 주어진 좌표를 설정한다. 바이트, 쇼트, 정수형인자는 선형을 가진 소수점 형태의 포맷으로 전환한다. 표준화가 가능하면, 표준은 변형후에 표준화되어지는 glNormal로 명시된다. 표준화는 GL_NORMALIZE 인자를 가진 glDisable와 제어해 사용할 수 있는 glEnable이다.

Notes

현재의 표준은 동시에 개량되어 질 수 있다.
특별하게, glNormal은 상응되는 호출하는 glEnd과 호출되는 glBegin 사이에서 호출될 수 있다.

Associated Gets

glGet with argument GL_CURRENT_NORMAL
glIsEnable with argument GL_NORMALIZE

See Also

glBegin, glColor, glIndex, glTexCoord, glVertex


glNormalPointerEXT

 glNormalPointerEXT.3gl

Name

glNormalPointerEXT - 표준의 배열을 정의한다.

C Specification

void glNormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)

Parameters

type 배열에서 각각의 좌표의 data타입을 정의한다. 상징적인 상수들은 GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT, 또는 GL_DOUBLE_EXT로 적용된다.
stride 바이트들은 연속성 사이에서 차감되어진것을 정의한다.
count 표준의 처음으로 계산된 수나 정적인 수를 정의한다.
pointer 배열에서 첫번째 표준의 서로 다른 포인터를 정의한다.

Description

glNormalPointerEXT는 꼭지점의 정렬의 신장을 사용하는걸 그릴때 사용하기 위한 표준의 정렬의 data 포맷이나 주소를 정의한다.
type은 표준의 서로 다른것들의 data 타입을 정의하거나 stride는 나누어진 배열에서 저장되거나 하나의 배열에서 꽉 채워진 속성과 다음의 허용된 꼭지점의 하나의 표준으로부터 바이트로 증가를 준다. (단독 배열의 저장은 같은 실행에서 더 많은 효과를 준다.)
count는 각각의 정적인 원소(첫번째부터 계산하여)의 수를 가리킨다.
정적인 원소는 어플리케이션에 의해 변형되어 진다. 그러나 그들이 변형할 때에는 어플리케이션이 어떤 랜더링을 위해서인지 그것을 사용하기전에 배열을 명확히 명시해야 한다. 표준 배열을 열거할때 type, stride, countand pointer는 client-side 상태로 저장되어진다. 그리고 정적 배열요소는 실행에 의해 저장되어진다. 표준배열은 가능하나 GL_NORMAL_ARRAY_EXT 인자를 가진 glEnable나 glDisable을 사용할때는 불가능하다. 가능한다면, 표준배열은 glDrawArraysEXT나 glArrayElementEXT가 호출되었을때 사용되어진다. 미리 열거된 꼭지점이나 꼭지점 속성배열로부터 초기(같은타입의모든것)의 연속성을 정의할때 glDrawArraysEXT를 사용한다. 색인된 꼭지점들과 꼭지점의 속성들에 의해 초기값을정의할때 glArrayElementEXT를 사용한다.

Notes

비정적 배열요소는 glArrayElementEXT나 glDrawArraysEXT가 실행될때 제어되지 않는다. 결과적으로 일반적인 배열은 불가능하고 glArrayElementEXT나 glDrawArraysEXT가 호출 될때는 제되어질 수 없다. 비록 glBegin 실행과 상반되는 glEnd 실행사이에서 glNormalPointerEXT을 호출하기 위하여 에러가발생하지않더라도, 결과는정의되지않는다.

Errors

GL_INVALID_ENUM는 타입이 허용되지 않은 값의 경우 생긴다.
GL_INVALID_VALUE는 stride나 count가 음수일 경우 생긴다.

Associated Gets

glIsEnabled with argument GL_NORMAL_ARRAY_EXT
glGet with argument GL_NORMAL_ARRAY_TYPE_EXT
glGet with argument GL_NORMAL_ARRAY_STRIDE_EXT
glGet with argument GL_NORMAL_ARRAY_COUNT_EXT
glGetPointervEXT with argument GL_NORMAL_ARRAY_POINTER_EXT

See Also

glArrayElementEXT, glColorPointerEXT, glDrawArraysEXT, glEdgeFlagPointerEXT, glGetPointervEXT, glIndexPointerEXT, glTexCoordPointerEXT, glVertexPointerEXT, glEnable


glPassThrough

 glPassThrough.3gl

Name

glPassThrough - 퍼드백 버퍼에 메이커를 둔다.

C Specification

void glPassThrough( GLfloat token )

Parameters

token GL_PASS_THROUGH_TOKEN에 따르는 피드백 버퍼에 위치한 값

Description

OPenGL이 피드백 모드에 있을 때, 프레임 버퍼에 그려진 픽셀은 없다.
대신에 드로잉 프리미티브에 관한 정보는 피드백 버퍼에 둔다. 이 함수는 피드백
중앙에 토큰 GL_PASS_THROUGH_TOKEN을 둘 수 있도록 해준다.
이 함수에 의해서 지정된 부동 소수점 값을 따른다.
이 함수는 랜더링 코드에서 호출되고 만일 피드백 모드가 아니라면 효과가 없다..
Notes
glPassThrough는 GL이 피드백 모드가 아니면 무시되어진다.

Associated Gets

glGet with argument GL_RENDER_MODE

See Also

glFeedbackBuffer, glRenderMode


glPixelMap

 glPixelMap.3gl

Name

glPixelMapfv, glPixelMapuiv, glPixelMapusv - 픽셀 전송을 위한 룩업 테이블을 정의한다.

C Specification

void glPixelMapfv( GLenum map,GLint mapsize,const GLfloat *values )
void glPixelMapuiv( GLenum map,GLint mapsize,const GLuint *values )
void glPixelMapusv( GLenum map,GLint mapsize,const GLushort *values )

Parameters

map : 정의된 형식, 유효한 맵은 다음과 같다.
GL_PIXEL_MAP_I_TO_I, GL_PIXEL_MAP_S_TO_S,
GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G,
GL_PIXEL_MAP_I_TO_B, GL_PIXEL_MAP_I_TO_A,
GL_PIXEL_MAP_R_TO_R, GL_PIXEL_MAP_G_TO_G,
GL_PIXEL_MAP_B_TO_B, GL_PIXEL_MAP_A_TO_A.
mapsize : 룩업 테이블의 크기
values : 룩업 테이블

Description

glPixelMap는 glDrawPixels, glReadPixels, glCopyPixels, glTexImage1D, glTexImage2D에 대한 룩업 테이블을 정의한다.
룩업 테이블이나 맵은 상응하는 GL_MAP_COLOR나 GL_NAP_STENCIL 옵션이
glPixelTransfer와 이용가능할 때만 사용된다. 맵은 그리기전에, 프레임 버퍼오부터
값을 읽은 후에 적용된다.

Errors

GL_INVALID_ENUM는 map이 적용되진 값이 아니라면 일반화 되어진다.
GL_INVALID_VALUE는 mapsize가 GL_MAX_PIXEL_MAP_TABLE보다 크거나 부정적일 때
일반화되어진다.
GL_INVALID_VALUE는 map이 GL_PIXEL_MAP_I_TO_I일 때 일반화 되어진다.
GL_PIXEL_MAP_S_TO_S, GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G,
GL_PIXEL_MAP_I_TO_B, or GL_PIXEL_MAP_I_TO_A, 그리고 mapsize는 이중값을 갖지 않는다
GL_INVALID_OPERATION는 glPixelMap가 glbegin과 서로 상반되는 히둥의 실행사이에서
싱행될 때 일반화되어진다.

Associated Gets

glGetPixelMap
glGet with argument GL_PIXEL_MAP_I_TO_I_SIZE
glGet with argument GL_PIXEL_MAP_S_TO_S_SIZE
glGet with argument GL_PIXEL_MAP_I_TO_R_SIZE
glGet with argument GL_PIXEL_MAP_I_TO_G_SIZE
glGet with argument GL_PIXEL_MAP_I_TO_B_SIZE
glGet with argument GL_PIXEL_MAP_I_TO_A_SIZE
glGet with argument GL_PIXEL_MAP_R_TO_R_SIZE
glGet with argument GL_PIXEL_MAP_G_TO_G_SIZE
glGet with argument GL_PIXEL_MAP_B_TO_B_SIZE
glGet with argument GL_PIXEL_MAP_A_TO_A_SIZE
glGet with argument GL_MAX_PIXEL_MAP_TABLE
See Also
glCopyPixels, glDrawPixels, glPixelStore, glPixelTransfer, glReadPixels,
glTexImage1D, glTexImage2D


glPixelStore

 glPixelStore.3gl

Name

glPixelStoref, glPixelStorei - 픽셀이 메모리를 저장되고 읽히는 방법을 컨트롤한다.

C Specification

void glPixelStoref ( GLenum pname, GLfloat param )
void glPixelStorei ( GLenum pname, GLint param )

Parameters

pname : 정할 매개변수, 유효한 이름은 다음과 같다.
GL_PACK_SWAP_BYTES
GL_PACK_LSB_FIRST
GL_PACK_ROW_LENGTH
GL_PACK_SKIP_PIXELS
GL_PACK_SKIP_ROWS
GL_PACK_ALIGNMENT

Description

glPixelStore는 픽셀이 glReadPixels와 저장되고 glDrawPixels,
glTexImage1D, glTexImage2D에 대하여 읽히는 방법을 컨트롤한다.
glCopyPixels의 작동에 영향을 주지는 않는다.
Associated Gets
glGet with argument GL_PACK_SWAP_BYTES
glGet with argument GL_PACK_LSB_FIRST
glGet with argument GL_PACK_ROW_LENGTH
glGet with argument GL_PACK_SKIP_ROWS
glGet with argument GL_PACK_SKIP_PIXELS
glGet with argument GL_PACK_ALIGNMENT
glGet with argument GL_UNPACK_SWAP_BYTES
glGet with argument GL_UNPACK_LSB_FIRST
glGet with argument GL_UNPACK_ROW_LENGTH
glGet with argument GL_UNPACK_SKIP_ROWS
glGet with argument GL_UNPACK_SKIP_PIXELS
glGet with argument GL_UNPACK_ALIGNMENT
See Also
glBitmap, glDrawPixels, glPixelMap, glPixelTransfer, glPixelZoom
glPolygonStipple, glReadPixels, glTexImage1D,glTexImage2D


glPixelZoom

 glPixelZoom.3gl

Name

glPixelZoom - 픽셀 전송을 위한 스케일링을 정한다.

C Specification

void glPixelZoom( GLfloat xfactor, GLfloat yfactor )

Parameters

xfactor : 수평 스케일 인자 (1.0은 스케일링이 아니다)
yfactor : 수평 스케일 인자 (1.0은 스케일링이 아니다)

Description

glPixelZoom는 glDrawPixels 와 glCopyPixels , glRedPixels , glTexImage1D, glTexImage2D에 대한 픽셀 스케일링을 정한다. 픽셀은 메모리나 프레임 버퍼에서 읽을 때 가장 잘아는 알고리즘을 사용하여 스케일 된다. glcopyPixels와 glDrawPixel의 경우에 스케일된 픽셀은 현재의 래스터 위치에서 프레임버퍼내에서 그려진다. glreadPixels 대하여 픽셀을 제공된 메모리 버퍼로 작성된다. 확대된 이미지를 읽을 때 다음과 같은 이미지로 크기를 계산해야 한다.
(xr + n◎factor, yr + m◎factor)
(xr + (n+1)◎factor, yr + (m+1)◎factor)
Errors
GL_INVALID_OPERATION는 glPixelZoom가 gl Begin과 서로 상응되는 glEnd의
실행사이에서 실행될 때 일반화되어진다.
Associated Gets
glGet with argument GL_ZOOM_X
glGet with argument GL_ZOOM_Y
See Also
glCopyPixels, glDrawPixels


glPolygonMode

 glPolygonMode.3gl

Name

glPolygonMode - 폴리곤을 그리기 위하여 사용된 rasterization 모드를 정한다.

C Specification

void glPolygonMode( GLenum face, GLenum mode )

Parameters

face : 폴리곤의 정면이 모드 qusrudp 의해 영향을 받는다는 것을 지정한다.
GL_FRONT, GL_BACK ,GL_FRONT_AND_BACK이다.
mode : 새로운 드로잉 모드를 지정한다.
GL_FILL은 채워진 폴리곤을 만든는 기본이다.
GL_LINE은 폴리곤 아웃 라인을 만든다.
GL_point는 단지 정점의 점을 플롯한다.
GL_LINE과 GL_POINT에 으해 그려진 라인과 포인트는 glEdgeFlag에 의해
정해진 모서리 프래그에 의해 영향을 받는다.

Description

glPolygonMode는 방법을 변경하도록 허용한다. 기본적으로 폴리곤은 현재 컬러나
물체를 특성으로 채워지거나 그림자진다. 그러나 또한 단지 아웃라인이나 정점이
그려졌다는 것을 지정한다. 더욱이 이 사양을 앞, 뒤나 폴리곤의 양측면에 적용 할
것이다.

Errors

GL_INVALID_ENUM는 face나 mode 가 적용되어지지 않을때 정의된다.
GL_INVALID_OPERATION는 glPolygonMode는 glBegin과 서로 상반되는 glBegin의
실행사이에서 일반화되어진다.

Associated Gets

glGet with argument GL_POLYGON_MODE
See Also
glBegin, glEdgeFlag, glLineStipple, glLineWidth, glPointSize, glPolygonStipple


glPolygonStipple

 glPolygonStipple.3gl

Name

glPolygonStipple - 폴리곤을 점각을 위하여 사용된 패턴을 정한다.

C Specification

void glPolygonStipple( const GLubyte *mask )

Parameters

mask 32*32 비트 점각 패턴은 이 함수를 사용하고 GLEnable(GL_POLYGON_STIPPLE)를 호출하여 폴리곤 점각을 사용하도록 정의

Description

폴리곤 스트리핑에서 glLinestipple과 같은 스트링플 함수에서 생성된 패턴의
리조스테지션에의해 생산된다.
32*32 비트 점각 패턴은 이 함수를 사용하고 GLEnable(GL_POLYGON_STIPPLE)를
호출하여 폴리곤 점각을 사용가능하게 하여 포리곤에 대하여 사용될 것이다.
점각 패턴에서 1 s는 현재의 컬러로 채워지고 0 s는 그려지지 않는다.

Errors

GL_INVALID_OPERATION는 glPolygonStipple가 glbegin과 서로 상반되는 glend의
실행사이에서 실행될 때 명시되어진다.

Associated Gets

glGetPolygonStipple
glIsEnabled with argument GL_POLYGON_STIPPLE
See Also
glDrawPixels, glLineStipple, glPixelStore, glPixelTransfer


glPushMatrix

 glPopMatrix.3gl, glPushMatrix.3gl

Name

glPushMatrix, glPopMatrix - 재 행렬을 스택에 푸시, 팝한다

C Specification

void glPushMatrix( void )
void glPopMatrix( void )

Description

이 함수는 현재 행렬을 행렬 스택에 푸시하는데 사용된다. 이것은 만일 현제 변환
행렬이 glPopMatrix 호출로 복원 할 수 있도록 현재 변환 행렬을 저장하는데 가장
많이 사용한다.

Errors

GL_STACK_OVERFLOW는 glushMatrix는 재 행렬 스택이 꽉 찼을 때 명시되어진다.
GL_STACK_UNDERFLOW는 glPopMatrix는 재 행렬 스택이 싱글 행렬로 유일하게 존재할
때 명시되어진다.
GL_INVALID_OPERATION는 glPushMatrix와 glPopMatrix 는 glBegin과 서로 상반되는
glEnd의 실행사이에서 실행될 때 명시되어진다.
Associated Gets
glGet with argument GL_MATRIX_MODE
glGet with argument GL_PROJECTION_MATRIX
glGet with argument GL_TEXTURE_MATRIX
glGet with argument GL_MODELVIEW_STACK_DEPTH
glGet with argument GL_PROJECTION_STACK_DEPTH
glGet with argument GL_TEXTURE_STACK_DEPTH
glGet with argument GL_MAX_MODELVIEW_STACK_DEPTH
glGet with argument GL_MAX_PROJECTION_STACK_DEPTH
glGet with argument GL_MAX_TEXTURE_STACK_DEPTH
See Also
glFrustum, glLoadIdentity, glLoadMatrix, glMatrixMode, glMultMatrix,
glOrtho, glRotate, glScale, glTranslate, glViewport


glRenderMode

 glRenderMode.3gl

Name

glRenderMode - 세 개의 래스터라이제이션 모드중 하나를 설정

C Specification

GLint glRenderMode( GLenum mode )

Parameters

mode GLenum : rasterization 모드를 지정한다.
GL_RENDER, GL_SELECT, and GL_FEEDBACK.
기본값은 GL_RENDER 이다.

Description

glRenderMode은 openGL에서 드로잉 함수를 호출할대 세가지 모드에서 작동한다.
GL_RENDER : RENDER 모드(기본갑), 드로잉 함수는 framebuffer에서
픽셀로 나타남
GL_SELECT : SELECT 모드, framebuffer로 변경된 것은 없다.
그렇지만 hit 레코드는 뷰잉 볼륨내에서 그렸졌던 프리미티브를
기록하는 selection 버퍼로 작성되었다. selection 버퍼는
glSeclectBuffer로의 호출로 우선적으로 할당되고 저장되어진다.
GL_FEEDBACK : FEEDBACK 모드,framebuffer로 변경된 것은 없다.
그렇지만 render 모드에서 랜더되었던 정점의 좌표와 속성은
feedback 버퍼에 작성된다. feedfack 버퍼는
glFeedbackBuffer로의 호출로부터 우선적으로 할당되고
지정되어야 한다.

Notes

일반적인 에러는 glRenderMode가 정확한 랜더링 모드의 0값을 리턴할 때

Associated Gets

glGet with argument GL_RENDER_MODE

See Also

glFeedbackBuffer, glInitNames, glLoadName, glPassThrough, glPushName


glRotate

 glRotate.3gl

Name

glRotated, glRotatef - 회전 행렬로 현재 행렬로 회전한다.

C Specification

void glRotated ( GLdouble angle,GLdouble x,GLdouble y,GLdouble z )
void glRotatef ( GLfloat angle,GLfloat x,GLfloat y,GLfloat z )

Parameters

angle 각으로 회전하는 각도, 앵글은 시계 반대 방향으로 회전한다.
x, y, z 회전축으로 사용된 원점으로부터 방향 벡터
Description
glRotate는 현재 행렬을 점(x,y,z)으로 원점으로부터 전달되는 방향벡터를 축으로
시계 반대 방향으로 도는 회전 행렬로 곱셉을 한다. 새로운 회전된 행렬은 현재 변환
행렬로 된다.

Errors

GL_INVALID_OPERATION는 glRotate가 glBegin과 서로 상반되는 glEnd의
실행사이에서 실행될 때 명시되어진다.

Associated Gets

glGet with argument GL_MATRIX_MODE
glGet with argument GL_MODELVIEW_MATRIX
glGet with argument GL_PROJECTION_MATRIX
glGet with argument GL_TEXTURE_MATRIX

See Also

glMatrixMode, glMultMatrix, glPushMatrix, glScale, glTranslate


glSelectBuffer

 glSelectBuffer.3gl

Name

glSelectBuffer - 선택값에 대하여 사용된 버퍼를 지정한다.

C Specification

void glSelectBuffer( GLsizei size, GLuint *buffer )

Parameters

size : buffer에 의해 정해진 버퍼로 작성될 수 있는 값
buffer : 선택된 data 값을 리턴

Description

openGl이 select 모드일 때, 드로잉 명령은 framebuffer 내의 픽셀을 만들다
않는다. 대신에 이 함수에 확장된 selection 버퍼로 작성된 hit 레코드를 만든다. 각
hit 레코드는 다음과 같은 데이터로 구성된다.
첫째 hit가 일러날 때 names 스택에서의 name수
둘재 뷰잉볼륨을 intersect 했던 프리미티브의 모든 정점의 최소와 최대 z값, 이 값은
0.0에서 1.0범위로 스케일 된다.

Errors
GL_INVALID_VALUE는 size가 부정적일 때 정의된다.
GL_INVALID_OPERATION는 glSelectBuffer가 랜더링 모드에서 GL_SELECT일 동안
호출되어지거나 glRenderMode가 호출되어 질 때 정의된다.

Associated Gets

glGet with argument GL_NAME_STACK_DEPTH
See Also
glFeedbackBuffer, glInitNames, glLoadName, glPushName, glRenderMode


glTexCoord

 glTexCoord.3gl

Name

glTexCoord : 텍스처된 폴리곤 렌더링에 대한 현재 텍스처 이미지 좌표를 지정한다.

C Specification

void glTexCoord1d( GLdouble s )
void glTexCoord1f( GLfloat s )
void glTexCoord1i( GLint s )
void glTexCoord1s( GLshort s )
void glTexCoord2d( GLdouble s, GLdouble t )
void glTexCoord2f( GLfloat s, GLfloat t )
void glTexCoord2f ( GLint s, GLint t )
void glTexCoord2s( GLshort s, GLshort t )
void glTexCoord3d( GLdouble s,GLdouble t, GLdouble r)
void glTexCoord3f( GLfloat s, GLfloat t, GLfloat r )
void glTexCoord3i( GLint s, GLint t, GLint r )
void glTexCoord3s( GLshort s, GLshort t, GLshort r )
void glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q )
void glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q )
void glTexCoord4i( GLint s, GLint t, GLint r, GLint q )
void glTexCoord4s( GLshort s, GLshort t, GLshort r,GLshort q )

Parameters

이러한 함수들은 1-4차원에서 현재 텍스쳐 이미지 좌표들을 정한다. 예를들어 s, t
매개변수는 2D 텍스처 이미지의 수평과 수직 이미지 좌표와 일치한다.

C Specification

void glTexCoord1dv( const GLdouble *v )
void glTexCoord1fv( const GLfloat *v )
void glTexCoord1iv( const GLint *v )
void glTexCoord1sv( const GLshort *v )
void glTexCoord2dv( const GLdouble *v )
void glTexCoord2fv( const GLfloat *v )
void glTexCoord2iv( const GLint *v )
void glTexCoord2sv( const GLshort *v )
void glTexCoord3dv( const GLdouble *v )
void glTexCoord3fv( const GLfloat *v )
void glTexCoord3iv( const GLint *v )
void glTexCoord3sv( const GLshort *v )
void glTexCoord4dv( const GLdouble *v )
void glTexCoord4fv( const GLfloat *v )
void glTexCoord4iv( const GLint *v )
void glTexCoord4sv( const GLshort *v )

Parameters

s : 수평 텍스쳐 이미지 좌표
t : 수직 텍스쳐 이미지 좌표
r : 텍스처 이미지 death 좌표
q : 텍스처 이미지 time" 좌표

Notes

수평 텍스쳐 이미지 좌표는 동시에 업데이트 한다. 대개의 경우 glTexCoord는
glBegin와 와 상반대는 glEnd 사이에서 호출되어진다.

Associated Gets

glGet with argument GL_CURRENT_TEXTURE_COORDS
See Also
glVertex


glTexImage1D

 glTexImage1D.3gl

Name

glTexImage1D : 1차원의 텍스쳐 이미지를 정의한다.

C Specification

void glTexImage1D ( GLenum target,GLint level,
GLint components,GLsizei width,
GLint border,GLenum format,
GLenum type,const GLvoid *pixels )

Parameters

target : GLENUM : GL_TEXTURE_1D여야 한다.
level : GLint : 세부사항 레벨 , 일반적으로 밉매핑(mopmapping)이 사용되지 않는다면는 0
components : 1에서 4까지의 컬러 구성요소의 수
width : GLsizel:텍스쳐 이미지 폭, 이것은 2여야 하고 공식 2n+2를 따른다.
border : GLint : 경계의 폭 0,1 또는 2여야 한다.
format : GLenum : 픽셀 데이터의 포맷, 유효한 포맷은 다음과 같다.
GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE,
GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, and
GL_LUMINANCE_ALPHA.
type : GLenum : 각 픽셀값의 데이터 형식(glDrawPixels를 보아라)
GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT,
GL_SHORT, GL_UNSIGNED_INT, GL_INT, and GL_FLOAT.
pixels : GLvoid * : 픽셀 데이터

Errors

glPixelStore에 대한 GL_PACK_ALIGNMENT와 GL_UNPACK_ALIGNMENT 매개변수는
현재 무시된다.
Associated Gets
glGetTexImage, glIsEnabled with argument GL_TEXTURE_1D
See Also
glDrawPixels, glFog, glPixelStore, glPixelTransfer, glTexEnv, glTexGen,
glTexImage2D, glTexParameter


glTranslate

 glTranslate.3gl

Name

glTranslated, glTranslatef - 현재 행렬을 해석 함수로 곱셈을 한다.

C Specification

void glTranslated( GLdouble x,GLdouble y,GLdouble z)
void glTranslatef( GLfloat x,GLfloat y,GLfloat z )

Parameters

x, y, z : 해석 행렬의 x, y, z 좌표

Description

glTranslate는 현재 행렬을 해석 행렬로 곱셈을 한다. 새로이 해석된 행렬은 현재 변환 행렬이 된다.
| 1 0 0 x |
| 0 1 0 y |
| 0 0 1 z |
| 0 0 0 1 |

Errors

GL_INVALID_OPERATION는 glTranslate가 glBegin과 서로 다른 실행사이에 실행되는 glEnd의 실행사이에서 실행될 때 일반화되어진다.

Associated Gets

glGet with argument GL_MATRIX_MODE
glGet with argument GL_MODELVIEW_MATRIX
glGet with argument GL_PROJECTION_MATRIX
glGet with argument GL_TEXTURE_MATRIX

See Also

glMatrixMode, glMultMatrix, glPushMatrix, glRotate, glScale


gluBeginPolygon

 gluBeginPolygon.3gl (Obsolete in GLU version 1.2 and later)

Name

gluBeginPolygon, gluEndPolygon - 다각형 기술의 범위를 정한다.
C Specification
void gluBeginPolygon( GLUtesselator *tess )
void gluEndPolygon( GLUtesselator *tess )

Parameters

tess tessellation object를 일일이 열거한다. ( gluNewTess을 가지고 생성된다. )

Description

gluBeginPolygon 과 gluEndPolygon 은 볼록하지 않은 다각형의 정의의 범위를 정한다. 그런 다각형을 정의하기 위해서 , 첫째로 gluBeginPolygon을 호출한다. 그다음에 다각형의 윤곽들을 gluTessVertex을 호출함으로써 정의한다. 각각의 꼭지점과 각각의 새로운 윤곽을 시작하기 위해서 gluNextContour을 호출한다. 마지막으로, 정의의 끝 신호를위해서 gluEndPolygon을 호출한다. 더 상세한 것을 위해서는 관련 페이지 gluTessVertex 와 gluNextContour을 보면 된다.
gluEndPolygon이 한번 호출되면, 다각형은 모자이크식이 되고, 결과적으로 삼각형은 콜백을 통하여 묘사된다. callback 함수의 기술을 위해서 gluTessCallback을 참고하길.

Example

삼각형의 구멍이 있는 방형의 땅은 다음과 같이 기술된다.

gluBeginPolygon(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluNextContour(tobj, GLU_INTERIOR);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluEndPolygon(tobj);

See Also

gluNewTess, gluNextContour, gluTessCallback, gluTessVertex,
gluTessBeginPolygon, gluTessBeginContour


gluBeginPolygon

 gluBeginPolygon.3gl (GLU versions 1.0 and 1.1)

Name

gluBeginPolygon, gluEndPolygon - 다각형 기술의 범위를 한정한다.

C Specification

void gluBeginPolygon( GLUtriangulatorObj *tobj )
void gluEndPolygon( GLUtriangulatorObj *tobj )

Parameters

tobj tessellation object를 일일이 열거한다. ( gluNewTess으로 생성된다. )

Description

gluBeginPolygon 과 gluEndPolygon 볼록하지 않는 도형의 정의의 범위를 정한다. 그러한 다각형의 정의를 위해서는, 첫번째로 gluBeginPolygon을 호출한다. 그다음에 각각의 꼭지점과 각각의 새로운 윤곽을 시작하기 위한 gluNextContour를 위해서 gluTessVertex을 호출함으로써 다각형의 윤곽을 선언한다. 마지막으로 선언의 끝을 표시하기 위해서 gluEndPolygon을 호출한다.
더 자세한 관련항목으로 gluTessVertex과 gluNextContour을 본다.
한번 gluEndPolygon이 호출되면, 다각형은 tessellate되고, 결과적으로 callback을 통한 삼각형으로 기술된다. callback 함수의 기술을 위해서 gluTessCallback을 본다

Example

함각의 구멍을 가지고 방형은 다음과 같이 기술된다.

gluBeginPolygon(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluNextContour(tobj, GLU_INTERIOR);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluEndPolygon(tobj);

See Also

gluNewTess, gluNextContour, gluTessCallback, gluTessVertex


gluBeginSurface

 gluBeginSurface.3gl

Name

gluBeginSurface, gluEndSurface - NURBS 외관 선언의 범위를 한정한다.

C Specification

void gluBeginSurface( GLUnurbsObj *nobj )
void gluEndSurface( GLUnurbsObj *nobj )

Parameters

nobj SNURBS object를 일일이 나열한다. ( gluNewNurbsRenderer을 가지고 생성된다.).

Description

NURBS 표면 정의의 시작을 표시하기 위해서 gluBeginSurface을 사용한다. gluBeginSurface을 호출한 후에 표면의 속성을 정의하기 위한 하나 또는 그 이상의 gluNurbsSurface을 호출한다. 정확하게 GL_MAP2_VERTEX_3 또는 GL_MAP2_VERTEX_4의 표면 타입을 가지고 있어야만 하는 gluNurbsSurface 중에 하나이다.
NURBS 표면 정의의 끝을 표시하는 gluEndSurface을 호출한다.
NURBS 표면의 다듬기는 gluBeginTrim, gluPwlCurve, gluNurbsCurve, 그리고 gluEndTrim으로 지원된다.
상세한 관련 기록은 gluBeginTrim에서 알아보도록 한다.
OpenGL 평가자들은 NURBS 표면을 마치 다각형의 집합이 되게함으로서 사용한다. 평가자들의 상태는 glPushAttrib(GL_EVAL_BIT)와 glPopAttrib()을 jsaruwna으로서 보호된다.
무엇으로 이런 호출들이 보호되는지 정확히 상세한 관련 기록을 보기위해서 glPushAttrib을 본다.

Example
표준의 NURBS 표면의 결을 render 하는 것을 다음이 명령한다. 대등하고 표준의 결은 또한 NURBS surfaces처럼 기술된다.

gluBeginSurface(nobj);
gluNurbsSurface(nobj, ..., GL_MAP2_TEXTURE_COORD_2);
gluNurbsSurface(nobj, ..., GL_MAP2_NORMAL);
gluNurbsSurface(nobj, ..., GL_MAP2_VERTEX_4); gluEndSurface(nobj);

See Also

gluBeginCurve, gluBeginTrim, gluNewNurbsRenderer, gluNurbsCurve,
gluNurbsSurface, gluPwlCurve


gluBeginTrim

 gluBeginTrim.3gl

Name

gluBeginTrim, gluEndTrim - NURBS 다듬기 loop 선언의 범위를 정한다.

C Specification

void gluBeginTrim( GLUnurbsObj *nobj )
void gluEndTrim( GLUnurbsObj *nobj )

Parameters

nobj NURBS object를 일일이 나열한다. ( gluNewNurbsRenderer으로 생성한다.).

Description

다듬기 loop의 시작을 표시하기 위해서 gluBeginTrim을 사용한다. 다듬기 loop은 NURBS 표면의 경계선들로 정의된 방향지어진 곡선 활꼴(닫힌 곡선의 형태)의 집합이다. 여러분들은 gluBeginSurface와 gluEndSurface의 호출 사이에서 NURBS 표면의 정의안에서 이런 다듬기 loop들을 포함한다.
NURBS 표면을 위한 정의는 많은 다듬기 loop들을 포함할 수 있다. 예를 들어 여러분이 구멍이 뚫린 구멍을 이용한 직사각형을 닮은 NURBS 표면을 위해서 정의를 썼다면, 그 정의는 구개의 다듬기 loop를 포함한다. 하나의 loop은 직사각형의 바깥 edge를 정의하고, 다른 하나는 직사각형의 구멍 뚫린 구멍을 정의한다. 각각의 이런 다듬기 loop들의 정의는 gluBeginTrim/gluEndTrim 쌍으로 일괄하여 나뉜다.
하나의 다듬기 loop 정의는 다수의 곡선 부분으로 구성될 수 있다. 각각의 기술은 낱낱으로 선의 곡선처럼(gluPwlCurve)또는 하나의 NURBS 곡선(gluNurbsCurve), 또는 어떠한 순서에서 두 개의 복합처럼 기술된다. 단지 library는 다듬기 loop 정의에서 나타날 수 있는 것을 호출하는것은. (gluBeginTrim 과 gluEndTrim 호출 사이에서) gluPwlCurve 과 gluNurbsCurve.
표시 되는 NURBS 표면의 영역은 곡선 매개변수가 증가하는것처럼 다듬기 곡선의 왼쪽의 도메인에서이다.
그러므로 NURBS 표면의 계속 유지되는 지역은 반시계방향으로 도는 다듬기 loop안쪽과, 시계방향으로 도는 다듬기 loop의 바깥쪽에 있다. 더 일찍부터 직사각형으로 말해지기 때문에, 다듬기 loop가 구멍뚫어진 구멍이 시계방향으로 움직이는 동안에, 직사각형의 바깥쪽 edge는 반시계방향으로 움직인다.
만약 여러분이 하나의 다듬기 loop를 정의하기위해 하나의 곡선보다 더 많은 것을 사용한다면, 곡선 부분은 닫힌 loop의 형태여야만 한다. (각 곡선의 끝점은 다음 곡선의 시작 점이어야 하고, 마지막 곡선의 끝점은 처음 곡선의 시작 점이어야만 한다. ) 만약 곡선의 끝점이 충분이 근접하고, 그러나 정확히 일치하지 않는다면, 조화를 이루기 위해서 강요 당하여야 한다. 만약 끝점이 충분히 근저받지 않는다면, 잘못된 결과이다. (gluNurbsCallback을 본다)
만약 다듬기 곡선 정의가 다수의 곡선을 포함한다면, 곡선 방향은 일관되어야 한다. (안쪽이 곡선의 모든 왼쪽이 되어야 한다.) 다듬기 곡선은 스스로 교차할수 없다.
만약 다듬기 정보가 NURBS 표면을 위하여 주어지진 않는다면, 전체의 표면은 그려진다.

Example

이 코드는 하나의 낱낱의 선의 곡선과, 두 개의 NURBS 곡선으로 구성되어진 다듬기 곡선을 미완성 정의한다.

  gluBeginTrim(nobj);
gluPwlCurve(..., GLU_MAP1_TRIM_2);
gluNurbsCurve(..., GLU_MAP1_TRIM_2);
gluNurbsCurve(..., GLU_MAP1_TRIM_3);
gluEndTrim(nobj);

See Also

gluBeginSurface, gluNewNurbsRenderer, gluNurbsCallback, gluNurbsCurve, gluPwlCurve


gluBuild1DMipmaps

 gluBuild1DMipmaps.3gl

Name

gluBuild1DMipmaps - 1-D mipmaps을 생성한다.

C Specification

int gluBuild1DMipmaps( GLenum target,
GLint components,
GLint width,
GLenum format,
GLenum type,
const void *data )

Parameters

target target texture를 일일이 열거한다. GL_TEXTURE_1D이어야 한다..

components texture에서 색깔을 구성하고 있는 숫자를 일일이 나열한다. 1, 2, 3, or 4.이어야 한다.

width texture 이미지의 너비를 일일이 나열한다.

format pixel 데이다의 format을 일일이 나열한다. GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, GL_LUMINANCE_ALPHA.중에 하나 이어야 한다.

type 데이터를 위한 data type을 일일이 나열한다. GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, 또는 GL_FLOAT중에 하나여야 한다.

data 메모리에서 이미지 data를 가리키는 것을 일일이 나열한다.

Description

gluBuild1DMipmaps은 입력 이미지와 모든 mipmap을 발생시키는 이미지를 얻는다. (gluScaleImage을 사용함으로써) 그래서 입력 이미지는 texture 이미지를 mipmapgksmsrjt으로 사용될 수 있다. glTexImage1D 이미지의 각각을 load하기 위해서 호출된다. 만약, 입력 이미지의 너비가 두 개의 power가 아니라면, 그때 이미지는 mipmas들이 생성되기 전에 가장 최근의 두 개의 power를 위해서 scale된다. 0을 가리키는 리턴값은 성공이다. 만약 그렇지 않으면, GLU 에러 코드는 리턴된다. (gluErrorString을 본다. )
형식 파라매터에 대한 받아들이는 값의 기술을 위해서 glTexImage1D은 관련 페이지를 알아보도록 한다.

See Also

glTexImage1D, gluBuild2DMipmaps, gluErrorString, gluScaleImage


gluBuild2DMipmaps

 gluBuild2DMipmaps.3gl

Name

gluBuild2DMipmaps - 2-D mipmaps를 생성한다.

C Specification

int gluBuild2DMipmaps( GLenum target,
GLint components,
GLint width,
GLint height,
GLenum format,
GLenum type,
const void *data )

Parameters

target target texture를 일일이 나열한다. GL_TEXTURE_2D이어야만 한다.

components texture에서 색깔 구성요소의 번호를 일일이 나열한다. 1, 2, 3, 또는 4이어야만 한다..

width, height texture이미지의 각각의 너비와 높이를 일일이 나열한다.

format pixel 데이타의 형식을 일일이 나열한다
GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, and GL_LUMINANCE_ALPHA 중에 하나이어야만 한다.

type 데이터를 위한 데이터 타입을 일일이 나열한다. GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, 또는 GL_FLOAT중에 하나이어야 한다. .

data 메모리에 이미다 데이터를 가리키는 것을 일일이 나열한다.

Description

gluBuild2DMipmaps은 입력 이미지와 모든 mipmap 이미지를 생성하는 것을 얻는다. (gluScaleImage을 사용함으로써) 그 결과 입력 이미지는 texture 이미지를 mipmappgksmsrjt처럼 사용될 수 있다. 그때 각각의 이미지를 load 하기 위해서
obtains the input image and generates all mipmap images glTexImage2D이 호출된다. 만약 입력 이미지의 넓이가 두 개의 power가 아니면, 그 이미지는 mipmap이 생성되기 전에 너비와 높이가 두 개의 power가 되기 위해서 scale된다.

0을 가리키는 리턴값은 성공이다. 그렇지 않으면, GLU 에러 코드는 (gluErrorString을 본다)
형식 파라메터를 대한 만족스런 값의 기술을 위해서 glTexImage1D 관련 페이지를 참조한다. type 파라메터에 대한 만족스런 기술의 참고페이지 lDrawPixels을 본다.

See Also

glDrawPixels, glTexImage1D, glTexImage2D, gluBuild1DMipmaps,
gluErrorString, gluScaleImage


gluCylinder

 gluCylinder.3gl

Name

gluCylinder - 원통을 그린다.

C Specification

void gluCylinder( GLUquadricObj *qobj,
GLdouble baseRadius,
GLdouble topRadius,
GLdouble height,
GLint slices,
GLint stacks )

Parameters

qobj 2차 곡면 object를 일일이 나열한다. ( gluNewQuadric을 생성으로).

baseRadius 원통의 반지름을 일일이 나열한다. z = 0일 때

topRadius z = 높이일 때 원통의 반지름을 일일이 나열한다. .

height 원통의 높이를 일일이 나열한다.

slices z 중심선 주위를 잘게나눈 숫자를 일일이 나열한다.

stacks z 중심선을 따라서 잘게 나눈 숫자를 일일이 나열한다.

Description
gluCylinder은 z 중심선을 따라 방향지어진 원통을 그린다. 원통의 기초는 z = 0, 꼭대기 z = 높이가 된다. 구처럼 원통은 분할된(slice)것으로부터 z 중심선 주위와, stack으로부터 z 중심선을 따라 잘게 나눈다.
topRadius가 0으로 되어있다면, 이 루틴은 원뿔이 생성된다는 것을 주의해야 한다.
만약 방위가 GLU_OUTSIDE(with gluQuadricOrientation)으로 되어 있다면, z 중심선으로부터 떨어진 수직의 점을 생성한다. 그렇지 않으면, 그들은 z 중심선쪽으로 가리킨다.
texturing이 돌려지면 (with gluQuadricTexture), texture 좌표들은 z = 0부터 z = 높이까지 t를 정렬하고, 중심선 +y는0.0부터 +x 중심선 0.25까지, -y 중심선 0.5까지, -x 중심선 0.75까지, 그리고 +y 중심선 1.0까지 s를 정렬하기 위해서 생성된다.

See Also

gluDisk, gluNewQuadric, gluPartialDisk, gluQuadricTexture, gluSphere


gluDeleteNurbsRenderer

 gluDeleteNurbsRenderer.3gl

Name

gluDeleteNurbsRenderer - NURBS object를 소멸시킨다.

C Specification

void gluDeleteNurbsRenderer( GLUnurbsObj *nobj )

Parameters

nobj 소멸시키기 위한 NURBS object를 일일이 나열한다.( gluNewNurbsRenderer을 생섬함으로써).

Description

gluDeleteNurbsRendere은 NURBS object를 소멸시키고, 그것에 의해서 사용되었던 메모리를 free시킨다. gluDeleteNurbsRenderer가 한번 호출되면, nobj는 다시 사용될 수 없다.

See Also

gluNewNurbsRenderer


gluDeleteQuadric

 gluDeleteQuadric.3gl

Name

gluDeleteQuadric - 2차 곡면 object를 소멸시킨다.

C Specification

void gluDeleteQuadric( GLUquadricObj *state )

Parameters

state Specifies the 소멸 되는 2차곡면(quadrics) object를 일일이 나열한다.( gluNewQuadric를 생성함으로써).

Description

gluDeleteQuadric은 이차곡면 object를 소멸시키고, 그것이 사용했던 메모리를 free 시켜준다. gluDeleteQuadric가 한번 호출되면, state는 다시 쓰일 수 없다.

See Also

gluNewQuadric


gluDeleteTess

 gluDeleteTess.3gl (GLU version 1.2 and later)

Name

gluDeleteTess - tessellation object를 소멸시킨다.

C Specification

void gluDeleteTess( GLUtesselator *tess )

Parameters

tess 소멸시키기 위한 tessellation object를 일일이 나열한다. ( gluNewTess을 생성함으로써).

Description

gluDeleteTess은 tessellation object를 가리키는 것을 소멸한다.그리고, 그것을 사용했던 메모리를 free시킨다.

See Also

gluBeginPolygon, gluNewTess, gluTessCallback


gluDeleteTess

 gluDeleteTess.3gl (GLU version 1.0 and 1.1)

Name

gluDeleteTess - tessellation object를 소멸시킨다.

C Specification

void gluDeleteTess( GLUtriangulatorObj *tobj )

Parameters

tobj 소멸시키기 위한 tessellation object을 일일이 나열한다. ( gluNewTess을 생성함으로써).

Description

gluDeleteTess는 나타내지는 tessellation object를 소멸시키고, 그것이 사용했던 메모리를 free시킨다.

See Also

gluBeginPolygon, gluNewTess, gluTessCallback


gluDisk

 gluDisk.3gl

Name

gluDisk - disk(편편한 원반)을 그린다.

C Specification

void gluDisk( GLUquadricObj *qobj,
GLdouble innerRadius,
GLdouble outerRadius,
GLint slices,
GLint loops )

Parameters

qobj 2차곡선(quadrics) object를 일일이 나열한다. ( gluNewQuadric를 생성함으로써).

innerRadius disk안쪽의 반지름을 일일이 나열한다. (0이 될것이다).

outerRadius disk의 바깥쪽 반지름을 일일이 나열한다.

slices z 중심선 주의의 잘게 나뉜 숫자를 일일이 나열한다.

loops disk가 세분화된것으로부터 중심이 같은 링들의 숫자를 일일이 나열한다.

Description

gluDisk는 z = 0인 평면이 되게 한다. 그 disk는 outerRadius을 반지름을 가지고있고, innerRadius의 반지름을 가진 중심이 같은 원형의 구멍을 포함한다. 만약 innerRadius가 0이라면, 구멍이 생성되지 않는다. 그 disk는 slice(피자 슬라이스처럼)로부터 z 중심선 주위를 , 그리고 또한 rings(슬라이스와 loop에 의해서 일일이 나열된것처럼)로부터 z 중심선에 대하여 잘게 나뉘어 진다.
disk의 +z 면은 "outsid"로 여겨진다. (gluQuadricOrientation을 본다), 이것은 만약 방위가 GLU_OUTSIDE로 배치 된다면, 수직선이 +z 중심선을 따라 점들을 생성한다는 의미다. 그렇지 않으면, 그들은 -z 중심선을 따라서 가리킨다는 의미다.
만약 texturing이 바뀐다면, (with gluQuadricTexture) texture 좌표들은 r = outerRadius, 값은 (r, 0, 0), (1, 0.5), (0, r, 0), (0.5, 1), (-r, 0, 0), (0, 0.5), (0, -r, 0), (0.5, 0)과 같은 선형들 생성한다.

See Also

gluCylinder, gluNewQuadric, gluPartialDisk, gluQuadricOrientation,
gluQuadricTexture, gluSphere


gluErrorString

 gluErrorString.3gl

Name

gluErrorString - OpenGL이나 GLU 에러 코드로부터 에러 문자열을 생성한다.

C Specification

const GLubyte* gluErrorString( GLenum errorCode )

Parameters

errorCode OpenGL 이나 GLU 에러 코드를 일일이 나열한다.

Description

gluErrorString은 OpenGL이나 GLU 에러 코드로부터 에러 문자열을 생성한다. 그 문자열은 ISO Latin 1 형식에 있다. 예를 들어, gluErrorString(GL_OUT_OF_MEMORY)은 메모리 밖의 문자열을 리터한다.
표준 GLU 에러 코드들은 GLU_INVALID_ENUM, GLU_INVALID_VALUE, 그리고 GLU_OUT_OF_MEMORY이다. 다른 GLU 함수들은 특별한 에러 코드를 callbacks를 통해서 리턴한다.
OpenGl 에러 코드의 리스트에 관하여 관련 페이지는 glGetError으로 한다.

See Also

glGetError, gluNurbsCallback, gluQuadricCallback, gluTessCallback


gluGetNurbsProperty

 gluGetNurbsProperty.3gl

Name

gluGetNurbsProperty - NURBS 속성을 얻는다.

C Specification

void gluGetNurbsProperty( GLUnurbsObj *nobj,
GLenum property,
GLfloat *value )

Parameters

nobj NURBS object를 일일이 나열한다. ( gluNewNurbsRenderer으로).

property 가지고 와지는 값들의 속성을 일일이 나열한다. 유효한 값들은 GLU_CULLING, GLU_SAMPLING_TOLERANCE, GLU_DISPLAY_MODE, GLU_AUTO_LOAD_MATRIX, GLU_PARAMETRIC_TOLERANCE, GLU_SAMPLING_METHOD, GLU_U_STEP, 그리고 GLU_V_STEP이다.

value 속성들로 이름지어진 값들이 씌여진 것으로부터 위치한 것을 가리키는것

Description

gluGetNurbsProperty은 NURBS object안에서 저장되어진 속성들을 회수하는데 사용된다.
이런 속성들은 NURBS 곡선과 표면이 render되는 방법에 영향을 미친다.
무엇이 속성이고, 속성들이 무엇을 하는지에 관한 정보는 gluNurbsProperty 관련 페에지를 참조하길 바란다.

See Also

gluNewNurbsRenderer, gluNurbsProperty

Notes

GLU_PARAMETRIC_TOLERANCE, GLU_SAMPLING_METHOD, GLU_U_STEP, 그리고 GLU_V_STEP 는 GLU 버전 1.1과 GLU를 추가로 한다.


gluGetTessProperty

 gluGetTessProperty.3gl (GLU version 1.2 and later)

Name

gluGetTessProperty - tessellation object 속성을 얻는다.

C Specification

void gluGetTessProperty( GLUtesselator *tess,
GLenum which,
GLdouble *value )

Parameters

tess tessellation object를 나열한다. (gluNewTess로).

which 가지고 와지는 값들의 속성을 나열한다. 유효한 값은GLU_TESS_WINDING_RULE, GLU_TESS_BOUNDARY_ONLY, 그리고 GLU_TESS_TOLERANCE이다.

value 속성들로 이름지어진 값들이 씌여진 것으로부터 위치한 것을 가리키는 것을 나열한다.

Description
gluGetTessProperty은 tessellation object안에서 속성이 저장되어 회수되기 위해서 사용된다. 이 속성들은 tessellation objects가 해석되고, render되는 방법에 영향을 준다. 속성이 무엇이고, 속성들이 무엇을 하는지 정보는 관련 페이지 gluTessProperty을 참조한다.
See Also
gluNewTess, gluTessProperty


gluLoadSamplingMatrices

 gluLoadSamplingMatrices.3gl

Name

gluLoadSamplingMatrices - NURBS sampling과 culling matrices를 load한다.

C Specification

void gluLoadSamplingMatrices( GLUnurbsObj *nobj,
const GLfloat modelMatrix[16],
const GLfloat projMatrix[16],
const GLint viewport[4]); )

Parameters

nobj NURBS object를 나열한다. (gluNewNurbsRenderer과 생성된다).

modelMatrix modelview matrix를 나열한다. (glGetFloatv 호출로부터).

projMatrix projection matrix를 나열한다. (glGetFloatv 호출로 부토).

viewport; viewport를 나열한다. (glGetIntegervl 호출로 부터).

Description

gluLoadSamplingMatrices 는 modelMatrix, projMatrix, 그리고 viewport로 사용된다.;nojh안에 저장된 sampling 과 culling matrices을 재 계산하기 위해서. sampling matrix는 NURBS 곡선 또는 표면을 얼마나 훌륭하게 sampling 오차를 만족스럽게 하기 위해서 tesselate하게 할수있는지를 결정한다. (GLU_SAMPLING_TOLERANCE속성에 의해서 결정되기 때문에) culling matrix는 NURBS 곡선 또는 표면이 rendering되기 전에 cull된다면 결정적으로 사용된다. (GLU_CULLING 속성이 변경될때)
gluLoadSamplingMatrices은 단지 GLU_AUTO_LOAD_MATRIX이 turn off (gluNurbsProperty)된다면 필요하다. 비록 그것이 GLU_AUTO_LOAD_MATRIX속성을 turn on turn on으로 내버려두기 편리하다고 할지라도, 그렇게 하기 위해서 반칙으로 수행될 수 있다.

See Also

gluGetNurbsProperty, gluNewNurbsRenderer, gluNurbsProperty


gluLookAt

 gluLookAt.3gl

Name

gluLookAt - viewing transformation(변형)을 선언한다.

C Specification

void gluLookAt( GLdouble eyex,
GLdouble eyey,
GLdouble eyez,
GLdouble centerx,
GLdouble centery,
GLdouble centerz,
GLdouble upx,
GLdouble upy,
GLdouble upz )

Parameters

eyex, eyey, eyez eye point의 위치를 나열한다..

centerx, centery, centerz reference point를 나열한다.

upx, upy, upz 위쪽 벡터의 방향을 나열한다.

Description
gluLookAt는 eye point, 장면의 중앙을 가리키는 관련 point 그리고 위쪽 벡터로부터 유래된 viewing matrix를 생성한다. 그 matrix는 관련 포인터 z 중심축 반대측과 발단의 eye point를 map한다. 그 결과 대표적인 projection(투사) matrix가 사용될 때, 장면의 중앙과 viewpoint의 중앙을 map한다. 비슷하게, 방향은 위쪽 벡터가 viewing 평면이 viewport안에서 앞쪽을 가리키게 하기 위해서 분명히 y 중심선과 map 되게 함으로 투사됨에 의해서 기술된다. 위쪽 벡터는 eye와 reference point로부터 시선이 평행이 되지 않아야만 한다.
matrix는 gluLookAt postmultiplies 현재의 matrix에 의해서 생성된다.

See Also

glFrustum, gluPerspective
OpenGL man pages
gluNewNurbsRenderer.3gl


gluNewNurbsRenderer

 gluNewNurbsRenderer.3gl

Name

gluNewNurbsRenderer - NURBS object를 생성한다.

C Specification

GLUnurbsObj* gluNewNurbsRenderer( void )

Description

gluNewNurbsRenderer 는 생성하고, 새로운 NURBS object를 가리키는 포인터를 리턴한다. 이 object는 NURBS rendering과 제어 함수가 호출할 때, 참조 되어야만 한다. 리턴되는 0값은 object가 할당되는 메모리가 충분하지 않다는 의미이다.

See Also

gluBeginCurve, gluBeginSurface, gluBeginTrim, gluDeleteNurbsRenderer,
gluNurbsCallback, gluNurbsProperty


gluNewQuadric

 gluNewQuadric.3gl

Name

gluNewQuadric - quadrics(이차곡선) object를 생성한다.

C Specification

GLUquadricObj* gluNewQuadric( void )

Description

gluNewQuadric는 새로운 quadrics object를 가리키는 포인터를 리턴하고 생성한다. 이 object는 2차곡선이 rendering되고, 제어 함수를 호출할 때 참조된다. 리턴값 0은 object에 할당할 메모리가 충분하지 않다는 것을 의미한다.

See Also

gluCylinder, gluDeleteQuadric, gluDisk, gluPartialDisk, gluQuadricCallback,
gluQuadricDrawStyle, gluQuadricNormals, gluQuadricOrientation,
gluQuadricTexture, gluSphere


gluNewTess

 gluNewTess.3gl

Name

gluNewTess - tessellation object를 생성한다.

C Specification

GLUtesselator* gluNewTess( void )

Description

gluNewTess은 새로운 essellation object를 가리키는 포인터를 리턴하고, 생성한다. 이 object는 tessellation 함수를 호출할 때 참조되어야만 한다. 리턴되는 0값은 object에 할당되는 메모리가 충분하지 않다는 것을 의미한다.

See Also

gluTessBeginPolygon, gluDeleteTess, gluTessCallback


gluNextContour

 gluNextContour.3gl

Name

gluNextContour - 다른 윤곽선의 시작을 표시한다.

C Specification

void gluNextContour( GLUtesselator *tess, GLenum type )

Parameters

tess tessellation object를 나열한다. ( gluNewTess로).
type 선언되는 윤곽선의 종류를 나열한다. 유효한 값은 GLU_EXTERIOR, GLU_INTERIOR GLU_UNKNOWN, GLU_CCW, 그리고 GLU_CW이다.
Description
gluNextContour은 다수의 외곽선을 가지고 다각형을 기술하는데 사용된다. 처음 외곽선은 gluTessVertex 호출의 연속을 통해서 기술되어진다. gluNextContour 호출은 이전의 윤곽선이 완성되고, 다음 번 외곽선이 막 시작되려고 하는 것을 가리킨다. 다른 gluTessVertex 호출의 시리얼은 새로운 윤곽선을 기술하는데 사용된다. 이 프로세스는 모든 외곽선들이 기술될때가지 반복될 수 있다.
외곽선의 종류가 무엇인지 다음에서 선언한다. 일반적인 윤곽선 종류는 다음과 같다.

GLU_EXTERIOR 외부의 외곽선은 다각현의 외부 경계선을 정의한다.
GLU_INTERIOR 내부 외곽선은 다각형의 내부 경계선을 정의한다. (구멍처럼)
GLU_UNKNOWN 알려지지 않은 외곽선은 결정하기위해서 library에 의해서 분석되어진다.
GLU_CCW, GLU_CW
처음 선언된 GLU_CCW 또는 GLU_CW 외곽선은 외부로 여겨진다. 모든 다른 외곽선은 만약 외곽선들이 같은 방향에서 맞추어 놓으면 처음 외곽선서첨 외부로 여겨진다. (시계방향, 또는 시계반대방향) 그리고, 그렇지 않으면, 내부로 여겨진다.
하나의 외곽선이 GLU_CCW 또는 GLU_CW중에 하나라면, 모든 외곽선은 같은 종류여야만 한다. (그렇지 않다면, 모든 GLU_CCW 그리고 GLU_CW은 GLU_UNKNOWN으로 바뀔것이다.)
GLU_CCW와 GLU_CW사이에서 그리고 외곽선 종류에서 실제로 다른 것은 없다.
처음에 외곽선이 처음 외곽선의 종류를 정의하기 위해서 기술되기 전에 gluNextContour은 호출될 수 있다. 만약 gluNextContour이 처음 외곽선전에 호출되지 않는다면, 처음 외곽선은 GLU_EXTERIOR로 표시된다.

Example
삼각형 구멍과 함께 quadrilateral은 다음과 같이 기술될 수 있다.

gluBeginPolygon(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluNextContour(tobj, GLU_INTERIOR);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluEndPolygon(tobj);

See Also

gluBeginPolygon, gluNewTess, gluTessCallback, gluTessVertex,
gluTessBeginContour


gluNurbsCallback

 gluNurbsCallback.3gl

Name

gluNurbsCallback - NURBS object을 위한 callback 선언

C Specification

void gluNurbsCallback( GLUnurbsObj *nobj,
GLenum which,
void (*fn)( )

Parameters

nobj NURBS object를 나열한다. (gluNewNurbsRenderer로).
which 선언되어진 callback을 나열한다. 단지 유효한 값은 GLU_ERROR이다.
fn callback을 호출하는 함수를 나열한다.

Description

gluNurbsCallback은 NURBS object에 의해서 사용되는 callback 선언을 위해서 사용된다. 이미 선언한 나열된 callback이 존재한다면, 그것이 대신한다. 루이 NULL이면, 지워지는 callbcack이 존재한다.
하나의 법률상의 callback은 GLU_ERROR이다.
GLU_ERROR 에러가 만날 때, error 함수가 호출된다. 그것의 한 개의 argument는 GLenum 종류이고, 그것은 특정한 에러가 발생된 것을 가리킨다. 거기에는 GLU_NURBS_ERROR37를 통하여 GLU_NURBS_ERROR1로 이름지어진 NURBS로 유일한 37개의 에러가 있다.
이런 에러들을 기술하는 문자 문자열은 gluErrorString으로 회수된다.

See Also

gluErrorString, gluNewNurbsRenderer


gluNurbsCurve

 gluNurbsCurve.3gl

Name

gluNurbsCurve - NURBS 곡선의 모양을 선언한다.

C Specification

void gluNurbsCurve( GLUnurbsObj *nobj,
GLint nknots,
GLfloat *knot,
GLint stride,
GLfloat *ctlarray,
GLint order,
GLenum type )

Parameters

nobj NURBS object를 나열한다. ( gluNewNurbsRenderer로).

nknots knot(매듭)에 있는 knot의 숫자를 나열한다.. nknots은 순서를 더하는 제어 점들의 숫자와 같다.

knot nknots nondecreasing knot 값의 배열을 나열한다.

stride offset을 나열한다. (하나의 정확한 floating숫자의 좌표 값처럼)

ctlarray control points의 배열을 가리키는 것을 나열한다. 좌표는 종류가 같아야 한다.

order NURBS 곡선의 순서를 나열한다. 순서는 degree +1과 같다. 그러므로 3차 곡선은 4개의 순서를 가지고 있다.

type 곡선의 종류를 나열한다. 만약 이 곡선이 gluBeginCurve/gluEndCurve쌍 내에서 선언된다면, 그 종류는 유효한 하나의 일차원의 평가자 종류일 수있다. (GL_MAP1_VERTEX_3 또는 GL_MAP1_COLOR_4처럼), gluBeginTrim/gluEndTrim쌍 사이에서 오로지 유효한 종류는 GLU_MAP1_TRIM_2 와 GLU_MAP1_TRIM_3이다.

Description

NURBS 곡선을 기술하기 위해서 gluNurbsCurve를 사용한다.
gluBeginCurve/gluEndCurve싸아 사이에 gluNurbsCurve가 나타날 때, 그것은 render 되기 위한 곡선의 기술을 위하여 사용된다. 위치상의 texture, 그리고 색깔 좌표들은 gluBeginCurve/gluEndCurve 사이에서 gluNurbsCurve로 나뉘는 것 처럼 현재의 것에 의해서 결합된다. 각각의 색깔, 위치, 그리고 texture 자료는 하나의 gluBeginCurve/gluEndCurve쌍에서 만들어질 수 있는 것을 더 이상 호출하지 않는다. 정확히 하나는 곡선의 위치 기술을 위해서 만들어 진다. (GL_MAP1_VERTEX_3 또는GL_MAP1_VERTEX_4 종류로)
gluBeginTrim/gluEndTrim 쌍 사이에 gluNurbsCurve이 나타날 때, 그것은 NURBS 표면에서 다듬기 곡선을 기술하기 위해서 사용된다. 만약 종류가 GLU_MAP1_TRIM_2이라면, 그것은 2차원(u와 v)파라메터 공간에서 곡선으로 기술된다. 만약 그것이 GLU_MAP1_TRIM_3이라면, 그것은 2차원 homogeneous(동질의) (u, v, w) 파라메터 공간에서 기술된다.
다듬기 곡선에 관해서 더 많은 것을 알고싶으면, gluBeginTrim을 참조한다.

Example

다음의 명령들은 수직선을 가지고, NURBS 곡선이 texture 되게 한다.

gluBeginCurve(nobj);
gluNurbsCurve(nobj, ..., GL_MAP1_TEXTURE_COORD_2);
gluNurbsCurve(nobj, ..., GL_MAP1_NORMAL);
gluNurbsCurve(nobj, ..., GL_MAP1_VERTEX_4); gluEndCurve(nobj);

Notes

한땀의 다듬기 곡선을 정의하기 위해서는 gluPwlCurve을 사용한다.

See Also

gluBeginCurve, gluBeginTrim, gluNewNurbsRenderer, gluPwlCurve


gluNurbsProperty

 gluNurbsProperty.3gl

Name

gluNurbsProperty - NURBS 속성의 집합

C Specification

void gluNurbsProperty( GLUnurbsObj *nobj,
GLenum property,
GLfloat value )

Parameters

nobj NURBS object을 나열한다. ( gluNewNurbsRenderer로).

property 집합이 되기위한 속성을 나열한다. 유효한 값은 GLU_SAMPLING_TOLERANCE, GLU_DISPLAY_MODE, GLU_CULLING, GLU_AUTO_LOAD_MATRIX, GLU_PARAMETRIC_TOLERANCE, GLU_SAMPLING_METHOD, GLU_U_STEP, 또는GLU_V_STEP이다.

value 가리키는 속성의 값을 나열한다. 숫자 값이 되거나, GLU_PATH_LENGTH, GLU_PARAMETRIC_ERROR, 또는 GLU_DOMAIN_DISTANCE중에 하나가 될 수 있다.

Description

gluNurbsProperty NURBS object에 저장된 속성을 제안하기위해서 사용한다.
이 속성들은 NURBS 곡선이 rendered 되는 방법에 영향을 준다. 속성의 법률적인 값은 다음과 같다.

GLU_SAMPLING_METHOD specifies how a NURBS 표면이 어떻게 tessellate되는지를 나열한다. 값이 GLU_PATH_LENGTH, GLU_PARAMETRIC_ERROR, 또는GLU_DOMAIN_DISTANCE중에 set 되것이다. GLU_PATH_LENGTH으로 set 될 때, 표면은 redner된다. 그래서 다각형의 tessellation의 edge의,pixel에서 길이의 최대, GLU_SAMPLING_TOLERANCE에 의해서 무엇이 나열되는것보다, 더 크지 않다.
pixel에서 GLU_PARAMETRIC_TOLERANCE 이 최대 거리에서 기술되는 것에 의해서 값이 나열되는 방법에서 GLU_PARAMETRIC_ERROR는 표면이 render되는 것을 나열한다.
tessellation 다각형과, 표면에서 그들이 접근하는 것 사이에서.
주기적인 좌표에서 GLU_DOMAIN_DISTANCE는 u, v 방향에서 주어진 단위길이당, 얼마나 많은 sample points가 있는지 사용자가 나열할 수 있도록 허락된다.
GLU_SAMPLING_METHOD의 default 값은 GLU_PATH_LENGTH이다.
GLU_SAMPLING_TOLERANCE은 sample 방법이 GLU_PATH_LENGTH으로 set 될 때, 사용할수 있도록 pixel에서 최대길이를 나열한다. NURBS 코드는 곡선이나, 표면이 rendering 될 때, 보존한다. 그래서 실제 길이는 더 짧은 것이 될 수 있다. default 값은 50.0 pixels 이다.
GLU_PARAMETRIC_TOLERANCE은 sample 방법이 GLU_PARAMETRIC_ERROR으로 set 될 때, 사용하기 위하여 pixel에서 최대 거리로 나열된다. default 값은 GLU_PARAMETRIC_TOLERANCE = 0.5이다.

GLU_U_STEP parametric 좌표에서 u 중심선을 따라 주어진 단위 길이당 sample points의 숫자를 나열한다. 그것은 GLU_SAMPLING_METHOD이 GLU_DOMAIN_DISTANCE으로 set 될 때, 필요하다. default값은 100이다.

GLU_V_STEP parametric 좌표에서 v 중심선을 따라 주어진 단위 길이당, sample points의 숫자를 나열한다. GLU_SAMPLING_METHOD이 GLU_DOMAIN_DISTANCE으로 set 될 때, 필요하다. default 값은 100이다.

GLU_DISPLAY_MODE NURBS 표면이 render하도록 값을 정의한다. 값은 GLU_FILL, GLU_OUTLINE_POLYGON, 또는 GLU_OUTLINE_PATCH일 수 있다. GLU_FILL로 set 될 때, 표면은 다각형의 집합처럼 render된다. GLU_OUTLINE_POLYGON은 다각형의 단지 outlines을 그리기 위해어 NURBS library가 tessellationdmld 의해서 생성되는 것을 명령한다. GLU_OUTLINE_PATCH은 사용자에 의해서 patches와 다듬기 곡선의 outlines가 정의 되는 것을 그려지게한다. default 값은 GLU_FILL이다.

GLU_CULLING NURBS 곡선의 control points가 현재의 viewport 바깥쪽에 있다면, NURBS 곡선은 이전의 tessellation을 버려아만 하는 것을 가리키는 GL_TRUE로 set 될 때, 값은 Boolean 값이다. default 값은 GL_FALSE이다. (왜냐하면, NURBS 곡선은 그것의 control points의 볼록한 표피 범위 내에서 완전히 떨어질수는 없기 때문이다.)

GLU_AUTO_LOAD_MATRIX 값은 Boolean 이다. GL_TRUE로 set 될 때는 NURBS 코드는 projection(투사) matrix, the modelview matrix, 그리고 OpenGl 서버가 render되는 각각의 NURBS 곡선을 위한 sampling 그리고, culling(발췌된) matrix들을 게산하는 것으로부터 viewport를 download한다. 이것은 gluLoadSamplingMatrices을 가지고 해질 수 있다. 이 모드의 default는 GL_TRUE이다. 이 모드를 GL_TRUE에서 GL_FALSE로 바꾸는 것은 gluLoadSamplingMatrices이 호출될때까지 sampling, culling matrix들에 영향을 끼치지 않는다.

Notes

GLU_PARAMETRIC_TOLERANCE, GLU_SAMPLING_METHOD, GLU_V_STEP,또는 GLU_U_STEP, 또는 GLU_PATH_LENGTH의 값, GLU_PARAMETRIC_ERROR, LU_DOMAIN_DISTANCE의 속성은 GLU 1.1 version에서 지원된다. 그것들은 1.0 버전에서는 유효한 파라매터가 아니다.
gluGetString은 GLU version이 결정하는것에 따라 사용될 수 있다.

See Also

gluGetNurbsProperty, gluLoadSamplingMatrices, gluNewNurbsRenderer,
gluGetString.


gluNurbsSurface

 gluNurbsSurface.3gl

Name

gluNurbsSurface - NURBS 표면의 모양을 정의한다.

C Specification

void gluNurbsSurface( GLUnurbsObj *nobj,
GLint uknot_count,
GLfloat *uknot,
GLint vknot_count,
GLfloat *vknot,
GLint u_stride,
GLint v_stride,
GLfloat *ctlarray,
GLint uorder,
GLint vorder,
GLenum type )

Parameters

nobj NURBS object를 나열한다. (created with gluNewNurbsRenderer).

uknot_count parametric u 방향에서 knots의 숫자를 나열한다.

uknot parametric u 방향에서 uknot_count이 줄지않는 knot 값의 배열을 나열한다.

vknot_count parametric v 방향에서 knots의 숫자를 나열한다.

vknot parametric v 방향에서 vknot_count 감소하지 않는 knot 값들의 배열을 나열한다.

u_stride ctlarray에서 parametric u 방향에서 계속되는 control points들 사이에서 offset( single-precision floating point values 숫자처럼)을 나열한다.

v_stride ctlarray에서 parametric v 방향에서 계속되는 control points들 사이에서 offset( single-precision floating point values 숫자처럼)을 나열한다.

ctlarray NURBS 표면을 위한 control points를 포함하는 배열을 나열한다. parametric u, v 방향에 있는 계속되는 control points 사이에 offset들은 u_stride와 v_stride에 의해서 주어진다.

uorder parametric u방향에서 NURBS 표면의 순서를 나열한다.

vorder parametric v방향에서 NURBS 표면의 순서를 나열한다. 그 순서는 하나의상의 degree, v가 가지고 있는 4차 v안에 cubic인 hence 표면이다.

type 표면의 타입을 나열한다. 종류는 two-dimensional evaluator types( GL_MAP2_VERTEX_3또는 GL_MAP2_COLOR_4)이 유효하다.

Description

gluNurbsSurface은 NURBS (Non-Uniform Rational B-Spline) 표면 내에서 사용한다. NURBS 표면( 다듬기 하기전에)의 형태를 기술하기 위해서 정의한다.
NUBRS 표면의 정의의 시작을 표하시기 위해서 gluBeginSurface명령을 사용한다. NUBRS 표면 정의의 끝을 표시하기 위해서 gluEndSurface 명령을 사용한다.
gluNurbsSurface은 NURBS 표면 정의 내에서만 호출한다.
위치상의, texture, 그리고, 색 좌표들은 표면을 가지고 gluBeginSurface/gluEndSurface쌍 사이에서 gluNurbsSurface를 나누는것처럼 각 현존하는 것에 의해서 결합된다. 각각의 색, 좌표, texture data를 위한 gluNurbsSurface은 하나의 gluBeginSurface/gluEndSurface 쌍 내서 만들어 질 수 있다. 정확히 하나의 호출은 표면(GL_MAP2_VERTEX_3 또는 GL_MAP2_VERTEX_4의 종류)의 위치를 기술하기 위해서 만들어 지어야만한다.
NURBS 표면은 gluBeginTrim과 gluEndTrim 호출 사이에서 gluNurbsCurve와 gluPwlCurve 명령 사용에 의해서 다듬기 될 수 있다.

Example

다음의 명령들은 수직선들을 가지고, textured NURBS 표면을 render한다.; texture 좌표들과 수직선들 또한 NURBS 표면이다.

gluBeginSurface(nobj);
gluNurbsSurface(nobj, ..., GL_MAP2_TEXTURE_COORD_2);
gluNurbsSurface(nobj, ..., GL_MAP2_NORMAL);
gluNurbsSurface(nobj, ..., GL_MAP2_VERTEX_4); gluEndSurface(nobj);

See Also

gluBeginSurface, gluBeginTrim, gluNewNurbsRenderer, gluNurbsCurve,
gluPwlCurve


gluOrtho2D

 gluOrtho2D.3gl

Name

gluOrtho2D - 2-D orthographic(직각) projection(투사) matrix를 정의한다.

C Specification

void gluOrtho2D( GLdouble left,
GLdouble right,
GLdouble bottom,
GLdouble top )

Parameters

left, right 왼쪽과 오른쪽 수직의 clipping 표면을 위한 좌표를 나열한다.
bottom, top bottom과 top 수평의 clipping 표면을 위한 좌료를 나열한다.
Description
gluOrtho2D은 two-dimensional 지각의 보여지는 영역을 set up 한다. 이것은 near = -1, 그리고 far = 1을 가지고 glOrtho호출을 하는것과 같다.

See Also

glOrtho, gluPerspective


gluPartialDisk

 gluPartialDisk.3gl

Name

gluPartialDisk - disk의 호를 그린다.

C Specification

void gluPartialDisk( GLUquadricObj *qobj,
GLdouble innerRadius,
GLdouble outerRadius,
GLint slices,
GLint loops,
GLdouble startAngle,
GLdouble sweepAngle )

Parameters

qobj a quadrics(2차 곡면) object를 나열한다. (created with gluNewQuadric).

innerRadius 일부분 disk의 안쪽 반지름을 나열한다. (0일수 있다.).

outerRadius 일부분 disk의 바깥쪽 반지름을 나열한다.

slices z 중심축 주위를 잘게 나눈 숫자를 나열한다.

loops 일부분의 disk가 잘게 나뉘어진 것으로부터 원래의것에 관하여 중심이 같은 ring의 숫자를 나열한다.

startAngle disk 부분의 degree에서 출발각을 나열한다.

sweepAngle disk 부분의 degree에서 sweep 각을 나열한다.

Description

gluPartialDisk z = 0인 평면의 일부분 disk를 render한다. 일부분 disk는 가득찬 disk와 유사하다. startAngle + sweepAngle이 포함되는 것을 통하여 startAngle로부터 disk의 subset이라는 것을 제외하고는. (0 degrees는 +y 중심선을 따라, 90 degree +x 중심선을 따라, 180 degree는 -y 중심선을 따라, 그리고, 270 degree는 -x 중심선을따라)
일부분 disk는 outerRadius의 반지름과 innerRadius의 반지름을 가지고 동심의 원형의 구멍을 포함하는 반지름을 가지고 있다. 만약 innerRadius가 0 이라면, 구멍이 생성되지 않느다. 그 일부분의 disk는 z 중심선 주위에서 slices로 (피자 slices같이) 잘게 나뉜다. 그리고, 또한 z 중심선에 관하여 rings(마치 slices와 loops에 의해서 나열되는 것 처럼)로 잘게 나뉜다.
부분의 disk의 +z 쪽은 바깥쪽으로 여겨진다. (gluQuadricOrientation을 본다). 이것은 orientation(방향)이 GLU_OUTSIDE로 set 되면, 수직선이 +z 중심선을 따라 점이 생성된다는 것을 의미한다. 그렇지 않으면 -z 중심선을 따라서 생성된다.
만약 texturing이 turn on(with gluQuadricTexture) 되고, texture 좌표들이 선형으로 생성된다면, r = outerRadius, 값 (r, 0, 0) 은 (1, 0.5), (0, r, 0)은 (0.5, 1), (-r, 0, 0) 은 (0, 0.5), 그리고 (0, -r, 0) 은 (0.5, 0)이다.

See Also

gluCylinder, gluDisk, gluNewQuadric, gluQuadricOrientation,
gluQuadricTexture, gluSphere


gluPerspective

 gluPerspective.3gl

Name

gluPerspective - set up a perspective(원근법, 투시화법) projection(투시) matrix

C Specification

void gluPerspective( GLdouble fovy,
GLdouble aspect,
GLdouble zNear,
GLdouble zFar )

Parameters

fovy y 방향에서 각도로 보는 각의 분야를 나열한다.

aspect x 방향에서 보는 분야를 결정하는 관점 비율을 나열한다. 관점 비율은 x(width) to y (height)이다.

zNear 관찰자로부터 clipping 평면 근처까지의 거리를 나열한다. (항상 양수)

zFar 관찰자로부터 떨어진 clipping 평면까지의 거리를 나열한다. (항상 양수)

Description
gluPerspective 좌표 시스템에서 보여지는 절두체(frustum)를 나열한다.
점차로, gluPerspective에 있는 관점 비율은 viewport와 결합되는 관점 비율과 match한다. 예를들어, aspect = 2.0은 보는 관찰자의 각이 x는 y의 두배 너비이다. 만약 viewport가 높에서 두배 넓다면, 그것은 찌그러짐 없이 이미지로 나타난다.
gluPerspective 에 의해서 생성된 matrix는 현재의 matrix에 의해서 다수가 된다. glMultMatrix가 호출되면, 생성되는 matrix와 함께. 현재의 matrix stack 대신에 위에 투시화법 matrix를 load 하기 위해 glLoadIdentity호출과 함께, gluPerspective 호출을 먼저한다.
다음과 같이 f를 정의한다.

                    fovy
f = cotangent(----)
               2
생성된 matrix는

f |  |  |
------- | 0 | 0 | 0
aspect |  |  |
0 | f | 0 | 0
 |  | zFar+zNear | 2*zFar*zNear
0 | 0 | ------- | -------
 |  | zNear-zFar | zNear-zFar
0 | 0 | -1 | 0

Notes

깊이 buffer 정확도는 zNear, zFar의 나열된 값에 따라서 영향을 받는다. zFar대 zNear의

See Also

glFrustum, glLoadIdentity, glMultMatrix, gluOrtho2D


gluPickMatrix

 gluPickMatrix.3gl

Name

gluPickMatrix - picking 영역을 정의한다.

C Specification

void gluPickMatrix( GLdouble x,
GLdouble y,
GLdouble width,
GLdouble height,
GLint viewport[4] )

Parameters

x, y window에서 picking 영역의 중앙을 나열한다.

width, height 창 좌표에서 picking 영역의 각각의 너비, 높이를 나열한다.

viewport 현재 viewport를 나열한다. (glGetIntegerv호출로부터)

Description

gluPickMatrix 는 viewport의 작은 영역을 그리는 것을 제한하기 위해서 사용될 수 있는 투시 matrix를 창조한다. 이것은 전형적으로 커서 근처에 무엇이 그려지는지를 결정하는데 유용하다. 그때, 선택 모드(glRenderMode와 rerender scene)가 들어온다. 커서 근처에 그려지는 모든 원시의 것들은 확인되고 선택 buffer에 저장된다.
gluPickMatrix에 의해서 창조된 matrix는 현재의 matrix를 증가시킨다. 생성된 matrix를 가지고, glMultMatrix이 호출되는 것에 의해서. picking을 위해서 생성된 pick matrix를 효율적으로 사용하기 위해서 먼저 glLoadIdentity을 호출한다. 그다음 gluPickMatrix을 호출하고, 끝으로, pick matrix에 의해서 perspective matrix를 증가시키기 위해서 ( gluPerspective와 같은) 명령을 호출한다.
NURBS를 pick 하기 위해서 gluPickMatrix을 사용할 때, NURBS 속성이 GLU_AUTO_LOAD_MATRIX로 turn off 되도록 조심해야 한다. 만약 GLU_AUTO_LOAD_MATRIX 이 turn off 되지 않으면, NURBS 표면은 pick matrixdjqt이 잘게 나누는 방법보다, pick matrix를 가지고 다르게 잘게 나뉘인다.

Example

glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(...);
glMatrixMode(GL_MODELVIEW); /* Draw the scene */

a portion of the viewport can be selected as a pick region like this:

glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPickMatrix(x, y, width,
height, viewport); gluPerspective(...); glMatrixMode(GL_MODELVIEW); /* Draw
the scene */

See Also

glGet, glLoadIndentity, glMultMatrix, glRenderMode, gluPerspective


gluProject

 gluProject.3gl

Name

gluProject - object좌표와 창 좌표를 map한다.

C Specification

int gluProject( GLdouble objx,
             GLdouble objy,
             GLdouble objz,
             const GLdouble modelMatrix[16],
             const GLdouble projMatrix[16],
             const GLint viewport[4],
             GLdouble *winx,
             GLdouble *winy,
             GLdouble *winz )

Parameters

objx, objy, objz object 좌표를 나열한다.

modelMatrix 현재의 modeview matrix를 나열한다. (glGetDoublev호출하는 것처럼)

projMatrix 현재의 투사 matrix를 나열한다.(glGetDoublev호출하는 것처럼)

viewport 현재의 viewport를 나열한다. (glGetIntegerv로부터 호출하는 것 처럼)

winx, winy, winz 계산된 창 좌표들을 return 한다.

Description

gluProject는 modelMatrix, projMatrix,그리고 viewport 사용하는 윈도우 좌표로부터 나열된 object 좌표를 변형시킨다. 그 결과 winx, winy, 그리고 winz에 저장된다. GL_TRUE가 return 되면 성공, GL_FALSE이 return 되면 실패를 가리킨다.

See Also

glGet, gluUnProject


gluPwlCurve

 gluPwlCurve.3gl

Name

gluPwlCurve - 낱낱으로 선형 NURBS 다듬기 곡선을 기술한다.

C Specification

void gluPwlCurve( GLUnurbsObj *nobj,
               GLint count,
               GLfloat *array,
               GLint stride,
               GLenum type )

Parameters

nobj NURBS object를 나열한다. ((created with gluNewNurbsRenderer).

count 곡선위에 점들의 숫자를 나열한다.

array curve points를 포함한 배열을 나열한다.

stride 곡선위에 점들사이에서 offset(single-precision floating-point 값의 숫자)을 나열한다.

type 곡선의 종류를 나열한다. GLU_MAP1_TRIM_2나 GLU_MAP1_TRIM_3 둘중에 하나이어야 한다.

Description

gluPwlCurve은 NURBS 표면을위한 구분적으로 선형 다듬기 곡선을 기술한다. 구분적으로 선형 곡선은 다듬기 위해서 NURBS 곡선을 위한 파라매터 공간에 있는 점들의 좌표 리스트로 구성된다. 이 점들은 곡선으로부터 부분적은 선으로 연결되어있다.
만약, 종류가 GLU_MAP1_TRIM_2이라면, 그것은 two-dimensional (u 그리고 v) parameter space 에 있는 곡선으로 기술된다. 만약 GLU_MAP1_TRIM_3이라면, two-dimensional homogeneous (u, v, 그리고 w) parameter space에 있는 곡선으로 기술된다.

Notes

NURBS 표면의 윤곽들이 가깝게 따라오는 다듬기를 기술하기위해서는 gluNurbsCurve을 사용한다.

See Also

gluBeginCurve, gluBeginTrim, gluNewNurbsRenderer, gluNurbsCurve


gluQuadricCallback

 gluQuadricCallback.3gl

Name

gluQuadricCallback - a quadrics(2차 곡면) object callback을 정의한다.

C Specification

void gluQuadricCallback( GLUquadricObj *qobj,
                         GLenum which,
                         void (*fn)( )

Parameters

qobj quadrics(2차곡면) object를 나열한다. (created with gluNewQuadric).
which 정의되는 callback를 나열한다. 유효한 값은 오로지 GLU_ERROR이다.
fn 호출되는 함수를 나열한다.

Description

gluQuadricCallback은 quadrics(2차곡면) object에 의해서 사용되는 새로운 callback을 정의하기 위해서 사용된다. 만약, 나열된 callback이 이미 정의 되었다aus, 그것으로 대신한다. fn 이 NULL이면, 존재하는 callback이 지워진다.
하나의 legal callback은 GLU_ERROR이다.
GLU_ERROR 이 함수는 에러를 만나면 호출된다. 그것의 하나의 argument는 GLenum종류이고, 그것은 명확한 에러를 가리킬 때 발생한다. 문자열들 기술은 이런 에러들이 gluErrorString 호출과 함께 되찾아진다.

See Also

gluErrorString, gluNewQuadric


gluQuadricDrawStyle

 gluQuadricDrawStyle.3gl

Name

gluQuadricDrawStyle -quadrics(2차원곡면)을위한 희망하는 그리고 스타일을 나열한다.

C Specification

void gluQuadricDrawStyle( GLUquadricObj *qobj,
                         GLenum drawStyle )

Parameters

qobj quadrics object를 나열한다. (created with gluNewQuadric).

drawStyle 원하는 그리기 스타일을 나열한다. 유효한 값은 GLU_FILL, GLU_LINE, GLU_SILHOUETTE 그리고 GLU_POINT이다.

Description

gluQuadricDrawStyle은 qobj를 가지고 render된 quadrics(2차원곡면)을 위한 그리기 곡선을 나열한다. legal 값은 다음과 같다.

GLU_FILL Quadrics(2차원 곡면)은 기본의 다각형을 가지고 render된다. 다각형들은 시계방향으로 그려진다. (gluQuadricOrientation 정의 처럼)

GLU_LINE Quadrics(2차원 곡면) 선의 set처럼 render된다.

GLU_SILHOUETTE Quadrics(2차원 곡면) 선의 set처럼 render된다.동일 평면상에 그려지지 않는 것을 제외하고.

GLU_POINT Quadrics(2차원 곡면) 점의 set처럼 render된다.

See Also

gluNewQuadric, gluQuadricNormals, gluQuadricOrientation, gluQuadricTexture


gluQuadricNormals

 gluQuadricNormals.3gl

Name

gluQuadricNormals - 어떤 종류의 수직선을 2차원 곡면에서원하는지를 나열한다.

C Specification

void gluQuadricNormals( GLUquadricObj *qobj,
                          GLenum normals )

Parameters

qobj quadrics object을 나열한다. (created with gluNewQuadric).

normals 수직선의 기대되는 종류를 나열한다. 유효한 값은 GLU_NONE, GLU_FLAT, 그리고 GLU_SMOOTH이다.

Description

gluQuadricNormals 어떤 종류의 수직선이 qobj를 가지고 render 되는 2차원 곡면을 원하는지를 나열한다. legal 값은 다음과 같다.
GLU_NONE 생성되는 수직선이 없다.

GLU_FLAT 2차 곡면의 모든 면에 하나의 수직선이 생성된다.

GLU_SMOOTH 하나의 수직선이 2차원 곡면의 모든 vertex에 생성된다. 이것은 default이다.

See Also

gluNewQuadric, gluQuadricDrawStyle, gluQuadricOrientation,
gluQuadricTexture


gluQuadricOrientation

 gluQuadricOrientation.3gl

Name

gluQuadricOrientation - 2차원 곡면을 위한 안쪽/바깥쪽 방위를 나열한다.

C Specification

void gluQuadricOrientation( GLUquadricObj *qobj,
                            GLenum orientation )

Parameters

qobj quadrics object를 나열한다. (created with gluNewQuadric).

orientation 원하는 방위를 나열한다. 유효한 값은 GLU_OUTSIDE 그리고 GLU_INSIDE이다.

Description

gluQuadricOrientation은 어떤 종류의 방위가 qobj를 가지고 render되는 2차원 곡면을 원하는지를 나열한다. 방위의 값은 다음과 같다.ation values are as follows:

GLU_OUTSIDE 2차원 곡면은 바깥으로 향하는 수직선을 가지고 그려진다.

GLU_INSIDE 안쪽으로 향하는 수직선을 가리킨다. default 값은 GLU_OUTSIDE이다.

주의할 것은 바깥쪽과 안쪽이 2차원 곡면이 그려지는 것을 의지하는 해석이다.

See Also

gluNewQuadric, gluQuadricDrawStyle, gluQuadricNormals, gluQuadricTexture


gluQuadricTexture

 gluQuadricTexture.3gl

Name

gluQuadricTexture - texturing이 2차원 곡면을 원하는지를 나열한다.

C Specification

void gluQuadricTexture( GLUquadricObj *qobj,
GLboolean textureCoords )

Parameters

qobj quadrics object을 나열한다. (created with gluNewQuadric).

textureCoords texture 좌표들이 생성되는지 아닌지를 가리키는 flag를 나열한다.

Description

gluQuadricTexture은 qobj를 가지고 render되는 2차원 곡면을 texture 좌표들이 생성하는지 아닌지를 나열한다. 만약 textureCoords의 값이 GL_TRUE이면, texture 좌표는 생성된다. 그리고, 만약에 textureCoords가 GL_FALSE이면 생성되지 않는다. default값은 GL_FALSE이다.
texture 좌표가 생성되는 방법은 구체적인 2차원 곡면의 render되는것에 달려있다.

See Also

gluNewQuadric, gluQuadricDrawStyle, gluQuadricNormals,
gluQuadricOrientation


gluScaleImage

 gluScaleImage.3gl

Name

gluScaleImage - 마음대로하는 크기의 이미지를 scale한다.

C Specification

int gluScaleImage( GLenum format,
                 GLint widthin,
                   GLint heightin,
                 GLenum typein,
                 const void *datain,
                 GLint widthout,
                 GLint heightout,
                 GLenum typeout,
                 void *dataout )

Parameters

format pixel data의 형태를 나열한다. 다음 상징 값은 유효하다. GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, 그리고 GL_LUMINANCE_ALPHA.

widthin, heightin
scale되는 근본 이미지의 각각의 너비와 높이를 나열한다.

typein data 종류를 나열한다. GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, 또는 GL_FLOAT중에 하나이어야 한다.

datain 근본 이미지 포인터를 나열한다.

widthout, heightout
바뀐후의 이미지의 각각의 너비와 높이를 나열한다.

typeout data type을 나열한다. 다음중에 하나여야 한다. GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT,또는 GL_FLOAT

dataout 바뀐후의 이미지의 포인터를 나열한다.

Description

이미지가 줄어들 때, gluScaleImage은 근본 이미지 sample과 목적 이미지의 piexel 창조를 위해 상자 필터를 사용한다. 니미지를 확대할 때, 근본 이미지로부터 pixel은 선형적으로 목적 이미지를 창조하기 위해서 삽입된다.
0가 return 되는 것은 성공을 나타내고, 그렇지 않으면 GLU에러 코드는 무엇이 문제인지를 가리키는 것을 return 한다.(see gluErrorString).
See Also
glDrawPixels, glReadPixels, gluBuild1DMipmaps, gluBuild2DMipmaps,
gluErrorString


gluSphere

 gluSphere.3gl

Name

gluSphere - 구를 그린다.

C Specification

void gluSphere( GLUquadricObj *qobj,
                 GLdouble radius,
                 GLint slices,
                 GLint stacks )

Parameters

qobj quadrics object를 나열한다. (created with gluNewQuadric).

radius 구의 반지름을 나열한다.

slices z 중심선 주위를 잘게 나누는 숫자를 나열한다. (경도의 선과 유사하다)

stacks z 중섬선을따라 잘게 나누는 숫자를 나열한다. (위도의 선과 유사하다)

Description

gluSphere는 주어진 반지름의 구를 그린다. 구는 z 중심선 주의를 slice로, 그리고, z 중심선을 stack으로 잘게 나눈다. (마치 경선과 위선같이)
만약, 방향이 GLU_OUTSIDE (with gluQuadricOrientation)으로 set 되었다면, 수직선은 구의 중심으로부터 멀리 떨어진 점을 생성한다. 그렇지 않으면, 구의 중심쪽으로 점을 생성한다.
만약 texturing이 turn on (with gluQuadricTexture)된다면, texture 좌표는 t 범위는 z = - radius 일 때 0부터 z = radius 일 때 1.o까지,(t는 선선을 따라 선형으로 증가한다. ), 그리고 s의 범위는 +y 중심선일 때, 0.0부터 +x 중심선일 때 0.25까지, -y 중심선일 때, 0.5 까지, -x 중심선일 때 0.75까지, +y 중심선일 때 1.0까지로 생성된다

See Also

gluCylinder, gluDisk, gluNewQuadric, gluPartialDisk, gluQuadricOrientation
gluQuadricTexture


gluTessBeginContour

 gluTessBeginContour, gluTessEndContour.3gl

Name

gluTessBeginContour, gluTessEndContour - 윤곽의 기술을 제한한다.

C Specification

void gluTessBeginContour( GLUtesselator *tess )
void gluTessEndContour( GLUtesselator *tess )

Parameters

tess tessellation object를 나열한다. (created with gluNewTess).

Description

gluTessBeginContour 와 gluTessEndContour는 다각형 윤곽의 정의를 제한한다. 각 gluTessBeginContour/gluTessEndContour쌍 내에서 0 또는 더많은 gluTessVertex 호출일 수 있다. vertex들은 가까운 윤곽을 나열한다.( 각 윤곽의 마지막 vertex는 자동적으로 처음으로 링크된다. 더 상세한 것은 gluTessVertex에 나와있다. gluTessBeginContour은 gluTessBeginPolygon와 gluTessEndPolygonp이서만 호출될수 있다.

See Also

gluNewTess, gluTessBeginPolygon, gluTessVertex, gluTessCallback,
gluTessProperty, gluTessNormal, gluTessEndPolygon


gluTessBeginPolygon

 gluTessBeginPolygon.3gl

Name

gluTessBeginPolygon - 다각형 기술을 제한한다.

C Specification

void gluTessBeginPolygon( GLUtesselator *tess,
                         void *polygon_data )
Parameters
tess tessellation object을 나열한다. (created with gluNewTess).
polygon_data 사용자 다각형 data를 가리키는 것을 나열한다.

Description

gluTessBeginPolygon 과 gluTessEndPolygon은 복록하지 않은 다각형의 정의를 제한한다. 각각의 gluTessBeginPolygon/gluTessEndPolygon 쌍 내에서 하나 또는 그 이상의 gluTessBeginContour/gluTessEndContour 호출이 있어야만한다. 각각의 윤곽 내에서 0또는 그이상의 gluTessVertex 호출이 있다. 그 vertex들은 가까운 윤곽을 나열한다. (각각의 윤곽의 마지막 vertex는 자동적으로 처음으로 링크된다. ) 더 자세한 것은 gluTessVertex, gluTessBeginContour 와 gluTessEndContour 관련 페이지에 나와있다.
polygon_data는 사용자 정의 data 구조를 가리킨다. 만약 callback이 나열 된다면(see gluTessCallback), 이 포인터는 callback 함수를 return한다. 그러므로, 이것은 per-polygon 정보를 저장하는 편리한 방법이다.
gluTessEndPolygon이 한번 호출되면, 다각형은 tessellate된다. 그리고, 삼각형의 결과는 callback을 통하여 기술된다. callback 함수의 기술은 gluTessCallbackd 에 있다.

Example

삼각형의 구멍을 가지고 quadrilatera은 다음과 같이 기술된다.
gluTessBeginPolygon(tobj, NULL);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluTessEndContour(tobj);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);

See Also

gluNewTess, gluTessBeginContour, gluTessVertex, gluTessCallback,
gluTessProperty, gluTessNormal gluTessEndPolygon


gluTessCallback

 gluTessCallback.3gl (GLU version 1.2 and later)

Name

gluTessCallback - 모자이크형 물체를 위한 callback(함수)을 정의한다.

C Specification

void gluTessCallback(GLUtesselator *tess, GLenum which, void (*fn)() )

Parameters

tess 모자이크형(격자형) 물체의조건을지정한다.(gluNewTess에의해생성된)
which 정의되어진 callback을 기입한다. 다음과 같은 값들은 유효하다.
GLU_TESS_BEGIN, GLU_TESS_BEGIN_DATA, GLU_TESS_EDGE_FLAG,
GLU_TESS_EDGE_FLAG_DATA, GLU_TESS_VERTEX, GLU_TESS_VERTEX_DATA,
GLU_TESS_END, GLU_TESS_END_DATA, GLU_TESS_COMBINE,
GLU_TESS_COMBINE_DATA, GLU_TESS_ERROR, GLU_TESS_ERROR_DATA
fn 호출되어지는함수를기입한다.

Description

gluTessCallback
모자이크형 물체에 사용되어지는 callback을 나타내는데 사용된다. 지정된 callback이 이미 정의되었다면 교체되어진다. fn이 널값이라면 존재하는 callback은 막연하게 된다. 각 callback는 두가지 종류가 있다. 하나는 사용자에 의해 기술된 다각형 데이타이고, 다른 하나는 사용자에 의해 기술된게 아니다. 두종류의 특별한 callback들이 기술된다면, 사용자에 의해 기술된 다각형 자료가 사용되어질 것이다. "polygon_data" 는 gluTessBeginPolygon이 호출되어졌을 때 기술되어지는 포인터의 복사본이다. 규칙에 맞는 callback들은 다음과 같다.
GLU_TESS_BEGIN
callback 의 시작은 최초의 시작을 나타내기 위해 glBegin처럼 표현된다. 그 함수는 GLenum형의 한개의 argument만을 취한다. GLU_TESS_BOUNDARY_ONLY 값이 GL_FALSE로 놓이면, 그 arguments는 GL_TRIANGLE_FAN 또는 GL_TRIANGLE_STRIP 또는 GL_TRIANGLES 중 하나로 세팅된다. GLU_TESS_BOUNDARY_ONLY 값이 GL_TRUE로 놓이면, 그 argument는 GL_LINE_LOOP로 설정되어 질 것이다. callback을 위한 함수의 원형은 다음과 같다. void begin(GLenum type );
GLU_TESS_BEGIN_DATA
취할수 있는 추가적인 포인터 argument를 제외하고는 GLU_TESS_BEGIN callback과 같다. 이 포인터는 gluTEssBeginPolygon이 호출되었을때 제공되어지는 불분명한 포인터와 동일하다. 이 callback을 위한 함수의 원형은 다음과 같다. void beginData ( GLenum type, void *polygon_data );
GLU_TESS_EDGE_FLAG
edge flag callback은 glEdgeFlag와 유사하다. 그 함수는 다각형 경계에 누워있는 모서리를 가리키는 단일 boolean falg형식을 취한다. flag가 GL_TRUE이면, 각각의 정점들은 다각형 경계에 누워있는(외부의 범위와 내부의 범위로 나눠진) 모서리에서 시작된다. 만약 falg 가GL_FALSE이면 edge flag callback는 각 정점은 다각형 내부에 놓여진 모서리에서 시작된다. triangel fans와 triangle strips가 edge flag를 지원하지 않기 때문에, 시작 callback은 edge flag callback이 제공되어지지 않는다면 GL_TRIANGLE_FAN 또는 GL_TRIANGLE_STRIP와 함께 호출되어지지 않는다. 대신에, fans와 strips 가 독립된 triangle들로 변환되어진다. 이 callback을 위한 함수의원형은 다음과 같다. void edgeFlag ( GLboolean flag );
GLU_TESS_EDGE_FLAG_DATA
추가적인 포인터 argument를 취하는 것을 제외하고는 GLU_TESSS_EDGE_FLAG와 같다. 이 포인터는 gluTessBeginPolygon 이 호출되어졌을때 제공되는 불분명한 포인터와 동일하다. 이 callback을 위한 함수의 원형은 다음과 같다. void edgeFlagData (GLboolean flag, void *polygon_data);
GLU_TESS_VERTEX
vertex callback는 begin callback와 end callback들 사이에서 발생된다. 그것은 glVertex와 유사하고, 모자이크 처리에 의해 생성된 삼각형 정점들로 정의한다. 이 함수는 그것의 유일한 argument로써 포인터를 취한다. 이 포인터는 vertex가 기술되어질때 사용자에 의해 제공된 불분명한 포인터와 동일하다. 이 callback를 위한 함수의 원형은 다음과 같다. void vertex( void *vertex_data );
GLU_TESS_VERTEX_DATA
추가적인포인터argument를취한다는것을제외하면GLU_TESS_VERTEX와같다. 이포인터는 gluTessBeginPolygon 이 호출되어질 때 제공되는 불분명한 포인터와 동일하다. 이 callback를 위한 함수의 원형은 다음과 같다. void vertexData ( void *vertex_data, void *polygon_data );
GLU_TESS_END
end callback는 glEnd와 같은 용도들을 제공한다. 그것은 어떤 argument도 취하지 않는다. 이 callback를 위한 함수의 원형은 다음과 같다. void end(void);
GLU_TESS_END_DATA
추가적인 포인터 argument를 취한다는 것을 제외하면 GLU_TESS_END와 같다. 이 callback를 위한 함수의 원형은 다음과 같다. void endData(void *polygon_data);
GLU_TESS_COMBINE
combine callback은 모자이크 세공에서 교차점이 발견됐을때, 혹은 모양들 모양들을 합치기를 원할 때 새로운 vertex를 생성하기 위하여 호출된다. 이 함수는 4개의 argument를 가진다. GLdouble형의 각 세요소의 배열은 4개의 포인터들의 배열과 GLfloat형의 각 4개의 요소의 배열 그리고 포인터에 대한 포인터이다. 이 함수의 원형은 다음과 같다. void combine( GLdouble coords[3], void *vertex_data[4], GLfloat weight[4], void **outData ); vertex는 vertex_data에 저장되어 있는 4개의 존재하는 vertex들의 일차 조합으로써 정의된다. 1차조합의 계수들은 weight에 의해 주어지며(이러한 weight의 합은 항상 1.0이다), 모든 vertex 포인터들은 weight들의 몇몇이 0이어도 유효하다. coord(좌표)는 새로운 점의 위치를 나타낸다. 사용자는 vertex_data와 weight를 이용한 파라메터를 기입하고, outData내의 새로운 vertex 포인터를 리턴하고, 새로운 vertex를 할당해야만 한다. 사용자는 gluTessEndPolygon을 호출한 후 메모리를 free할 책임이 있다. 예를 들어 만약 물체가 3차원의 arbitary 공간에 있고 각 점과 색을 연결한다면 GLU_TESS_COMBINE인 다음과 같이 사용할 수 있다.
void myCombine( GLdouble coords[3], VERTEX *d[4],
GLfloat w[4], VERTEX **dataOut )
{
VERTEX *new = new_vertex();
new->x = coords[0];
new->y = coords[1];
new->z = coords[2];
new->r = w[0]*d[0]->r + w[1]*d[1]->r + w[2]*d[2]->r
+ w[3]*d[3]->r;
new->g = w[0]*d[0]->g + w[1]*d[1]->g + w[2]*d[2]->g
+ w[3]*d[3]->g;
new->b = w[0]*d[0]->b + w[1]*d[1]->b + w[2]*d[2]->b
+ w[3]*d[3]->b;
new->a = w[0]*d[0]->a + w[1]*d[1]->a + w[2]*d[2]->a
+ w[3]*d[3]->a;
*dataOut = new;
}
GLU_TESS_COMBINE_DATA
이것은 하나의 추가적인 pointer 인자를 가진다는 것을 제외하고는 GLU_TESS_COMBINE과 동일하다. 이 포인터는 gluTessBeginPolygon을 호출했을 때 제공되어진 불투명한 포인터와 동일하다. 이 callback을 위한 함수 원형은 다음과 같다. void combineData(GLdouble coords[3], void *vertex_data[4], GLfloat weight[4], void **outData, void *polygon_data );
GLU_TESS_ERROR
error callback은 error를 만났을 때 호출한다. 한 argument는 GLeum type이다. 그것은 다음과 같은 경우중 하나인 특별한 Error를 말한다. GLU_TESS_MISSING_BEGIN_POLYGON, GLU_TESS_MISSING_END_POLYGON, GLU_TESS_MISSING_BEGIN_CONTOUR, GLU_TESS_MISSING_END_CONTOUR, GLU_TESS_COORD_TOO_LARGE, GLU_TESS_NEED_COMBINE_CALLBACK. 문자 string들은 gluErrorString에서 만들어진 이러한 error들을 가리킨다. 이 함수의 원형은 다음과 같다. void error(GLenum errno );
GLU_TESS_ERROR_DATA
이것은 하나의 추가적인 pointer 인자를 가진다는 것을 제외하고는 GLU_TESS_ERROR과 동일하다. 이 포인터는 gluTessBeginPolygon을 호출했을 때 제공되어진 불투명한 포인터와 동일하다. 이 callback을 위한 함수 원형은 다음과 같다. void errorData(GLenum errno, void *polygon_data);
Example
다각형의 모자이크는 다음과 같이 한다.

gluTessCallback(tobj, GLU_TESS_BEGIN, glBegin);
gluTessCallback(tobj, GLU_TESS_VERTEX, glVertex3dv);
gluTessCallback(tobj, GLU_TESS_END, glEnd);
gluTessCallback(tobj, GLU_TESS_COMBINE, myCombine);
gluTessBeginPolygon(tobj, NULL);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v, v);
...
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);

전형적으로, 모자이크된 다각형은 display list에 저장되어져야하는데 이것은 표현할때마다 다시 모자이크 할 필요가 없기 때문이다.

See Also

glBegin, glEdgeFlag, glVertex, gluNewTess, gluErrorString, gluTessVertex, gluTessBeginPolygon, gluTessBeginContour, gluTessProperty, gluTessNormal


gluTessCallback10

 gluTessCallback.3gl (GLU versions 1.0 and 1.1)

Name

gluTessCallback - 모자이크 모양의 물체를 위한 callback를 정의한다.

C Specification

void gluTessCallback(GLUtriangulatorObj *tobj, GLenum which, void (*fn)())

Parameters

tobj 모자이크형(격자형) 물체의 조건을 지정한다.(gluNewTess에 의해 생성된)
which 정의되어진 callback을 기입한다. 다음과 같은 값들은 유효하다.
GLU_BEGIN, GLU_EDGE_FLAG, GLU_VERTEX, GLU_END, and GLU_ERROR.
fn 호출되어지는함수를기입한다.

Description

gluTessCallback
모자이크형 물체에 사용되어지는 callback을 나타내는데 사용된다. 지정된 callback이 이미 정의되었다면 교체되어진다. fn이 널값이라면 존재하는 callback은 막연하게 된다. 각 callback는 두가지 종류가 있다. 하나는 사용자에 의해 기술된 다각형 데이타이고, 다른 하나는 사용자에 의해 기술된게 아니다. 두종류의 특별한 callback들이 기술된다면, 사용자에 의해 기술된 다각형 자료가 사용되어질 것이다. "polygon_data" 는 gluTessBeginPolygon이 호출되어졌을 때 기술되어지는 포인터의 복사본이다. 규칙에 맞는 callback들은 다음과 같다.
GLU_BEGIN
begin callback은 초기 시작을 나타내주는 glBegin 과 같이 발생된다. 이 함수는 GLenum타입의 하나의 인수를 취하고 GL_TRIANGLE_FAN 또는 GL_TRIANGLE_STRIP 또는 GL_TRIANGLE 중 하나이다.
GLU_EDGE_FLAG
edge flag callback은 gledgeFlag와 유사하다. 이 함수는 사용자에 의해 정의된 오리지널 다각형의 일부분인 생성된 triangle들 중 edge를 가리키는 하나의 부울린 플래그를 취하며, tessellation(모자이크) 처리에 의해 생성된다. 만약 플래그가 GL_TRUE이면 각 vertex는 오리지널 다각형의 일부분인 edge 에서 시작된다. 만약 플래그가 GL_FALSE이면, 각 vertex는 모자이크 모양에 의해 생성된 edge에서 시작된다. edge flag callback은 첫 vertex callback이 만들어지기전에 발생된다. triangle fan 과 triangle strip 이 edge flag를 지원해 주지 않기 때문에, edge flag callback이 준비되지 않는다면 begin callback는 GL_TRIANGLE_FAN 또는 GL_TRIANGLE_STRIP로써 호출되지 않는다. 대신에 fan 과 strip들은 독립 triangle로 개조되어질수 있다.
GLU_VERTEX
vertex callback은 begin callback과 end callback 사이에서 발생된다. 그것은 glVertex와 유사하고, 모자이크 처리에 의해 생성된 triangle의 vertex들을 정의한다. 그 함수는 오직 하나의 인수로써 포인터를 취한다. 이 포인터는 사용자에 의해 vertex가 기술될 때 제공된 불불명한 포인터와 동일하다.
GLU_END
end callback는 glEnd와 같은 목적을 제공하며 어떤 인수도 취하지 않는다.
GLU_ERROR
error callback는 에러를 만났을때 호출된다. 그 하나의 인수는 GLenum형이고, 그것은발생된 분명한 에러를 나타낸다. GLU_TESS_ERROR8을 통한 GLU_TESS_ERROR1 이라 이름 붙여진 격자형 다각형은 유일하게 8개의 에러가 있다. 문자열의 기술과 같은 이러한 에러는 gluErrorString call로 되찾을수 있다.

Example

격자형 다각형은 이런 것처럼 직접적으로 반환되어진다.

gluTessCallback(tobj, GLU_BEGIN, glBegin);
gluTessCallback(tobj, GLU_VERTEX, glVertex3dv);
gluTessCallback(tobj, GLU_END, glEnd);
gluBeginPolygon(tobj);
gluTessVertex(tobj, v, v);
...
gluEndPolygon(tobj);

전형적으로, 격자형 다각형은 그것이 반환되어질때마다 모자이크처리될 필요가 없기 때문에 저장되어 질 것이다.

See Also

glBegin, glEdgeFlag, glVertex, gluDeleteTess, gluErrorString, gluNewTess, gluTessVertex


gluTessEndPolygon

 gluTessEndPolygon.3gl (GLU version 1.2 and later)

Name

gluTessEndPolygon - 다각형 기술의 범위를 정한다.

C Specification
void gluTessEndPolygon(GLUtesselator **tess*)

Parameters

tess gluNewTess로써 생성된 모자이크형 물체를 기입한다.

Description
gluTessBeginPolygon 과 gluTessEndPolygon 은 볼록한 다각형의 정의의 범위를 정한다. 각각의 gluTessBeginPolygon과 gluTessEndPolygon쌍 안에서, 한개 또는 그 이상의 gluTessBeginContour / gluTessEndContour이 호출되어져야만 한다. vertex들은 닫힌 윤곽선(외형선)에 기입된다. (각 외형선의 마지막 정점은 자동적으로 처음 정점과 연결되어 있다.) 자세한 것은 gluTessBeginContour 과 gluTessEndContour을 참조하라. 일단 gluTessEndPolygon 이 호출되면, 다각형은 모자이크형으로 되고, 그 결과 triangle는 callback를 통해 기술되어 진다. callback 함수의 기입을 위해 gluTessCallback를 볼것.

Example
삼각 구멍을 가진 4변형은 다음과 같이 기술되어 질 수 있다.

gluTessBeginPolygon(tobj, NULL);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluTessEndContour(tobj);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);

See Also
gluNewTess, gluTessBeginContour, gluTessVertex, gluTessCallback, gluTessProperty, gluTessNormal, gluTessBeginPolygon


gluTessNormal

 gluTessNormal.3gl (GLU version 1.2 and later)

Name

gluTessNormal 다각형을위한표준을기입한다.

C Specification

void gluTessNormal(GLUtesselator *tess, GLdouble x, GLdouble y, GLdouble z)
Parameters
tess gluNewTess로써 생성된 격자형 물체를 기입한다.
x 상태의 처음 성분을 기입한다.
y 상태의 두번째 성분을 기입한다.
z 상태의 세번째 성분을 기입한다.

Description

gluTessNormal 사용자가정의한다각형을위한정규형을기술한다. 모든 입력 자료는 격자형과 모든 출력 triangle 들이 CCW로 방향되어지기 전에, 세 좌표 중 하나인 수직평면상에 계획되어 질 것이다. (CW 방위는 정규공급된 표시에 의해 습득되어 질 수 있다.) 예를들어, 알다시피 모든 x,y 평면위에 놓여 있는 다각형은 어떤 다각형들이 반환되기 전에 gluTessNormal(tess, 0.0, 0.0, 1.0) 를 호출한다. 공급된 정규상태가 (0,0,0) 이면 그 표준은 다음과 같이 결정된다.
표준의 방향은 정점들이 어떻게 연결되었는지에 상관없이, 정점들로의 적당한 수평면에 의해 발견되어진다. 입력자료는 대체로 수평면에 놓여진다. 표준형의 부호는 부호있는 것들의 합으로 선택되어지기때문에 양수이다. 공급된 표준형은 또다른 gluTessNormal를 호출해 변하게될때까지 지속된다.

See Also

gluTessBeginPolygon, gluTessEndPolygon


gluTessProperty

 gluTessProperty.3gl (GLU version 1.2 and later)

Name

gluTessProperty - 격자형 객체의 프라퍼티를 세팅한다.

C Specification

void gluTessProperty(GLUtesselator *tess, GLenum which, GLdouble value)

Parameters

tess gluNewTess로써 생성된 격자형 물체를 기입한다.
which 세팅된 프라퍼티를 기입한다. 유효한 값은 GLU_TESS_WINDING_RULE, GLU_TESS_BOUNDARY_ONLY, GLU_TESS_TOLERANCE이다.
value 지시된 프라퍼티의 값을 기입한다.

Description

gluTessProperty
격자형 물체안에 저장된 프라퍼티를 조절하는데 사용된다. 이러한 프라퍼티들은 다각형이 해석되고 반환되어 지는 방법에 영향을 준다. which 에 들어가는 올바른 값은 다음과 같다.
GLU_TESS_WINDOW_RULE 다각형의 일부분이 안쪽에 있다는 것을 결정한다. 값은 다음과 같이 세팅되어질수 있다.

GLU_TESS_WINDING_ODD, GLU_TESS_WINDING_NONZERO, GLU_TESS_WINDING_POSITIVE,
GLU_TESS_WINDING_NEGATIVE, GLU_TESS_WINDING_ABS_GEQ_TWO

winding rule 어떻게 동작하는 가를 이해하기 위해 입력 외형선의 분할된 평면을 을 부분으로 간주한다. winding rule는 이러한 부분(region)들이 다각형의 내부에 있는것을 결정한다. 단일 외형 C를 위해 우리는 C 주위로 여행을 함으로써 x점의 winding number은 회전된 수로써 단순히 부호화 된다. 이러한 각각의 외형면이 존재할때, 개별적인 winding number들은 합해진다. 이러한 절차는 평면내의 점 x와 함께 부호있는 정수값을 갖는다. winding number 단일 지역(region) 내의 모든 점들을 위해 같다. winding rule 주어진 범주내에 속한다면, winding rule 는 "inside" 지역으로써 분류된다. 이전 GLU 모자이크화는 "odd" rule로 사용됐다. "nonzero" rule는 내부로 정이된 또다른 보통의 방식이다. 이 다른 세 규칙들은 다각형 CSG 오퍼레이션에 유용하다.

GLU_TESS_BOUNDARY_ONLY
부울린 값을 취한다. GL_TRUE가 셋팅되어질때, 닫힌 윤곽선의 집합은 다각형 내부와 외부를 결정한다. 외형선은 CCW에 의해 방향되어지고, 내부선A은 CW에 의해 방향되어진다. GLU_TESS_BEGIN 와 GLU_TESS_BEGIN_DATA callback 들은 각 윤각선을 위해 GL_LINE_LOOP 형으로써 사용된다.

GLU_TESS_TOLERANCE
출력의 크기를 축소시키기의해 합병(merge)의 오차를 줄인다. 단일 정점에 의해 대체된 다른 가가각의 베의 인접한 두개의 정점이 그 예이다.공차는 굉장히 커다란 좌표에 의해 곱해진다. 이러한것은 단일 병함연산의 결과로써 특징의 커다란 차이를 기입한다. 단일 특징이 각각의 병합 연산내의 부분을 취한다면, 전체적인 거리는 더 커 질것이다. feature 병합은 완전하게 선택적이다. 허용오차는 오직 암시적이다. 실행은 어떤 경우에 있어서 병합하기에 자유롭고, 다른경우엔 그렇지 않다. 그 결과 허용오차는 0이다. 현재의 암시적 정점의 병합은 오직 현재 오차와 상관없이 일치한다. 정점은 그 정점이 놓여진 모서리쪽의 구별이 불가능할때 겹쳐지게 된다. 두 에지들은 두 종점이 동일할때에만 오직 병합되어진다.

See Also
gluGetTessProperty


gluTessVertex

 gluTessVertex.3gl (GLU version 1.2 and later)

Name

gluTessVertex - 다각형 위의 정점을 추가한다.

C Specification

void gluTessVertex(GLUtesselator *tess, GLdouble coords[3], void *data)

Parameters

tess gluNewTess로써 생성된 모자이크형 객체
coords 정점의 위치
data GL_VERTEX 콜백 함수에 전달된 데이타 포인트

Description

gluTessVertex는 사용자가 정의하고 있는 다각형 위의 정점을 추가한다. 성공적인 gluTEssVErtex 호출은 닫힌 외형선을 추가한다. 예를 들어, 사용자가 4변형 추가를 원한다면, gluTessVertex는 4번 호출되어질 것이다. gluTessVertex는 gluTessBeginContour와 gluTessEndContour 사이에서 호출되어진다. data에는 색깔, 각 정점의 속성등과 같은 정점위치를 포함한 구조가 지정된다. 이러한 포인터는 tessellation후의 GLU_TESS_VERTEX 혹은 GLU_TESS_VERTEX_DATA 호출을 통해 사용자에게 보내진다.

Example

3각형의 구멍을 가지고 있는 4변형은 다음과 같이 만들어진다.

gluTessBeginPolygon(tobj, NULL);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluTessEndContour(tobj);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);

See Also

gluTessBeginPolygon, gluNewTess, gluTessBeginContour, gluTessCallback, gluTessProperty, gluTessNormal, gluTessEndPolygon


gluUnProject

 gluUnProject.3gl

Name

gluUnProject - 좌표를 객체화 하기위한 맵 윈도우 좌표

C Specification

int gluUnProject ( GLdouble winx,
GLdouble winy,
GLdouble winz,
const GLdouble modelMatrix[16],
const GLdouble projMatrix[16],
const GLint viewport[4],
GLdouble *objx,
GLdouble *objy,
GLdouble *objz )

Parameters

winx, winy, winz 지도화된 윈도우 좌표를 기입
modelMatrix glGetDoublev로 부터 modelview matrix를 기입
projMatrix glGetDoublev로 부터 projection matrix를 기입
viewport glGetIntegerv call 으로 부터 viewport를 기입
objx, objy, objz 계산된 객체의 좌표를 반환한다.
Description
gluUnProject map들은 modelMatrix,projMatrix,그리고 viewport에 사용되는 객체의
좌표로써 윈도의 좌표에 기입된다.

See Also

glGet, gluProject


glVertex

 glVertex.3gl

Name

glVertex2d, glVertex2f, glVertex2i, glVertex2s, glVertex3d, glVertex3f,
glVertex3i, glVertex3s, glVertex4d, glVertex4f, glVertex4i, glVertex4s,
glVertex2dv, glVertex2fv, glVertex2iv, glVertex2sv, glVertex3dv,glVertex3fv,
glVertex3iv, glVertex3sv, glVertex4dv, glVertex4fv, glVertex4iv, glVertex4sv
- 정점을 기입한다.

C Specification

void glVertex2d( GLdouble x, GLdouble y )
void glVertex2f( GLfloat x, GLfloat y )
void glVertex2i( GLint x, GLint y )
void glVertex2s( GLshort x, GLshort y )
void glVertex3d( GLdouble x, GLdouble y, GLdouble z )
void glVertex3f( GLfloat x, GLfloat y, GLfloat z )
void glVertex3i( GLint x, GLint y, GLint z )
void glVertex3s( GLshort x, GLshort y, GLshort z )
void glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
void glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
void glVertex4i( GLint x, GLint y, GLint z, GLint w )
void glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w )

Parameters

x, y, z, w 정점의 x,y,z 그리고 w 좌표를 기입한다. 모든 파라메터들이 모든 명령형식에 존재하지는 않는다.

C Specification

void glVertex2dv( const GLdouble *v )
void glVertex2fv( const GLfloat *v )
void glVertex2iv( const GLint *v )
void glVertex2sv( const GLshort *v )
void glVertex3dv( const GLdouble *v )
void glVertex3fv( const GLfloat *v )
void glVertex3iv( const GLint *v )
void glVertex3sv( const GLshort *v )
void glVertex4dv( const GLdouble *v )
void glVertex4fv( const GLfloat *v )
void glVertex4iv( const GLint *v )
void glVertex4sv( const GLshort *v )

Parameters

v 2,3,4차원 배열의 포인터를 기입한다. 2차원 배열의 요소 요소는 x,y 이고, 3차원 배열은 x,y,z 이며, 4차원 배열은 x,y,z,w 이다

Description

glVertex 명령은 glBegin / glEnd 쌍에 라인을 기입하고 다각형 정점들을
기입하는 것에 사용된다.현재의 색깔,NORMAL, 그리고 좌표들은 glVertex가
호출되었을때 연관되어진다. 오직 x,y 좌표만 기입되었을땐, z 좌표는 0.0
w 좌표는 1.0 으로 디폴트 되어지고 x,y,z 좌표가 기입되었을땐 w 는 1.0으로
디폴트 되어진다

Notes

glBegin / glEnd 의 밖에서 glVertex 가 발생했다면 정의되지 않은 상태가 발생된다.

See Also

glBegin, glCallList, glColor, glEdgeFlag, glEvalCoord, glIndex,
glMaterial, glNormal, glRect, glTexCoord


glVertexPointerEXT

 glVertexPointerEXT.3gl

Name

glVertexPointerEXT 정점자료의 배열을 정의

C Specification

void glVertexPointerEXT( GLint size,
GLenum type,
GLsizei stride,
GLsizei count,
const GLvoid *pointer )

Parameters

size 2,3,또는 4이어야만 하는 각 정점들의 좌표의 수를 기입한다.
type 배열내의 각 좌표의 자료형을 기입한다. 문자형 상수 GL_SHORT, GL_INT, GL_FLOAT, 또는 GL_DOUBLE_EXT 들은 허용된다.
stride 연속적인 정점들 사이의 byte offset를 기입한다. stride 가 0 이면 정점들이 배열내에서 강하게 밀집되 있다고 이해 되어진다.
count 정적이고, 첫번째를 포함한 정점들의 수를 기입한다.
pointer 배열내의 첫번째 정점의 첫 좌표의 포인터를 기입한다.

Description

glVertexPointerEXT 는 렌더링이 정점배열확장에서 사용중일때 사용자에게 정점좌표의 배열의 자료형식과 위치를 기입한다. size 는 좌표의 자료형인 type 와 매 정점당 좌표의 수를 기입한다. stride는 분리된 배열내에 저장된 단일 배열내에 밀집되어 있는 속성과 다음에 허락되는 정점들중 하나로 부터 byte stride를 준다. count는 정적인 배열요소의 수를 지시한다. 정적요소들은 어플리케이션에 의해 구조화 되며, 그것은 단 한번 구조화된다. 어플리케이션은 렌더링을 위해 그것이 사용되어 지기 전에 배열을 명쾌히 기입해야 한다. 정점배열이 기입되었을때, size,type,stride,count,pointer 들은 client-side 상태 와 실행에 의해 저장되어진 정적배열요소들이 저장되어진다.
정점 배열은 GL_VERTEX_ARRAY_EXT 인자를 가진 glEnable 와 glDisable를 사용 함으로써 enalbe , disable 되어진다. 만약 인에이블 되어지면,정점배열은 glDrawArraysEXT 또는 glArrayElementEXT 가 호출되었을때 사용되어진다. 미리 기입된 정점과 정점 속성 배열들로부터 primitive의 연속적인 정의를 위해 glDrawArraysEXT를 사용하라. 정점속성과, indexing vertex 에 의해 primitive를 기입하기 위해서 glArrayElementEXT를 사용하라.

Notes

비정적 배열요소들은 glArrayElementEXT 혹은 glDrawArraysEXT가 실행되어질때까지 접근되어질 수 없다. 디폴트로, 정점 배열(vertex array)은 불능이되고 그것은 glArrayElementEXT 혹은 glDrawArraysEXT 가 호출되어질 때 까지 접근되어질 수 없다. glBegin 와 glEnd 실행 사이에서 glVertexPointerEXT가 호출될때 에러가 발생되지 않더라도 결과는 정의되어지지 않는다. glVertexPointerEXT 는 전형적으로 어떤 프로토콜도 필요없이 client side 내에서 실행되어질 것이다 정점배열 파라메터들이 client side 상태에 있기때문에, 그들은 glPushAttrib 와 glPopAttrib 에 의해 저정되어지지 않는다.
glVertexPointerEXT 명령은 display list 내에 입장할 수 없다. glVertexPointerEXT 는 EXT_vertex_array 확장의 부분이고, GL 명령 집합의 부분은 아니다. GL_EXTENSIONS 인수를 가지고 호출되었을때, GL_EXT_vertex_array"가 glGetString에 의해 반환된 문자열을 포함한다면, EXT_vertex_array 확장은 지원되어 진다.

Errors

GL_INVALID_VALUE size 가 2,3,4 가 아닐때 발생한다.
GL_INVALID_ENUM type이 적당한 갑이 아닐때 발생한다.
GL_INVALID_VALUE stride 또는 count가 음수일때 발생한다

Associated Gets

glIsEnabled with argument GL_VERTEX_ARRAY_EXT
glGet with argument GL_VERTEX_ARRAY_SIZE_EXT
glGet with argument GL_VERTEX_ARRAY_TYPE_EXT
glGet with argument GL_VERTEX_ARRAY_STRIDE_EXT
glGet with argument GL_VERTEX_ARRAY_COUNT_EXT
glGetPointervEXT with argument GL_VERTEX_ARRAY_POINTER_EXT

See Also

glArrayElementEXT, glColorPointerEXT, glDrawArraysEXT, glEdgeFlagPointerEXT,
glGetPointervEXT, glIndexPointerEXT, glNormalPointerEXT, glTexCoordPointerEXT,glEnable


glViewport

 glViewport.3gl

Name

glViewport viewport를 세팅한다.

C Specification

void glViewport( GLint x,
GLint y,
GLsizei width,
GLsizei height )

Parameters

x,y 디폴트는 (0,0)이고, 화소내에서 viewport rectangle 의 좌측하단 구석에 기입
width, height viewport 의 넓이 높이를 각각 기입한다. GL context가 윈도우에
소속되어질때, 넓이와 높이는 윈도우의 차원으로 셋팅되어진다.

Description

glViewport 정규화된 device로 부터 윈도우 좌표에까지 x와 y의 변환을 기입한다.
viewport 넓이와 높이들은 실행에 따라서 범위가 조여진다. 이러한 범위는
GL_MAX_VIEWPORT_DIMS 인수를 가진 glGet의 호출에 의해 질의 되어진다.

Errors

GL_INVALID_VALUE 넓이와 높이중 하나가 음수일때 발생한다.
GL_INVALID_OPERATION glBegin 과 glEnd 의 실행사이에서 glViewport 가
실행되어지면 발생된다.

Associated Gets

glGet with argument GL_VIEWPORT
glGet with argument GL_MAX_VIEWPORT_DIMS

See Also

glDepthRange


glXCopyContext

 glXCopyContext.3gl

Name

glXCopyContext 반환된 context로 부터 상태를 복사한다.

C Specification

void glXCopyContext( Display *dpy,
GLXContext src,
GLXContext dst,
GLuint mask )

Parameters

dpy X server 로의 connection 를 기입한다.
src 원 context를 기입한다.
dst 목적 context를 기입한다.
mask dst에 의해 복사된 src 상태의 부분을 기입한다.

Description

glXCopyContext는 src로부터 dst까지 변수들 상태의 선택된 그룹들을 복사한다.
mask는 복사된 상태변수의 집합들을 지시한다. mask는 OpenGL 명령 glPushAttrib 에 의해 반환된 같은 문자형 이름의 bitwise OR을 포함한다. 그 단일 문자상수
GL_ALL_ATTRIB_BITS는 반환상태의 최대 가능부분을 복사하는데 사용되어질 수 있다. 그 복사는 오로지 주소 공간에 할당된 src 와 dst에 의해 반환이 명명되어질때만 이뤄질 수 있다. 2개의 반환 context 들은 같은 서버에서 사용되는 비직접적이고 또한 단일 프로세서에 의해 소유되는 것 에의해 직접적인 주소공간을 공유한다. 비직접적인 경우에는 주소공간을 공유하기 위한 호출이 필요없음을 주목하라, 오직 그들의 주소 공간을 공유하기위한 반환 context들에 관련된것이 필요하다. OpenGl 상태에서 모든 값들이 다 복사되어 질 수 있는것은 아니다. 예를들어 pixel pack 와 unpack state, render mode state, select, feedback state 들은 복사되지 않는다. 그 상태들은 OpenGl 명령인 glPushAttrib에 의해 조정되는 상태와 거의 같은식으로 복사되어 질 수 있다. src 가 current context 라면 glFlush 는 glXCopyContext에 의해 실행된다. src가 current context 가 아니라면 src context 의 상태는 비정의된다.

Notes

같은 서버에 사용되는 비직접적인 것과, 단일 프로세스에 의해 소유된 직접적인것 모두 반환 context 가 주소공간을 공유한다. 프로세스는 하나 혹은 그 이상 thread로 구성된 단일 주소공간내의 실행된, 단일 실행환경이다.
thread는 부프로세스의 집합의 하나이고 단일 주소공간을 공유하지만, 분리된 프로그램 카운터와, 스택 스페이스, 그리고 다른 관련된 전체적인 데이타를 유지한다. thread는 부프로세스 그룹의 멤버이고 프로세서와 비슷하다.

Errors

BadMatch 는 반환 context src 와 dst 가 같은 화면에 관련된걸로 생성되지 않고, 주소 공간을 공유하지 않는다면 발생한다. BadAccess 는 glXCOPYContextdst가 호출되었을 때마다 dst가 어떤 thread에 current 이면 발생한다. GLXBadCurrentWindow 는 src가 current context 이고 current drawable 이 윈도우 이면 발생된다.
GLXBadContext는 src 혹은 dst 가 유효한 GLX context가 아니라면 발생한다.
BadValue 는 비정의된 mask bit이 기입될때 발생된다.

See Also

glPushAttrib, glXCreateContext, glXIsDirect


glXCreateGLXPixmap

 glXCreateGLXPixmap.3gl

Name

glXCreateGLXPixmap 화면밖의 GLX rendering area 를 생성한다.

C Specification

GLXPixmap glXCreateGLXPixmap( Display *dpy,
XVisualInfo *vis,
Pixmap pixmap )

Parameters

dpy X 서버로의 연결을 기술한다.
vis rendering area 의 구조를 정의한 visual을 기술. 그것은 XVisualInfo 구조를 가르키는
포인터이지, visual ID 또는 Visual에 대한 포인터가 아니다.
pixmap 화면밖의 rendering area 의 전,좌측 color buffer로써 사용될 X pixmap를
기입한다.

Description

glXCreateGLXPixmap 화면밖의(off-screen) rendering area 를 생성하고 그것의 XID를 리턴한다. pixmap에 의해 인식되는 X pixmap는 화면밖 rendering area 의 결과인 front left buffer로써 사용된다. color 버퍼를 포함한 vis 란에 기입되는 모든 다른 버퍼들은 외부적으로 명백한 이름없이 생생되어진다. double-buffering 으로된 GLX pixmaps 는 공급되어진다. 그러나 glXSwapBuffers 는 이러한 pixmaps에 의해 무시되어진다. direct rendering contexts 는 GLX pixmaps 안으로 반환되어지는데 사용되어질 수 없다.

Notes

XVisualInfo 는 Xutil.h 안에 정의되어진다. 그것은 visual,visualID, screen 그리고 depth elements 를 포함하는 구조이다.

Errors

BadMatch 는 pixmap의 깊이가 vis 의 GLX_BUFFER_SIZE 값과 매칭되어지지 않거나, pixmap가 vis와 같은화면에 연관되어 생성되어 지지 않을때 생성되어진다. BadValue 는 vis가 XVisualInfo 포인터값이 아닐때 생성되어진다.

See Also

glXCreateContext, glXIsDirect, glXMakeCurrent


glXDestroyContext

 glXDestroyContext.3gl

Name

glXDestroyContext GLX context를 소멸시킨다.

C Specification

void glXDestroyContext( Display *dpy,
GLXContext ctx )

Parameters

dpy X 서버로의 연결을 기입한다.
ctx 소멸되어진 GLX context를 기입한다.

Description

GLX rendering context ctx 가 어떤 thread에 대해 큐런트가 아닐때,
glXestroyContext는 그것을 즉시 소멸시킨다. 만일 그렇지 않다면, ctx에 관련된 리소스 ID는 즉시 해제(free) 되어진다.

Errors

GLXBadContext ctx가 GLX context 값이 아닐때 생성되어진다.

See Also

glXCreateContext, glXMakeCurrent


glXDestroyGLXPixmap

 glXDestroyGLXPixmap.3gl

Name

glXDestroyGLXPixmap GLX pixmap를 소멸시킨다.

C Specification

void glXDestroyGLXPixmap( Display *dpy,
GLXPixmap pix )

Parameters

dpy X서버로의 연결을 기입한다.
pix 소멸된 GLX pixmap를 기입한다.

Description

GLX pixmap pix 가 어떤 client 에 대해 큐런트가 아니라면, glXDestroyGLXPixmap는 그것을 즉시 소멸시킨다. 그렇지 않다면, pix는 그것이 어떤 client에 대해 큐런트가 되어지지 않을때 소멸되어진다. 이러한 경우, 리소스 ID 는 즉시 FREE 되어진다.

Errors

GLXBadPixmap GLXBadPixmap 는 pix가 GLX pixmap의 값이 아닐때 생성되어진다.

See Also

glXCreateGLXPixmap, glXMakeCurrent


glXGetCurrentContext

 glXGetCurrentContext.3gl

Name

glXGetCurrentContext current context를 리턴한다.

C Specification

GLXContext glXGetCurrentContext( void )

Description

glXGetCurrentContext는 glXMakeCurrent 에 의해 기술된 current context를 리턴한다. 어떤 current context도 존재하지 않는다면, 널값이 리턴된다. glXGetCurrentContext는 flient-side 정보를 리턴한다. 그것은 서버에게 오류를 범하지 않는다.

See Also

glXCreateContext, glXMakeCurrent


glXGetCurrentDrawable

 glXGetCurrentDrawable.3gl

Name

glXGetCurrentDrawable current drawalbe를 리턴한다.

C Specification

GLXDrawable glXGetCurrentDrawable( void )

Description

glXGetCurrentDrawable는 glXMakeCurrent 에 의해 기입된 current drawable를 반환한다 만약 어떤 current drawable도 존재하지 않는다면, 아무것도 리턴되어 지지 않는다. glXGetCurrentDrawable 는 client-side 정보를 리턴한다. 그것은 서버에 과실을 범하지 않는다.

See Also

glXCreateGLXPixmap, glXMakeCurrent


glXIsDirect

 glXIsDirect.3gl

Name

glXIsDirect 직접 반환이 가능한지를 지시한다.

C Specification

Bool glXIsDirect( Display *dpy,
GLXContext ctx )

Parameters

dpy X 서버로의 연결을 기입한다.
ctx 질의 되어지는 GLX context를 기입한다.

Description

glXIsDirect는 ctx가 직접 반환(direct rendering) context일때는 참을, 그렇지 않으면 거짓을 리턴한다. 직접 반환 context는 호출한 프로세스의 주소공간에서부터 rendering 시스템까지 X 서버에 의해 반환 명령을 직접적으로 보낸다. 간접 반환 context는 모든 반환 명령을 X서버로 보낸다.

Errors

GLXBadContext ctx가 GLX context값이 아닐때 생성되어 진다.

See Also

glXCreateContext


glXMakeCurrent

 glXMakeCurrent.3gl

Name

glXMakeCurrent 윈도우 또는 GLX pixmap에 GLX context를 붙인다.

C Specification

Bool glXMakeCurrent( Display *dpy,
GLXDrawable drawable,
GLXContext ctx )

Parameters

dpy X서버로의 연결을 기입한다.
drawable GLX drawalbe를 기입한다. X window ID 또는 GLX pixmap ID 둘 중의
하나이어야만한다.
ctx drawable에 붙여질수 있는 GLX rendering context를 기입한다.

Description

glXMakeCurrent 는 두가지이다. 그것은 호출한 쓰레드의 현재 GLX rendering context인 ctx를 만든다. 만약 하나가 존재하면, ctx를 GLX drawable에 붙이고, 둘이 존재하면, GLX pixmap에 붙인다. 이러한 두 행동의 결과로써, OpenGL rnedering call은 GLX drawalbe 를 수정하기 위해 rendering context를 사용한다.
glXMakeCurrent 는 ctx를 가진 current rendering context를 대체한다. 첫번째 시기에 ctx는 현재 어떠한 쓰레드에 의해 만들어지고, 그것의 viewport는 full size의 drawable로 세팅되어진다. ctx로써, glXMakeCurrent에 어떤 쓰레드에 의한 점차적 호출은 그것의 viewport에 아무런 영향을 미치지 않는다.
current context를 해제하기 위해서는, drawable 과 ctx를 가진 glXMakeCurrent를 호출한다. glXMakeCurrent 는 성공적이면 참을, 아니면 거짓을 리턴한다. 거짓이 리턴되었다면, 이전의 current rendering context 와 drawable는 변하지 않는다

Notes

프로세스는 단일 주소 공간내에 실행되는, 하나 또는 그 이상의 쓰레드로 구성된 단일 실행 환경이다.

Errors

BadMatch 는 drawable가 같은X 화면과 ctx visual 로써 생성되지 않을때 생성되어진다. 또한 drawable는 none 이고 ctx가 none이 아닐때 생성되어 진다.
GLXBadContext는 ctx가 GLX context 값이 아닐때 생성되어진다. GLXBadContextState는 glXMakeCurrent가 glBEgin 과 glEnd 사이에서 호출되어졌을때 생성되어 진다. GLXBadCurrentWindow는 이전 context와 현 drawable 가 더 이상 유효하지 않은 미 결정의 OpenGl 명령으로써 존재할때 생성되어진다. BadAlloc 는 서버가 부수적 버퍼 할당에 시간이 걸릴때 생성되어 진다.

See Also

glXCreateContext, glXCreateGLXPixmap


glXQueryExtension

 glXQueryExtension.3gl

Name

glXQueryExtension GLX 확장이 지원되어지는지를 지시한다.

C Specification

Bool glXQueryExtension( Display *dpy,
int *errorBase,
int *eventBase )

Parameters

dpy X 서버로의 연결을 기입한다.
errorBase 서버 확장의 기초에러 코드를 리턴한다.
eventBase GLX 서버 확장의 기초 이벤트 코드를 리턴한다.

Description

glXQueryExtension 은 X 서버의 연결 dpy가 GLX 확장을 지원할때 참을, 그렇지 않으면 거짓을 리턴한다. 참이 리턴되었다면, errorBase 와 eventBase는 error base, event base를 리턴하며, 그렇지 않으면 error base, event base는 변화되지 않는다. error Base, event Base는 그들이 널값으로써 기입되었다면, 값을 리턴하지 않는다.

Notes

eventBase는 더 이상의 확장을 포함한다. GLX는 일반적으로 어떤 이벤트도 정의하지 않는다.

See Also

glXQueryVersion


glXQueryVersion

 glXQueryVersion.3gl

Name

glXQueryVersion GLX 확장의 버전 갯수를 리턴한다.

C Specification

Bool glXQueryVersion( Display *dpy,
int *major,
int *minor )

Parameters

dpy X 서버로의 연결을 기입한다.
major GLX 서버 확장의 주요 버전수를 리터한다.
minor GLX 서버 확장의 중요치않은 버전수를 리턴한다.

Description

glXQueryVersion 은 dpy에 연결되 있는, 중요한것과, 그렇지 않은 GLX 확장의 버전수를 리턴한다. client library 와 서버 실행은 반드시 같은 중요 버전수를 갖아야 하며, 그렇지 않으면 거짓이 리터될 것이다, 두번째의(minor) 버젼 은 두개의 마이너 버전수중 최소갑으로 리턴되어 진다. major 과 minor은 그들이 널로써 기입되었다면, 값을 리턴하지 않는다.

Errors

glXQueryVersion 실패할 경우 False를 리턴

See Also

glXQueryExtension


glXSwapBuffers

 glXSwapBuffers.3gl

Name

glXSwapBuffers back buffer visible를 만든다.

C Specification

void glXSwapBuffers( Display *dpy,
GLXDrawable drawable )

Parameters

dpy X 서버로의 연결을 기입한다.
drawable 스왑되어진 버퍼 윈도우를 기입한다.

Description

glXSwapBuffers 는 drawable의 front buffer 의 내용이 되기 위하여 drawable의 back buffer의 내용을 진척시킨다. back buffer의 내용은 그후 불확정된다. 갱신은 전형적으로 직접적인 glXSwapBuffers 가 호출된후 보다는 오히려 모니터의 수직 덧그림 동안에 일어난다. 모든 GLX rendering contexts 는 back buffer 과 front buffer의 같은 개념을 공유한다. 함축적 glFlush 는 그것이 리턴되기 전에 glXSwapBuffers 에 의해 행해진다.
점차적 OpenGL 명령은 glXSwapBuffers가 호출되어진 후에 직접 유출되어지나, 버퍼 변환이 완성되어질때 까지 실행되지 않는다. drawable 가 double-buffered visual 로써 생성되어지지 않는다면, glXSwapBuffers 는 효력이 없고, 어떤 에러도 발생되지 않는다.

Notes

같은 double-buffered window에 대한 복합 GLX contexts rendering 의 동시성은
client에 책임이 있다. X 동시성 확장은 그런 협동을 용이하게 하는데 사용되어질 수 있다.

Errors

GLXBadDrawable : drawable 은 GLX drawable 값을 가지지 않을때 발생되어진다.
GLXBadCurrentWindow : dpy와 drawable은 각각 호출한 쓰레드의 current context와 관련된 display 와 drawable 이고, drawable은 윈도우를 확인하며, 더이상 유효하지 않다.

See Also

glFlush


glXUseXFont

 glXUseXFont.3gl

Name

glXUseXFont X 폰트로부터 bitmap display 목록(list)을 생성한다

C Specification

void glXUseXFont( Font font,
int first,
int count,
int listBase )

Parameters

font 취해진 그림문자로부터의 폰트를 기입한다.
first 취해지는 첫번째 그림의 인덱스를 기입한다.
count 취해지는 그림의 수를 기입한다.
listBase 생성되어진 첫번째 display list의 인덱스를 기입한다.

Description

glXUseXFont 는 단일 glBitmap를 포함한 listBase+count-1을 통한 listBase라 명명된 count display list를 생성한다. display list listBase+i 명령인 glBitmap 의 파라메터는 그림 first+i 로부터 유도된다. bitmap 파라메터들은 각각 xorig, yorig, width, height, acent+descent 이다. xmove는 glyph의 width 미터를 취하고, ymove는 0으로 세팅된다. 최종적으로 glyph 의 이미지는 glBitmap의 적절한 형식으로 변형되어진다. glXUseXFont 를 사용하면 X 폰트를 접근하는것과, display list를 생성하는 것보다 좀 더 효율적이다. 빈 display lists 는 요청되어지고, font에 정의되어지지 않은 모든 그림을 위해 생성되어진다.

Errors

BadFont는 font 가 유효한 font가 아닐때 생성되어진다.
GLXBadContextState 는 현재 GLX context 가 dispaly list construction mode 일때 생성되어 진다. GLXBadCurrentWindow는 drawable 가 호출한 쓰레드의 current context에 관련되었을때 생성되어지며, 그때 윈도우는 더 이상 유효하지 않다.

See Also

glBitmap, glXMakeCurrent


glXWaitGL

 glXWaitGL.3gl

Name

glXWaitGL 점차적 X call에 이전해 GL 처리를 완성한다.

C Specification

void glXWaitGL( void )

Description

OpenGl rendering call 은 glXWaitGL 후에 만들어진 X rendering call 전에
실행되어지기 위해 보증된 glXWaitGL 에 우선한다. 비록 이와같은 결과가 glFinish, glXWaitGL 을 사용하여 이룩되어 질 수 있다 하여도, 서버에 대한 과오가 필요치않고, client와 서버들이 독립된 기계에 있을꼉우 더 효과적 경우가 있다.

Notes

glXWaitGL 은 X stream 을 내보낼 수도 그렇지 않을 수도 있다.

Errors

GLXBadCurrentWindow 는 drawable이 호출한 쓰레드의 current context 와 관련되었을때 생성되고, 그때 윈도우는 더이상 유효하지 않다.

See Also

glFinish, glFlush, glXWaitX, XSync