위의 책에 대해 몇 가지 메모로 동의합니다.
OpenGL 프로그래밍 8 번째 안내서가 나 왔으며 최신 OpenGL 4.3을 위해 다시 작성되었습니다.
SuperBible 5th ed는 목발 도서관을 시작할 수 있도록 해주지 만 책을 훑어 보면서 도서관의 기능을 다시 구현하여 끝까지 완전히 정통해야합니다. 객체 지향 언어를 사용하는 경우 OpenGL 항목을 무언가로 감싸는 것이 좋습니다. 나는 갈 길 인 것처럼 보이는 재미를 위해 내 자신의 라이브러리에서 일하고 있습니다. 자신을 구현하고 모든 인과 아웃을 이해하고 실제로 사용하는 비트 만 넣어야합니다. 또한 데이터를 셰이더에 전송하는 것과 같은 것들을 추상화 할 수 있습니다 (반짝이는 Material.setColor (Red)는 더 좋지 않습니다). 이는 또한 레거시 대안을 제공하여 물건을 백 포트 할 수 있습니다. oglplus 도 있습니다 .
현대적인 '핵심'OpenGL을 배우는 데있어 주요 문제점은 큐브를 작성하는 것만으로도 기본 파이프 라인을 설치하고 실행하려면 다음을 이해해야한다는 것입니다.
- 매트릭스 작업 ( C ++에서 GLM을 사용하는 경우 여기에 MatrixStack OpenGL 비공식 SDK 버전 또는 여기 에 간단한 버전이 필요합니다 .)
- GLSL 쉐이더 프로그래밍.
- 셰이더 및 정점 버퍼 객체에 데이터 바인딩. 실제 순수한 핵심 프로파일을 배우고 싶다면 모두 동시에 구현해야하며 무언가가 깨진 경우 아무것도 보지 못하고 어디에서 잘못되었는지 전혀 알 수 없습니다. 또한 기본 조명 (프로그래밍 언어 외에 음영 알고리즘을 배워야하는)과 같은 내용은 다루지 않습니다.
그러나 핵심 프로파일로 심층적으로 시작할 필요는 없습니다. 처음에는 더 이상 사용되지 않는 기능 중 일부 를 사용하십시오. 거의 모든 것이 여전히 기능을 지원하고 현대화합니다.
또 다른 문제는 '현대적인'OpenGL이 실제로 3 가지를 언급 할 수 있다는 것입니다.
첫 번째는 고정 함수 파이프 라인과 달리 프로그래밍 가능한 셰이더 pipline입니다. 핵심 '현대적인'기술은 2004 년 OpenGL 2.0이 출시 된 이후에 소개되었는데 (튜토리얼이 업데이트되지 않은) 셰이더에도 1.5가 최신 OpenGL의 또 다른 초석 인 Vertex Buffer Objects가있었습니다. 문제는 오늘날 OpenGL 개발자들조차도 모든 것을 이용할 수 없을 수도 있다는 것입니다. OpenGL 1.5 만 지원하는 인텔 칩셋과 구형 iPhone / Android와 같은 전화 만 지원하는 엉뚱한 넷북이 많이 있습니다. OpenGL ES 1.1. OpenGL 2.0과 OpenGL 3.x / 4.x에서이 것들 사이의 유일한 차이점은 이제 핵심 프로파일에 필수적이라는 것입니다.
최신 OpenGL은 3.x, 4.x의 새로운 기능을 참조 할 수도 있습니다. 같은 것들 버텍스 어레이 오브젝트 , 프레임 버퍼 오브젝트 , 통일 버퍼 개체 / std140 , 레이아웃 규정 , GLSL 서브 루틴등등. 내가 찾은 많은 것들이 프로그램을 훨씬 더 멋지게 만들 수 있습니다. 또한 전체 엔진 파이프 라인을 미묘하게 변경할 수도 있습니다. 또한 도우미 기능 등을 만들어서 약간의 노력으로 백 포트 할 수있는 것들입니다 (예 : UBO가 지원되는 경우 유니폼을 설정하는 데 사용할 수있는 일반 셰이더 관리자 객체를 작성하십시오. 그렇지 않으면 수동으로 값을 셰이더에 업로드하는 것을 사용하십시오) , 자동화를 위해 약간의 셰이더 재 작성 항목을 거기에 넣을 수 있습니다). 이 비디오는 새로운 비디오 카드에서만 실행되며,이를 지원하는 넷북이나 현재 세대의 비디오 게임 콘솔을 볼 수 없습니다 (OpenGL ES와 유사한 자체 OpenGL 하위 세트를 사용함). 최신 OSX에는 3 개만 있습니다.
울트라 모던 차세대 OpenGL. OpenGL 4.3이 출시되었습니다. 컴퓨팅 셰이더, glMultiDrawElementsIndirect 및 셰이더 스토리지 버퍼가 함께 제공됩니다. 이를 통해 모든 정점 데이터를 GPU에 업로드 한 다음 계산 셰이더를 사용하여 프로그램에서 수행하는 것이 아니라 그려야 할 것을 계산하는 근본적으로 다른 파이프 라인이 가능합니다. 불행히도 이것은 매우 새롭기 때문에 적절한 자습서를 알지 못합니다. 이것이 어떻게 작동하는지에 대한 개요를 제공하는 OpenGL 4.3 리뷰 를 살펴보십시오 (또한 저자는 GPU Pro 기사가 릴리스 될 것이라고 발표했습니다). 최신 버전이므로 베타 드라이버가 장착 된 최신 엔비디아 카드를 사용하지 않는 한이 단계의 어느 곳에서도 지원되지 않습니다. OpenCL / CUDA를 사용하여 일부를 구현할 수도 있습니다.
glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix 등을 건너 뜁니다. 대신 쉐이더없이 Vertex Buffer Objects를 배우는 것으로 시작하십시오.이 시점에서 3D를 평평한 흰색 삼각형으로 시도하지 마십시오. 따라서 행렬을 사용하여 3D 작업을 수행 할 필요가 없습니다 (곧 쉐이더에 바인딩하는 법을 배울 필요가 있으므로) 옛날 방식으로 배우는 데는 의미가 없습니다). 다음으로 셰이더에 추가하면 정점 속성을 사용하려고하므로 정점 버퍼 객체의 바인딩 방식을 변경해야합니다. 유니폼을 통해 속성을 전달하는 방법을 배우십시오. 그런 다음 GLM을 사용하여 매트릭스 작업을 배우고 매트릭스를 셰이더에 바인딩하고 3D로 전환하십시오. 일단 완성하면 기본적으로 텍스처링과 같은 고급 기능을 배우는 것입니다.
OpenGL 2.0 이상에서 작동하는 셰이더 프로그래밍 파이프 라인을 다루는 일반적인 온라인 최신 OpenGL 자습서 :
다른 일반적인 학습 자료. OpenGL ES가 좋은 출발점이 될 수 있습니다. OpenGL ES는 더 이상 사용되지 않는 모든 것을 제거했습니다. OpenGL 4.1은 OpenGL ES와 완벽하게 호환되므로 OpenGL ES 프로그램을 가지고 OpenGL 4.1에서 실행할 수 있어야합니다. 그리고 기본 원칙은 모두 동일합니다.
주목할 사항은 OpenGL ES 3.0이 출시 되었지만 새로운 기능이므로 아직 튜토리얼이나 하드웨어 지원이 제공되지 않는다는 것입니다. OpenGL ES 1.0-> 2.0에서 보았던 고정 파이프 라인과 셰이더 모델의 차이와 같이 큰 근본적인 변화가없는 것 같습니다. 그래서 당신은 아마 오래된 것들을 배우지 않을 것입니다.
또한 OpenGL ES는 종종 EGL을 사용 하므로 Window를 여는 다른 방법을 배워야하지만 그렇게 어렵지는 않습니다. 그렇지 않으면 주위에 몇 가지 OpenGL ES 래퍼 / 에뮬레이터가 있거나 Android / iPhone에서 배울 수 있습니다 (또는 에뮬레이터 사용을 살펴보십시오).
빨간 책에 해당 하는 Addison Wesley OpenGL ES 2.0 프로그래밍 안내서 가 있습니다.
GLSL 셰이더에 중점을 둔 것들도 현대 OpenGL의 대부분이 사는 곳에서 볼 수 있습니다. 학습 한 내용이 OpenGL 바인딩 '접착제'측면을 다루도록해야합니다.
OpenGL Shading Language 2nd edition (Orange Book)을 확인하십시오.
OpenGL 4.0 Shading Language Cookbook은 최첨단 OpenGL을 다루지 만 포괄적 인 자습서는 아닙니다. 균일 한 버퍼 객체 및 GLSL 서브 루틴과 같은 최신 실제 OpenGL 사례에 대해 이해하는 것이 좋습니다.
마지막으로 WebGL을 살펴볼 수는 있지만 JavaScript에서는 다소 다르고 디버깅하기가 훨씬 어려울 수 있습니다.