OpenGL은 2D 게임에 적합합니까?


43

저는 한동안 OpenGL 라이브러리를 가르치고 있으며 게임을 시작하고 싶습니다. 그러나 더 쉬운 소개를 위해 하향식 포켓몬 스타일 게임과 같은 2D로 시작하고 싶습니다.

이것이 좋은 계획입니까, 아니면 OpenGL이 3D 전용입니까?



OpenGL을 2D에 사용하면 얻을 수있는 이점 중 하나는 셰이더의 이점을 얻는 것입니다. 특수 효과를 얻는 데 유용 할 수 있습니다. 또 다른 이점은 OpenGL을 이미 알고 있다면 이미 API에 익숙하다는 것입니다.
Lysol

답변:


43

OpenGL은 2D 게임에 매우 적합합니다. 일반적으로 3D에 사용되지만 2D 게임에도 동일한 기능을 사용할 수 있습니다. 즉, 3D OpenGL로 할 수있는 모든 작업은 "2D"OpenGL에 적용 할 수 있습니다.

추가 정보는 이 위치 에서 찾을 수 있습니다 .

2D OpenGL은 3D OpenGL과 같은 방식으로 달성됩니다. 2D OpenGL은 기술의 적용, 즉 평면을 장면에 렌더링 한 다음 원근 투영 대신 정사영 투영을 사용하여 설정에 따라 장면이 왜곡 될 수 있습니다.

예를 들면 :

직교 대 관점

(a)는 직교 투영에서의 장면이다. (b) 투시 투영을 사용하는 동일한 장면입니다. 2D 게임에서 스프라이트의 깊이가 변경되면 스프라이트가 잘못 배치 될 수 있습니다 (개발 방법에 따라 다를 수 있음). 투시 투영을 사용하면 화면 좌표에서 정렬하기가 더 어려워집니다.

또한 OpenGL은 많은 이점을 제공합니다. 기본적으로 하드웨어 가속은 큰 장점입니다. 또한 그래픽 카드의 기능과 작동 방식에 대해 훨씬 세밀한 제어가 가능하므로 사례 별 최적화가 가능합니다.


대단히 감사합니다! 나는 이것을해도 괜찮다는 확인을 원했습니다.
w4etwetewtwet

4
OpenGL을 2D에 사용할 적성과 관심이 있다면 OpenGL만이 제공 할 수있는 많은 보상을 얻게됩니다. 뛰어난 성능, 플랫폼 간 호환성 ... 이런 식으로 생각하십시오. 어쨌든 2D에 대한 거의 모든 다른 선택 OpenGL 위에 구축 될 것 입니다. 그것은 몇 가지 "중간"를 잘라 수있는 좋은 기회입니다
스티븐 루

2
@StevenLu는 말할 것도없이 실제 프로그래머에
가깝습니다

잘 읽었습니다! 연결해 주셔서 감사합니다. 예 : 직선 OpenGL로 2D를 코딩 하는 것은 더 나쁜 일 이므로 그렇게해야합니다.
Steven Lu

1
링크가 아닌이 답변에 더 많은 정보를 제공해야합니다. GL이 2D (직교 뷰)에서 작동하는 이유와 그 이점 (하드웨어 가속, 쉐이더 효과)에 대해 설명해보십시오.
Sean Middleditch

21

이름으로 OpenGL은 그래픽 라이브러리입니다. 3d를 염두에두고 개발되었지만 라이브러리에는 3d를 사용할 하드 코딩 된 가정이 없습니다. 또한 3D 기능 덕분에 엄격하게 2D 방식으로 수행하기 어려운 몇 가지 일이 사소합니다. 예 :

  • 3D 좌표 깊이 버퍼를 사용하여 Z 정렬이 간소화됩니다 (투명도를 조심하십시오).
  • 해상도와 무관 한 텍스처 쿼드를 사용하므로 스프라이트 회전 및 스케일링은 기본적으로 무료입니다.
  • OpenGL 2.0 지원 그래픽 카드로 자신을 제한하려는 경우 셰이더를 활용하여 특수 효과 (흐림 효과, 입자 효과, 이미지 조작, 색상 대체)를 크게 단순화 할 수 있습니다. CPU 쪽보다 훨씬 빠릅니다.

이것은 내 머리 꼭대기에서 오는 몇 가지 장점 일뿐입니다. 다른 몇 가지가 있다고 생각합니다.


3
OpenGL 2.0 (또는 그 이상)을 지원하는 그래픽 카드로 제한하십시오. OpenGL 2.0은 2004 년에 출시되었지만 상당히 구식입니다.
Slicedpan

@Slicedpan, 불행히도 일부 랩톱 / 넷북에는 여전히 GL 1.4 최대 지원을 제공하는 인텔 카드가 제공됩니다.
Kornel Kisielewicz

16

OpenGL은 3D API이지만 2D 게임을 만드는 데 계속 사용할 수 있습니다. 데이터를 평면에 금지하는 등의 다양한 기술을 통해 3D로 2D 환경을 위조 할 수 있습니다.

그러나 실제 API에서는이를 명백한 방식으로 지원하는 데 제한이 있습니다 (예 : "2D 모드 켜기"기능은 없습니다). 시뮬레이션하는 방법 (온라인으로 많은 자습서에서 찾을 수 있음)은 실제로 후드에서 사용되는 3D 파이프 라인에 대한 이해가 없으면 완전히 이해하기 어려울 수 있습니다.

OpenGL을 한동안 살펴본 것처럼 들리므로 아마도 이러한 기본 사항을 알 수있을 것입니다. 그러나 흔들리는 느낌이들 경우 cocos2d 와 같은 OpenGL 위에 빌드 된 2D 라이브러리를 사용하여 게임을 시작할 수 있습니다 . 2D API가 일반적으로 어떻게 보이는지에 대한 경험을 제공하고 하드웨어 가속 3D 백엔드의 이점을 얻을 수 있습니다.



4

SDL 또는 SFML 과 같은 많은 2D 그래픽 라이브러리 는 OpenGL 하드웨어 가속을 사용합니다. 이를 통해 OpenGL의 성능 이점을 얻을 수 있지만 훨씬 간단한 API 뒤에있는 불쾌한 저수준 세부 정보를 추상화합니다.


0

나는 OpenGl 프로그래밍에 많은 경험을 가지고 있으며 그것이 고통 스럽다고 말할 수있다. 과거에 프로그래밍을 시작했을 때 BlitzBasic과 같은 간단한 환경에서 생산성이 높았습니다. 그런 다음 C ++ 및 OpenGl을 배우면서 다음 단계로 넘어 가기 시작했습니다. 그리고 좋은 선생님이나 사람들이 없어도 영구적으로 검은 화면이 나옵니다. 가장 큰 문제는 OpenGl의 상태 지옥입니다. OpenGL의 상태를 변경하기 위해 교환 할 수있는 수많은 스위치가 있습니다. 그리고 일부 스위치는 다른 스위치에 의존합니다. 예를 들어 glGet (GL_TEXTURE_BINDING_2D)은 glGet (GL_ACTIVE_TEXTURE)에 따라 다릅니다. 그리고 어떤 상태가 다른 상태가 가장 좋지 않은지에 따라 문서화됩니다. 텍스처 로딩과 같은 많은 작업은이 상태를 변경해야하며, 이로 인해 종종 이전 상태가 필요한 다른 코드가 손상 될 수 있습니다. 그런 다음 OpenGl이 구현 종속 동작으로 발생하므로 프로그램이 컴퓨터에서 실행되지만 다른 컴퓨터에서는 검은 색으로 표시됩니다. 여기서 당신이 할 수있는 것은 10000 줄의 코드에서 무엇이 잘못되었는지 추측하는 것입니다. 따라서 좌절감을 좋아한다면 OpenGl을 2D로 사용하십시오. 다른 모든 사람들에게 필요하지 않으면하지 마십시오. OpenGl에서 생산성을 얻을 수 있지만 많은 시간과 신경이 필요합니다. 아마 당신이 보내고 싶은 것보다 더 많이. OpenGl에서 생산성을 얻을 수 있지만 많은 시간과 신경이 필요합니다. 아마 당신이 보내고 싶은 것보다 더 많이. OpenGl에서 생산성을 얻을 수 있지만 많은 시간과 신경이 필요합니다. 아마 당신이 보내고 싶은 것보다 더 많이.


-2

Unity3D는 OpenGL을 사용하며 2D 및 2.5D 플랫 포머에 사용합니다. Unity3D는 기본적으로 3D 게임 엔진이지만 2D 및 2.5D 게임에도 사용됩니다. x, y, z 평면을 가질 수 있고 해당 평면의 2 개로 만 이동 또는 회전을 제한하여 본질적으로 3D 세계에서 2D 분위기를 만듭니다.


내 첫 다운 보트. gamedev도 증오를 가지고있어 기쁘다.
아폴로 소프트웨어

1
실제 사례를 통해 요점을 설명하는 것이 싫은 것 같습니다. 매우 전문적입니다.
아폴로 소프트웨어

7
Amit, downvotes는 "haters"를 나타내지 않습니다. Downvotes는 커뮤니티가 질문과 답변에 대한 의견을 전달할 수있는 방법입니다. 개인적인 것이 아니므로 그렇게하지 마십시오. 귀하는 피드백없이 답변을 개선하는 방법을 모르기 때문에, 다운 보터가 다운 보트의 이유에 대해 언급해야한다는 데 동의합니다. 내가 왜 다운 투트되었다고 생각하는지 알려 드리겠습니다. 한 개인이 2D 게임에 OpenGL을 사용한다고해서 전체적으로 적절한 것은 아닙니다. 또한 적절한 지에 대한 이유를 제시해야합니다 .
MichaelHouse

2
예, 왜 사람들이 downvoting하고 있는지 잘 모르겠습니다. "OpenGL 사용"비트는 "필요한 플랫폼에서 OpenGL 사용"(이는 iOS / Anrdoid / OSX / Linux 이외의 모든 곳에서 Direct3D 또는 콘솔 특정 API 사용)으로 명확하게 설명해야하지만 수정보다 더 명확합니다.
Sean Middleditch

1
필자 자신을 공감하지는 않았지만이 답변이 부적절한 또 다른 이유는 원시 OpenGL이 아닌 OpenGL 기반 엔진을 사용하고 있기 때문에 크게 변화합니다.
w4etwetewtwet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.