OpenGL 또는 Direct3D를 배우는 것이 중요합니까?


11

이 두 API 사이의 차이점은 일단 구현을 배우면 모든 것에 사용할 수 있다는 사소한 구현 세부 사항입니까? 또는 나중에 다른 API를 다시 배울 필요없이 일반적으로 사용하려면 다른 것을 배우는 이유가 있습니까? 하나 더 일반적인가요?

특히 어떤 그래픽 카드에도 쓸 수 있기를 원하므로 코드는 특정 제조사의 카드 나 특정 모델에서만 실행되도록 제한되지 않습니다. 또한 그래픽 카드가 없을 때도 작동하는 코드를 작성할 수 있기를 원합니다 (느리지 만).

이식 가능한 코드가 다른 플랫폼 (운영 체제 / 아키텍처)에서 어떻게 다른가? 나는 이것들과 함께 작동하는 다른 라이브러리의 가용성과 더 넓은 환경에서 라이센스 제한이 적은지에 관심이 있습니다. 이것들 중 하나가 나를 제한하지 않고 내가 배울 수있는 유일한 것인지의 여부에 차이를 줄 수있는 모든 것.


2
래칫 괴물의 대답은 좋은 것입니다. Direct3D를 배우려면 무료 책 "The Direct3D Graphics Pipeline"을 읽어보십시오 . API 세부 사항은 대부분 Direct3D9이지만 개념은 동일합니다. 문제는 1960 년대 후반부터 3D 그래픽 프로그래밍 개념이 전혀 바뀌지 않았다는 것입니다. 이러한 개념을 표현하기위한 API는 훨씬 더 똑똑해졌습니다.
합법화

답변:


9

"그래픽을 프로그래밍"할 때 어떤 API를 사용하길 원하는지는 중요하지 않다고 생각합니다. 더 중요한 것은 3D 장면을 작업 할 때 사용하는 일반적인 개념입니다. 예를 들어 간단한 (그리고 나중에 더 정교한) 장면 그래프를 작성하는 방법을 배우려고합니다. 이러한 개념은 호출해야하는 특정 API 메서드 이름보다 훨씬 중요합니다.

프로그램 작성법을 배울 때 비교하십시오. Java와 같은 프로그램을 작성하는 데 능숙하다면 C ++, Objective-C, Swift 또는 기타 객체 지향 언어를 배우는 데 큰 어려움이 없습니다. 그것은 당신이 배우는 개념과 사고 이기 때문 입니다.

OpenGL, Direct3D 및 Metal 중에서 선택하는 것이 주로 운영 체제를 선택하는 것입니다. Direct3D는 주로 Windows, Metal on OS X 및 iOS에서 사용 가능하며 OpenGL은 OS X, iOS, Windows 및 Linux를 포함한 대부분의 시스템에서 지원됩니다.

그래픽 카드는 한두 가지만 지원하는 카드를 모르기 때문에이 결정에 거의 영향을 미치지 않습니다. 전용 그래픽 카드가없는 경우 실시간 렌더링은 곧 문제가 될 것입니다. 인텔 HD 그래픽과 AMD 컴패니언은 이미 많은 일을 할 수 있습니다.

따라서 플랫폼을 선택하십시오.


면책 조항 : 현재로서는 Direct3D 또는 Metal을 사용하지 않았습니다.


2
> "예를 들어 Java로 프로그램을 작성하는 데 능숙하다면 C ++을 배우는 데 큰 어려움이 없을 것입니다."– 이것은 사실이 아닙니다. 누구나 C ++을 배우고 사용 하는 데 어려움을 겪을 것 입니다. Java 또는 다른 안전한 언어와 비교하는 것은 완전히 부적절합니다. 나열한 다른 언어 (Objective-C, Swift 또는 다른 객체 지향 언어)의 경우에는 그 진술이 대부분 사실입니다.
표시 이름

9

우리는 현재 API 패러다임의 전환에 있습니다.

버퍼, 유니폼, 속성, 레이아웃 및 프로그램을 (암시 적) 글로벌 상태로 바인딩하고 해당 상태로 드로우를 디스패치하는 구식 방법은 D3D11 및 OpenGL에서 일반적입니다. 그러나 상태를 확인하고 마지막 순간까지 프로그램이 수행하려는 작업을 모르는 경우 오버 헤드가 많이 발생합니다. 또한 스레드 안전하지 않습니다 (대부분).

그렇기 때문에 새로운 API가 D3D12에 등장하거나 곧 출시 될 예정입니다. 이 API는 프로그램을보다 강력하게 제어하며 명령 버퍼를 사용하여 수행 할 작업을 미리 선언 할 수 있습니다. 또한 직접 리소스 (정점 데이터, 텍스처 등)를 훨씬 더 직접 관리 할 수 ​​있습니다. 여러 개를 사용하는 것이 훨씬 간단합니다.

이전과 새 중 하나를 선택하는 것은 명령 버퍼를 할당하고 빌드하는 비디오 메모리를 얼마나 잘 관리 할 수 ​​있는지에 따라 결정됩니다.

  • 구형 하드웨어에서도 "작동하는"것을 원한다면 구식 API가 더 좋습니다. 그들은 또한 더 잘 알려져 있으며 온라인에서 더 많은 도움을받을 것입니다.

  • 반면에 디스패치 명령의 비동기 특성을 처리 할 수 ​​있고 할당 한 모든 버퍼를 추적하지 않아도됩니다. 그러면 새로운 API가 도움이 될 수 있습니다.


6
새로운 명시 적 그래픽 API는 일반 그래픽 프로그래머가 소비하도록 설계되지 않았으며, 엔진에서 인프라 작업을 수행하는 사람들이나 성능이 실제로 필요한 사람들을위한 것 입니다. 그들은 당신에게 훨씬 더 큰 총을 제공하고 당신의 발에 바로 지적합니다.
porglezomp

3

개인적으로는 그다지 중요하지 않다고 생각합니다. 프로젝트에 적합한 것을 선택하십시오. 과거에는 D3D와 OpenGL을 모두 사용했습니다. 중요한 개념입니다. 당신이 무엇을 잡든, 당신은 이해해야합니다 (예 :).

  • GPU에서 텍스처는 무엇이며 어떻게 사용됩니까?
  • 그래픽 개발의 기본 개념 (Vertices, Primitives, Fragments 등)
  • 카메라 시스템의 작동 방식 (예 : OpenGL의 MPEG 매트릭스)
  • 셰이더 란 무엇이며 올바르게 사용하는 방법.
  • 머신의 CPU와 GPU의 작동 방식
  • GPU 메모리 모델과 CPU 메모리 모델의 차이점은 무엇입니까?
  • CPU에서 수행해야 할 작업 및 처리를 위해 GPU로 오프로드해야하는 작업

여기에 언급 된 다른 사람들과 마찬가지로, 우리는 새로운 API 세트 (Vulkan, Metal 등)로 전환하는 중입니다.이 시점에서 그래픽 개발에 완전히 익숙하지 않은 경우 Vulkan 이후 GLSL에 초점을 맞추는 것이 좋습니다. 그것도 이용할 것입니다.

이식성과 관련하여 D3D는 Windows 전용입니다 ( 와인 프로젝트가 Linux에서 D3D를 작동 시키려고하지만 현재까지는 불가능 하다는 소문이 있습니다 ). OpenGL은 크로스 플랫폼입니다. 모바일로 가고 싶다면 OpenGL ES를 사용할 수 있습니다. 물론 OpenGL과 OpenGL ES는 모든 플랫폼에서 지원되지 않는 버전이 다릅니다.

하루가 끝나면 모든 API가 컴퓨터의 동일한 하드웨어에 액세스합니다. 이는 "어떻게"액세스 하는가에 달려 있습니다.


Direct3D는 Xbox 본체를 프로그래밍 할 때도 사용합니다.
합법화

"아무것도 불가능하다"는 무슨 뜻입니까? Wine은 수백 가지의 D3D 기반 프로그램을 문제없이 운영하고 있으며 수년간 그렇게 해왔습니다. 물론 버그와 구현되지 않은 부분이 있지만 전체 API를 사용할 수있는 것은 아닙니다.
Ruslan

0

그래픽 카드없이 렌더링하는 것에 대해 몇 마디 말씀 드리겠습니다.

Niether OpenGL이나 DirectX에는 그래픽 카드가 필요합니다. 구현은 완전히 소프트웨어 가속 될 수 있습니다.

Linux의 OpenGL에는 Mesa 소프트웨어 래스터 라이저가 있습니다. 내 경험상 이상한 기능 (디스플레이 목록 + 인덱싱 된 정점 배열)을 너무 세게 밀지 않으면 괜찮습니다. 실제 버그 목록이 1 마일이라고 생각합니다. 지속적인 테스트를 수행하십시오!

Windows에서 OpenGL을 사용한 경험이 적습니다. 알고 있다면 답을 수정하십시오!

DirectX SDK는 "reference rasterizer"라는 소프트웨어 래스터 라이저와 함께 제공됩니다. 그것은 내 의견으로는 디버깅을 위해 주로 사용되지만 DX10 전용 노트북에서 DX11을 개발할 때 참조 래스터 라이저를 사용하는 친구를 적어도 한 명 알고 있습니다. 다른 답변에서 언급했듯이 DirectX는 Microsoft 전용입니다.


통합 그래픽 카드를 사용한 경험이 Windows에서 대부분의 OpenGL 개발에 충분할 정도로 최신 OpenGL 버전을 지원하는지 확인하십시오.
akaltar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.