현대 OpenGL (3.0 이상)을 배우기에 유용한 자료가 있습니까? [닫은]


73

OpenGL (3.0 이상)부터 시작하기 위해 좋은 리소스를 찾게되었습니다. 글쎄, 나는 많은 책을 발견했지만 그중 어느 것도 좋은 자원으로 간주 될 수 없습니다!

다음은 두 가지 예입니다.

OpenGL 프로그래밍 가이드 (7 판) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 이것은 더 이상 사용되지 않는 자료입니다! 거의 모든 장은 그것에 관한 메모로 시작합니다.

OpenGL Superbible (5th Edition) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 이 책은 저자가 만든 라이브러리를 사용하여 배우고 자하는 것을 숨기고 주요 논증을 설명합니다! 도서관 이용 방법을 배우고 싶지 않습니다! OpenGL을 배우고 싶습니다!

이것이 "Google을 사용할 수 없습니다 ... OpenGL을 배우는 방법을 알려주십시오"와 같은 질문이 아니라는 것을 이해하기를 바랍니다. 방금 상세하고 철저한 검색을 마쳤지만 더 이상 사용되지 않는 주제를 피하는 "새로운"OpenGL을 배울 수있는 훌륭하고 완전한 리소스를 찾을 수 없습니다.

누군가 나를 올바른 방향으로 이끌 수 있습니까? 나는 C ++을 알고 개발에 10 년의 경험이 있습니다 ... 좋은 리소스를 찾을 수있는 곳은 어디입니까?! 나는 그것에 시간을 보내고 싶고 깊이 배우고 싶습니다.

답변:


69

위의 책에 대해 몇 가지 메모로 동의합니다.

  • 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에서는 다소 다르고 디버깅하기가 훨씬 어려울 수 있습니다.


3
+1, 와우 내가 제안 하는 유일한 작은 변화는 클라이언트 측 정점 배열을 VBO에 대한 더 쉬운 경로이지만 초보자가 빠질 수있는 곰 함정이 없기 때문에 처음에 클라이언트 측 정점 배열을 사용하는 것입니다.
Maximus Minimus

1
더 이상 사용되지 않는 기능을 배우거나 사용하지 않는 것이 가장 좋은 방법이라고 생각했습니다. 내가 사용하도록 제안하는 다른 사용되지 않는 것은 셰이더를 사용하지 않고 렌더링 할 수 있고 정점 속성 0이 코어 프로파일을 켤 때 폭발해야한다고 가정하는 것과 같이 OpenGL이 기본적으로 수행하는 작업입니다.
David C. Bishop

2
SuperBible의 6 번째 버전이 방금 출시되었으며 5 번째 버전보다 훨씬 좋습니다. 나는 그것을 강력히 추천하며 현대 OpenGL을 따라 가고 배우기가 쉽습니다.
Philip

2
Arcsynthesis gltut 사이트는 더 이상 사용할 수 없지만 튜토리얼은 bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

15

프로그래밍 안내서 8 판이 나올 때까지 책을 잊어 버리십시오.

언급 된 튜토리얼 외에도이 사이트 가 기본 사항을 상당히 빨리 지나갔 기 때문에 도움 되는 것으로 나타났습니다 . 둘 다 현대 OpenGL에 대한 훌륭한 소개입니다. 일단 그것을 지나면 문서 만 있으면됩니다. OpenGL은 익숙해지면 사용하기 쉽습니다. 나머지는 컴퓨터 그래픽 이론과 수학입니다.


11

나는 당신과 똑같은 상황에 있었고 마침내 내가 가기 위해 필요한 것을 발견했습니다.

먼저 여기에서 http://www.arcsynthesis.org/gltut/를 방문하십시오 . 이 사이트는 훌륭하고 실용적이며 진행 상황에 대한 깊은 설명입니다. 코드가 C ++로 작성되었지만 Lisp에서 OpenGL 데모 작성을 가르치기 위해 이것을 사용하고 있습니다. 또한 오래된 습관을 완전히 없애기 때문에 나쁜 습관을들이는 것에 대해 걱정할 필요가 없습니다.

'단지 다른 웹 사이트'라고해도 기본 사항에 대한 깔끔하고 간결한 설명을 제공하는 책은 찾지 못했습니다.

위의 사이트를 통과 한 후에는 이미 기본 쉐이더를 이해하고 알아야 할 많은 정보를 Google에서 볼 수 있습니다. 또는 opengl 위키 사이트에서 찾을 수 있습니다. 후자는 벨트 아래의 arcsynthesis 사이트의 기본 사항이 없지만 원하는 것을 대략 알면 매우 유용합니다.

또한 GLSL을 자세히 살펴 보려면 OpenGL Shader Language (The Orange Book)를 살펴보십시오.이 작업은 매우 느리게 진행되지만 쉐이더 작성에 대한 이해를 통해 더 많은 것을 추구 할 수 있습니다. 이 책에는 리뷰어의 말에 따르면 "600 페이지 책에 담긴 200 페이지의 최고 품질의 콘텐츠"가 있지만 추가 기록 및 정보는 OpenGL의 경로를 이해하는 데 필요한 컨텍스트를 제공 할 수 있음을 경고합니다. 표준이 무너지면서 (어쨌든 나를 돕고 있습니다!)

나는 이것이 도움이되고 행운을 빕니다. 앞으로 당신의 작품을보고 / 재생하기를 기대합니다!

최신 정보

arcsynthesis가 슬프게도 오프라인 상태 인 것 같지만 사이트가 여기 에서 pdf로 변환 되었으며 코드가 여기 에 반영되었습니다 .

또한 내 원래의 답변 인 learnopengl.com/ 이 몇 년 후에 절대적으로 훌륭해졌습니다 . learnopengl 사이트는 현대 OpenGL에 대한 도입의 탁월한 우수성을 위해 여전히 arcsynthesis를 권장하지만 learnopengl 사이트는 arcsysthesis가 수행 한 것보다 훨씬 많은 것을 다루고 접근 가능한 언어로 관리하며 예제와 오픈 소스 코드를 만들었습니다. 기본적으로, 잘 지내고, 확인해보세요!

책에 관해서는 주황색 책에 너무 많이 가지 않았지만 '실시간 렌더링' 의 세 번째 버전을 추천 할 수 있습니다 . 기술적 인 내용이 준비되면이 책은 금광입니다.


2
세상에! 첫 번째 링크는 환상적입니다!
MatterGoal

gltut 사이트는 더 이상 사용할 수 없지만 튜토리얼은 bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

좋은 지적은 추가 권장 사항으로 게시물을 업데이트하겠습니다.
Baggers


5

나에게 매우 도움이 된 두 사이트는 http://www.arcsynthesis.org/gltut/http://ogldev.atspace.co.uk/

또한 OpenGL 위키 는 매우 훌륭하고 최신의 리소스입니다.

이 과정을 마치면 글 머리 기호를 물고 OpenGL 사양을 읽는 것이 좋습니다. 그러면 당신은 전문가가 될 것입니다.


예, 온라인 자습서가 대부분의 책보다 훨씬 유용하다는 것을 알았습니다. SuperBible 5th Edition은 매우 실망 스럽습니다.
필립

gltut 사이트는 더 이상 사용할 수 없지만 튜토리얼은 bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

4

"현대"OpenGL을 다루는 최고의 책은 http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book 입니다 .

"요리 책"이지만 렌더링을 설정하는 데 필요한 단계와 필요한 컴패니언 라이브러리 종류 (이미지 라이브러리, 벡터 수학 라이브러리)를 안내합니다.

또한 OpenGL을 사용하고 싶을 수도있는 모든 종류의 일반적인 작업을 수행합니다. 복잡한 그림자 매핑 방법).

오렌지 책을받는 것도 추천합니다.


@Jari에게 감사합니다. 셰이더에 관한 것만이 아닌가? 이 책은 쉐이더뿐만 아니라 OpenGL 기술을 소개합니까?
MatterGoal

2
@MatterGoal : 현대 OpenGL은 거의 완전히 쉐이더 기반입니다. 이 책은 OpenGL 바인딩 측면을 다루고 있습니다. 나는 또한이 책을 추천하지만 다른 것의 동반자로서 실제로 핵심 학습 책은 아니지만 moddrn 사례의 실제 사용을 보여줍니다.
David C. Bishop

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.