배우거나 사용할 OpenGL 버전은 무엇입니까?


16

저는 OpenGL을 처음 사용합니다. 게임 프로그래밍에 대한 일반적인 지식은 있지만 실무 경험은 거의 없습니다.

다양한 기사와 책을 살펴보고 OpenGL로 뛰어 들려고 노력했지만 다양한 버전과 이전 버전과 새로운 방식으로 혼란스러운 작업을 수행했습니다.

첫 번째 질문은 누구나 OpenGL의 각 버전을 실행할 수있는 게이머의 비율에 대한 수치를 아는 것입니다. 시장 점유율은 어떻습니까? 2.x, 3.x, 4.x ...

밸브가 Mac에서 실행되도록 OpenGL로 업데이트 한 것을 알았 기 때문에 Half Life 2의 요구 사항을 조사했으며 일반적으로 매우 광범위한 사용자 기반을 달성하려고 시도하고 최소 GeForce 8 시리즈를 말합니다. Nvidia 웹 사이트에서 8800 GT를 살펴본 결과 OpenGL 2.1에 대한 지원이 나열되어 있습니다. 어쩌면 내가 틀렸을지도 모르지만 이미 4.x가 있기 때문에 나에게 고대의 소리가납니다. 8800GT 용 드라이버를 찾았는데 4.2를 지원한다고합니다! 약간의 차이가 있습니다, lol.

또한 XP는 특정 버전까지만 지원하거나 OS X는 3.2 또는 다른 모든 종류 만 지원하는 것과 같은 내용을 읽었습니다. 전반적으로, 나는 다양한 버전에 대해 얼마나 많은 지원이 있는지와 배우고 / 사용할 버전이 무엇인지 혼동합니다.

또한 학습 자료를 찾고 있습니다. 내 검색 결과는 지금까지 OpenGL SuperBible을 가리 켰습니다. 4 판은 아마존에 대한 훌륭한 리뷰를 가지고 있지만 2.1을 가르칩니다. 5 판은 3.3을 가르치고 리뷰에는 4 판이 더 좋고 5 판이 새로운 기능이나 무언가를 올바르게 가르치지 않는다고 언급하는 몇 가지 사항이 있습니까? 기본적으로 학습 자료 내에서도 불일치가 발생하며 어디서부터 시작 해야할지조차 모릅니다.

내가 이해 한 바에 따르면, 3.x는 완전히 새로운 방식으로 작업을 시작했으며 "glBegin (), glEnd ()와 같은 더 이상 사용되지 않는 기능을 피하면서도 많은 책을 읽고 싶다"는 다양한 기사와 리뷰를 읽었습니다. 내가 본 튜토리얼은 그 방법을 사용합니다. 나는 사람들이 기본적으로 새로운 방식의 일이 더 복잡하지만 이전 방식은 나쁘다고 말하는 것을 보았다.>

개인적으로, 나는 아직도 미리 배울 것이 많다는 것을 알고 있지만 테셀레이션에 관심이 있습니다. 그래서 나는 그것이 4.x에만 있다는 것을 이해하기 때문에 그 요소들도 그 요소에 있다고 생각합니다.

[단지 btw, 내 데스크탑은 4.2 지원]


이 질문 (스택 오버플로)은 중복 된 것으로 보입니다 : stackoverflow.com/questions/6823371/…
Anderson Green

답변:


21

OpenGL 적용 범위가 궁금하다면 Steam Hardware Survey를 시작하는 것이 좋습니다.

http://store.steampowered.com/hwsurvey?platform=pc

불행히도, 그것은 지금 고장난 것 같고 비디오 카드에 대한 통계를 표시하지 않습니다. : \

나는 XP와 같은 것을 읽었습니다. 특정 버전까지만 지원합니다.

DirectX 9는 OpenGL 2.1, DirectX 10-OpenGL 3.0 및 DirectX 11-OpenGL 4.0과 비교할 수 있습니다. 이것은 혼란이 시작되는 곳입니다.

XP는 모든 버전의 OpenGL을 지원하지만 DirectX 10 이상은 지원하지 않습니다. 이것이 바로 마이크로 소프트가 사람들을 비스타로 업그레이드하길 원했지만 제대로 작동하지 않았다. OpenGL은 공개 표준이므로 비디오 카드 제조업체가 XP 용 드라이버를 생산할 수있는 한 최신 버전의 OpenGL을 지원합니다.

내가 이해 한 바에 따르면, 3.x는 완전히 새로운 방식으로 작업을 시작했으며 "glBegin (), glEnd ()와 같은 더 이상 사용되지 않는 기능을 피하면서도 많은 책을 읽고 싶다"는 다양한 기사와 리뷰를 읽었습니다. 내가 본 튜토리얼은 그 방법을 사용합니다. 나는 사람들이 기본적으로 새로운 방식의 일이 더 복잡하지만 이전 방식은 나쁘다고 말하는 것을 보았다.>

이것은 OpenGL에서 매우 큰 문제입니다. 기본적으로 예전에는 "즉시 모드"를 사용하여 비디오 카드로 물건을 보냅니다. 로 시작하고 glBegin몇 가지 작업을 수행하고로 끝납니다 glEnd. 그러나 비디오 카드 드라이버는이 기능 을 전혀 좋아하지 않습니다 . 당신이 보낼 물건의 양을 어떻게 알 수 있습니까? 텍스처 쿼드의 경우 4 개의 정점이 될까요? 스킨 된 모델의 경우 10 만입니까? 이것이 버텍스 버퍼 객체 (VBO)를 도입 한 이유입니다. 즉각적인 모드는 연결된 목록이지만 VBO는 정적 배열입니다. 개발자는 그것이 얼마나 큰지를 알고, 운전자는 그것이 얼마나 큰지를 알고 있습니다. 모두 행복합니다. 따라서 OpenGL 표준 보드 (Khronos Group)는 OpenGL 3.0 이상에서 즉시 모드를 더 이상 사용하지 않기로 결정했습니다. 그러나 간단한 예제로 보여 주므로 문제가됩니다.

처음부터 시작하여 텍스처 쿼드를 표시한다고 가정 해 봅시다.

OpenGL 2.1에서 :

  • 투영 행렬을 설정하고에 넣습니다 GL_PROJECTION.
  • 모델 뷰 행렬을 설정하고에 넣습니다 GL_MODELVIEW.
  • 이미지를 넣고 GL_TEXTURE_2D손잡이에 넣습니다 .
  • 정점의 위치, 텍스처 좌표 및 색상을 정의하십시오.
  • 텍스처를 바인딩합니다.
  • glBegin... glVertex2f... glTexCoord2f... glEnd.

OpenGL 3.0에서 :

  • 투영 및 모델 뷰를위한 행렬을 작성하십시오.
  • 이미지를 넣고 GL_TEXTURE_2D손잡이에 넣습니다 .
  • 정점의 위치, 텍스처 좌표 및 색상을 정의하고 VBO에 넣습니다.
  • 정점 배열 객체 (VAO)를 만들고 VBO를 연결합니다.
  • 텍스처 쿼드를 출력하기 위해 쉐이더를 작성하고 쉐이더 프로그램에 넣습니다.
  • 유니폼을 사용하여 행렬을 쉐이더 프로그램에 연결하십시오.
  • 텍스처를 바인딩합니다.
  • 텍스처를 셰이더 프로그램에 연결하십시오.
  • glDrawArrays.

첫 번째 버전에서 무엇이 잘못 될 수 있습니까?

  • 당신의 위치가 잘못되었습니다.
  • 당신의 정점 권선은 잘못된 길입니다.
  • 텍스처가 제대로로드되지 않습니다.
  • 텍스처가 제대로 바인딩되지 않습니다.
  • 투영 행렬이 잘못되었습니다.
  • 모델 뷰 행렬이 잘못되었습니다.
  • 올바른 정점을 보내지 않습니다.

그리고 두 번째 버전에서는 위와 다음 같은 문제가 발생할 수 있습니다 .

  • 귀하의 VBO가 잘못되었습니다.
  • 귀하의 VAO가 잘못되었습니다.
  • 셰이더가 잘못되었습니다.
  • 셰이더에 대한 텍스처 바인딩이 잘못되었습니다.

적절한 디버그 도구가 없으면 심각한 문제가됩니다. 이것이 바로 사람들이 즉시 모드를 고수해야한다고 말하는 이유입니다. 운 좋게도 이제 우리는 자유롭고 훌륭한 gDEBugger를 가지게 되었지만 그것은 마법의 총알이 아닙니다.

질문에 대답하려면 게임에 따라 다릅니다. 다양한 대상 (예 : 캐주얼 게임 또는 2D 플랫 포머)에 도달하려면 2.1을 타겟팅해야합니다. 어쨌든 6 년 된 하드웨어에서 실행되지 않는 서사적 우주 게임을 만들고 있다면 3.3을 목표로 삼으십시오. 미래 호환성을 위해 최신의 최신 버전 이 필요한 경우 4.0을 대상으로합니다.


2
VAO / VBO에 대한 편견이 여기에 있다고 생각합니다. 실제로 텍스처 쿼드를 그리려면 이미 생성 된 셰이더 및 텍스처와 함께 전체 VAO / VBO 세트를 갖게됩니다 (프로그램 시작 중 – 아무도 런타임에 생성하지 않음). 새로운 방식으로 텍스처 쿼드를 그리는 것은 실제로는 몇 번의 호출로, 프로그램 초기에는 복잡성을 전면로드하는 반면, 기존 방식은 런타임에 복잡성을 노출합니다.
막시무스 미니 무스

2
그러나 이것이 정확히 의미하는 바입니다. 이제 버그가 데이터 (버텍스 데이터 및 텍스처 객체), 셰이더 프로그램, 셰이더 코드, 매트릭스, 균일 한 업로드 또는 VAO 바인딩에있을 수 있습니다. 아무것도 시작 하지 않으면 확인해야 할 하위 시스템이 많습니다! 그리고 더 많은 상태를 추적해야합니다.
knight666

1
Gremedy 사이트의 gDEBugger가 오래되었습니다. 나는 그들의 포럼이 오랫동안 다운되어 버렸다고 생각합니다. 이 도구는 AMD에 의해 포착되었습니다 gDEBugger를 .
MichaelHouse

2
"glBegin ... glVertex2f ... glTexCoord2f ... glEnd." 그냥 싫다. glBegin, glVertex 등은 결코 옳지 않았습니다. glDrawArrays는 OpenGL 1.1 (1997)에서 도입되었으며 항상 glBegin 및 End에서 사용해야합니다.
야수

9

하드웨어 호환성에 대한 일부 통계는 Steam Survey : http://store.steampowered.com/hwsurvey/ 에서 확인할 수 있습니다. DX10 및 DX11이 나열되어 있지만 하드웨어 호환성은 각각 OpenGL 3 및 OpenGL 4와 동일합니다. 사람들의 OpenGL 드라이버 설치 상태는 일반적으로 DX보다 좋지 않습니다.

Windows XP는 DX10 또는 DX11을 지원하지 않지만 드라이버가 정상이면 OpenGL 3 및 4는 정상입니다. OSX는 OpenGL 3 (최대)을 지원하며, Linux에서는 ATI / NVIDIA 공급 업체 드라이버가 포함 된 OpenGL 4를 제공합니다 (물론 하드웨어가 지원하는 경우에만 해당).

그런 다음 OpenGL의 모바일 ES 버전도 있습니다. 실제로 OpenGL ES 2.0은 더 작고 배우기 쉽기 때문에 OpenGL ES 2.0을 살펴 보는 것이 좋습니다. 그러나 현대적인 연습 (예 : 쉐이더 및 VBO)도 사용해야합니다. 그것은 또한 대부분의 모바일 장치에서 사용되는 것이므로 (모바일 게임 제작에 참여해야 함) WebGL도 기본적으로 동일하므로 웹 브라우저에서 모든 학습을 실제로 빠른 개발 이점으로 수행 할 수 있습니다. OpenGL ES 3.0은 이번 여름에 출시 될 예정입니다.

테셀레이션은 OpenGL 4.0 기능입니다. 먼저 모든 기본 사항을 제외하고 다른 종류의 쉐이더를 배워야하지만 흥미 롭다는 데 동의합니다. 실제로 약간의 테스트를 작성했습니다 .http : //blog.tapiov.net/post/15189341463/playing- with-opengl-4- 테셀레이션


4
젠장, 666666이 더 자세한 답변으로 나를 이겼다. 아직도 ES 부분은 생각해 볼 가치가 있습니다.
Tapio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.