저는 3D OpenGL / DirectX 세계를 처음 접했고 오늘 OpenGL 4.1 및 GLSL 사양이 출시되었음을 알았습니다.
저의 친구가 저에게 OGL v2.1 용 Red Book을 주었지만 3.x와 4.x는 2.x와 많이 다르고 많은 것들이 더 이상 사용되지 않습니다.
이 책을 사용하여 3D 및 CG의 기초를 배우기 시작하거나 새로운 사본을 찾는 것이 더 좋습니까?
저는 3D OpenGL / DirectX 세계를 처음 접했고 오늘 OpenGL 4.1 및 GLSL 사양이 출시되었음을 알았습니다.
저의 친구가 저에게 OGL v2.1 용 Red Book을 주었지만 3.x와 4.x는 2.x와 많이 다르고 많은 것들이 더 이상 사용되지 않습니다.
이 책을 사용하여 3D 및 CG의 기초를 배우기 시작하거나 새로운 사본을 찾는 것이 더 좋습니까?
답변:
이와 같은 시간에 나는 항상 스팀 하드웨어 설문 조사로 향합니다 : http://store.steampowered.com/hwsurvey/-DX10 / 11 클래스 시스템의 시장 점유율은 거의 80 %입니다. 이것은 GL3.3 이상과 대체로 동일합니다. 이 80 %는 Vista / 7 사용자로 제한됩니다. XP와 함께 DX10 / 11 GPU를 추가하면 90 % 이상으로 상승합니다.
여기서 더 많은 하드 코어 게이머에 대해 이야기하고 있음을 염두에두고, 대상 고객에 대한 생각을 시작해야합니다. 이 사람들이 당신이 목표로 삼고 싶습니까? 더 낮은 수준의 하드웨어를 가진 사람들을 목표로하고 있습니까? 인텔 그래픽은 어떻습니까? Mac 및 Linux 사용자는 어떻습니까? 이것들은 스스로 대답해야 할 모든 질문이므로, 일반적인 지침이 가장 좋습니다.
또한, 오늘 물건을 배송하려는 의도로 오늘 배우기 시작하면 도착하기 전에 최소 1 년의 기간을보고 있다는 사실을 고려해야합니다. 정말 사소한 / 간단한 경우에 대해). gfx 기능의 상승 추세가 지속됨에 따라 우리는 그때까지 GL3.3 + 하드웨어를 거의 100 % 채택하는 것으로보고 있습니다.
그런 다음 GL2.1 이하를 사용하면 GL2.1의 쉐이더 및 VBO 하위 집합으로 제한하더라도 불구하고 엄청나게 많은 오래된 넌센스를 배우고 사용하게 될 것입니다. GL_ARB_map_buffer_range 없이는 스트리밍 VBO를 사용할 수 없습니다)-GL3.3 +는 많은 것들을 처리하는 훨씬 더 좋은 (그리고 성능이 좋은) 방법을 도입 했습니다. 플레이어의 하드웨어를 더 잘 활용할 수 있습니다. 실제로 당신과 협력하고 싶지 않은 API와 싸우기보다는 생산적인 코드를 작성하는 데 더 많은 시간을 할애 할 것입니다.
그리고 당황한 운전자 상황도 있습니다. 어렵지만 사실은 Windows의 GL 드라이버가 유감 상태에 있다는 것입니다. NV는하지 말아야 할 것을 지원하고, AMD는하지 말아야 할 것을 지원하지 않으며, 인텔에서는 실제로 GL 기능에 자신을 제한해야합니다. D3D와 동등 GL_VERSION이 최신 일수록 드라이버 버그가 발생할 가능성이 높지만 GL3.3의 경우 현재 안정적입니다.
요약하면 다른 정보 (타겟 대상 등)가 없으면 GL3.3을 기준으로 지정합니다 (사용 가능한 곳과 코드베이스를 방해하지 않는 높은 GL_VERSIONs의 기능을 끌어 들일 수 있음) 아주 구체적이고 확실하게 식별 된 이유가 없다면 (그리고 나는 "모호한 하드웨어를 가진 사람들은 어떻 습니까?"라는 모호한 개념을 사용하기보다는 100 % 확실하게하고 싶습니다 . 후자의 경우 GL2.1 이하로 떨어지지 않으며 가능한 한 많은 3.x 기능을 사용하려고합니다.
2.1과 3의 교차점을 고수하는 것이 좋습니다. OpenGL 2.1 만 지원하는 많은 하드웨어와 드라이버가 있지만 OpenGL 3 코어에서 권장하는 방식 이 더 좋습니다. 이 튜토리얼 은 시작하기에 좋은 곳입니다 (3에서 폐기 된 기능이없는 OpenGL 2.0을 가르칩니다).
나는 그것이 쓸모가 없다고 말할 것입니다.
왜? 글쎄, 전 세계는 OpenGL 3.x 및 4.0을 지원하지만 Mac OS X은 여전히 OpenGL 2.1 만 지원합니다. 또한 모든 휴대용 플랫폼이 아닌 대부분의 휴대용 플랫폼에서 사용되는 OpenGL ES는 여전히 모든 버전에서 광범위하게 지원됩니다. 1.0, 1.1 및 2.0; OpenGL 1.4, 1.5 및 2.1과 각각 비교됩니다.
따라서 OpenGL ES 1.0이 지구 표면에서 완전히 사라질 때까지 OpenGL 2.x를 아는 것은 낭비 가 아닙니다 .
물론 OpenGL 3.x 또는 4.0을 지원하는 플랫폼에서는 OpenGL 3.x 또는 4.0을 사용하는 것이 가치가 없다고 말할 수는 없습니다.
업데이트 : Mac OS X Lion (10.7) 릴리스부터 OpenGL 3.2 Core 프로파일이 Mac에서 지원됩니다. 이 릴리스는 API를 단순화하기 위해 OpenGL 1.x의 많은 부분을 더 이상 사용하지 않습니다. 이전 버전의 OS X 및 저가형 인텔 그래픽 사용자는 여전히 OpenGL 2.0 및 2.1로 제한됩니다. 그럼에도 불구하고 OpenGL 2.x를 아는 것은 여전히 유용하며 꽤 오랫동안 남아있을 것입니다.
mh01의 답변은 많은 기본 사항을 다루었으므로 몇 가지 suppliments를 추가 할 것입니다.
ES 2.0 vs. 데스크탑 GL 2.1 vs. 데스크탑 GL 3.3에 대해 이야기 해 봅시다. 이 설명의 목적 상 "GL XY"라는 용어는 데스크탑 OpenGL 버전 XY를 의미하고 "ES XY"는 OpenGL ES XY를 의미합니다
구조적 으로 ES 2.0은 GL 2.1보다 GL GL 3.3과 공통점이 더 많습니다. GL 3.3과 ES 2.0은 모두 순수한 쉐이더 기반입니다. 둘 다 순수한 버퍼 객체 기반입니다. 기타 GL 2.1에는 ES 2.0으로 쉽게 이식 할 수없는 GL 2.1 앱을 쉽게 작성할 수있는 많은 성능 및 코딩 트랩이 있습니다.
그러나 음영 언어 구문 측면 에서 GLSL ES 1.00 (ES 2.0으로 매핑)은 GL 3.3보다 GL 2.1의 GLSL과 훨씬 유사합니다. 3.3 키워드 에는 attribute
및 varying
키워드가 없습니다. 그것은 사용 in
하고 out
더 많은 일관성 있고, 타당 인 때 (ES 3.0 GL 3.3 구문을 채택 이유) 2 개 이상의 쉐이더 단계에서 나왔습니다 거래.
GL 3.3에서 배운 개념 을 ES 2.0에 쉽게 매핑 할 수 있습니다 . 따라서 다양한 도구 중 하나에 대해 GL 3.3을 배우면 ES 2.0 세계에서 작업하는 방법을 이해할 수 있습니다. 물론 서브셋이 어디에 있는지 (즉, GL 3.3이 ES 2.0으로 할 수없는 것) 알아낼 필요가 있지만 개념은 동일합니다.
GLSL의 구문을 매핑하여 셰이더를 서로간에 복사 할 수 있도록하는 것이 조금 더 어렵습니다. 그러나 실제로 필요한 것은 올바른 장소에 몇 가지 #defines입니다. 또한 GLSL 3.30에는 highp
데스크탑 GLSL에서 아무 것도 수행하지 않는 등의 ES 호환성 기능이 있습니다 .
따라서 GL 2.1 대신 GL 3.3에서 학습 할 때 ES 2.0에서 얻을 수있는 것이 있습니다.
최신 버전에서만 노출 된 OpenGL에 더 큰 변경이 필요하지 않은 게임의 경우 3.x + 만 사용하면 nvidia 8 시리즈 이상으로 제한됩니다 (다른 그래픽 공급 업체에서는 확실하지 않음). 따라서 3.x + 기능을 사용하지 않는 경우 인위적인 한계를 만들면 나이가 많지만 강력한 그래픽 카드를 가진 사람들이 게임을하지 못하게됩니다.
이러한 이유로, 순방향 호환 서브 세트와 최신 버전을 배우고 게임을 효과적으로 추진할 수있는 가장 낮은 버전을 선택하는 것이 좋습니다. 당신은 할 수 있습니다
또한 OpenGL : ES 2.0이 고정 함수 파이프 라인을 제거하므로 2.1보다 3.0에 해당하는 또 다른 질문에 대한 응답으로 런타임에 지원되는 gl 버전마다 다른 기능을 항상 지원합니다.
나는 대부분 thbusch에 동의합니다. 그러나 더 이상 사용되지 않는 API를 완전히 무시하지는 않습니다. API를 사용하는 코드가 너무 많습니다. 그러나 나는 그들에게 훨씬 덜 주목할 것입니다. 예를 들어, glBegin (), glEnd ()를 사용하여 자신의 코드를 사용하여 자신의 코드를 작성하는 데는 아무 의미가 없습니다. 그러나 당신은 그들을 볼 때 그들을 인식하고 그들이 무엇을하고 있는지에 대한 아이디어를 가져야합니다.
샘플 코드를 작성하지 않고 OpenGL 3.x에서 중단 된 기능을 다루는 연습을 수행하더라도 Red Book 전체를 한 번 이상 읽는 것이 좋습니다.
짧은 대답 :
아닙니다. OpenGL 2.1을 배우는 것은 "좋은 부분"을 배우는 한 오늘날에도 좋은 아이디어입니다.
긴 대답 :
OpenGL은 본질적으로 "좋은 부분"과 "레거시 기능"의 두 부분으로 나눌 수 있습니다.
솔직히 레거시 함수 ( "고정 함수")를 배우는 데는 큰 이점이 없습니다. 그러나 OpenGL 2.1의 상당 부분 (좋은 부분)은 오늘날에도 비교적 약간만 변경되어 사용할 수 있습니다.
따라서 OpenGL 2.1의 일부를 학습하면 도움이 될 수 있습니다. 특히, OpenGL ES 2는 요즘 인기가 높으며 ES 2는 대부분 OpenGL 2.1의 하위 집합입니다. 스마트 폰에서 3D 프로그래밍을하려면 OpenGL ES 2가 필수입니다.
"좋은"게 뭐야? 기본적으로 OpenGL 3.x "코어 프로파일"( "호환성 프로파일"과 반대) 및 / 또는 OpenGL ES 2에있는 모든 것.
glLoadIdentity
이러한 기능은 오래되어 피해야합니다.glLightfv
다른 고정 기능 조명 기능은 사용하지 않아야합니다.glBegin
, glVertex
, glColor
, glEnd
: 그들을 피하십시오. 빠른 실험에는 도움이 될 수 있지만 더 좋은 방법이 있습니다.원래이 답변을 게시 한 질문은 중복 된 것으로 판명되었으므로 여기에 다시 게시하고 있습니다.
현대의 것들을 먼저 배우고 필요할 때까지는 기존의 물건이 아닌 척하는 것이 좋습니다.
오래된 것들은 예를 들어 OpenGL 1.5 이상 만 지원하는 프로그램 (이전의 크 래피 넷북 및 구형 MacOS 시스템에서 찾을 수 있음), OpenGL ES 1.x (이전 iPhone)를 프로그래밍하려는 경우에 유용합니다. 1.6 이전의 Android) 또는 OpenGL SC (제트 파이터에서 디스플레이를 프로그래밍하는 경우 Saftey Critical 하위 세트)입니다. 예를 들어 Minecraft는 OpenGL 1.3을 기반으로 구축되었으므로 실제로는 오래된 하드웨어를 지원할 수 있습니다 (그러나 '고급'옵션도 있음).
화면에 픽셀을 가져오고 '올바른'방법으로 신경 쓰지 않는 경우에도 유용 할 수 있습니다.
-1.0 ~ 1.0 뷰포트 설정 및 쉐이더없이 렌더링과 같은 학습시 OpenGL이 기본적으로 수행하는 일부 기능에 의존하는 것이 유용합니다. 이것은 당신이 한 번에 모든 것을 할 필요없이 배울 수 있습니다.
그러나 가능하면 건너 뛰어야합니다.