태그 보관물: 2d

2d

OpenGL은 2D 게임에 적합합니까? 싶습니다. 그러나 더 쉬운 소개를

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

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



답변

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

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

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

예를 들면 :

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

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


답변

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

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

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


답변

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

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

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


답변

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


답변

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


답변

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


답변