OpenGL로 게임 엔진을 처음부터 작성하기


15

학습 목적을 위해 게임 엔진을 처음부터 새로 작성하고 싶습니다. 전제 조건은 무엇이며 어떻게해야하는지, 어떤 프로그래밍 언어 및 권장 사항이 있습니까? 또한 좋은 기사와 책이 있다면 좋을 것입니다. 미리 감사드립니다!

내 프로그래밍 언어 및 도구는 다음과 같습니다.

  • C / C ++는 C 만 사용하는 것이 좋습니까?
  • 파이썬
  • OpenGL
  • 힘내
  • GDB

내가 배우고 싶은 것 :

  • 핵심 게임 엔진
  • 렌더링 / 그래픽
  • 게임 플레이 / 규칙
  • 입력 (키보드 / 마우스 / 컨트롤러 등)

렌더링 / 그래픽에서 :

  • 3D
  • 농담
  • 조명
  • 텍스처링

두 가지 요점 :이 질문은 너무 광범위합니다. 원하는 기능, 지원하려는 플랫폼, 탐색하려는 패러다임, 스크립팅 언어 (있는 경우)에 대한 책임 정도 및 기타 여러 가지 요소 m 계속 나열하지 않아도됩니다.
Tetrad

8
두 번째 : 다른 사람들이 게임없이 엔진을 만드는 데 집중해서는 안된다는 일반적인 통념이 있습니다. 게임이없는 엔진은 엔진이 유용 하다는 것을 증명할 수 없음을 의미 합니다 . 좋은 엔진을 사용하려면 사람들이 개 사료를 그대로 먹어야합니다. (A)는 일반적으로 연결된이 인수의 이상이 여기에가는 블로그 : scientificninja.com/blog/write-games-not-engines
테트라

2
^뿐만 아니라 기능 요구 사항에 동기를 부여하기 위해 게임없이 엔진을 작성하면 기능이 약해지고 API 디자인이 잘못됩니다. 게임 요구 사항에 따라 힌트가 필요한 것을 알기 전까지는 엔진에 유용한 정보를 넣지 못할 수 있습니다. 마찬가지로, 엔진을 사용하여 프로그래밍하지 않아도된다면, 일부 결정이 정말 어수선해질 수 있습니다.
ChrisE

1
업체 정보에 요점이 없습니다. C / C ++과 Python을 알고 있다는 사실은 우리에게 도움이되지만 왜 버전 제어와 디버거를 사용할 수 있다고 나열합니까?
공산주의 오리

2
@TheCommunistDuck : 이봐, 일부 개발자보다 낫다. :)
ChrisE

답변:


11

거의 모든 렌더링 방법을 사용하여 거의 모든 언어로 게임 엔진을 작성할 수 있습니다. 콘솔 출력을 사용하여 게임 엔진을 bash로 작성할 수 있습니다.

따라서 본인의 엔진을 작성하면서 정확히 배우고 싶은 것을 정의하는 것이 가장 좋습니다. 게임 개발에는 많은 "필드"가 있습니다.

  • 핵심 게임 엔진

  • 렌더링 / 그래픽

  • 일체 포함

  • 네트워킹

  • 게임 플레이 / 규칙

  • 소리

  • 입력 (키보드 / 마우스 / 컨트롤러 등)

거기에서 하위 주제를 가질 수도 있습니다. 렌더링 / 그래픽

  • 2d 또는 3d?

  • 모델링

  • 농담

  • 조명

  • 텍스처링

  • GUI / Huds / 인터페이스.

이 하위 하위 주제 중 하나만 여러 시간 (또는 몇 년)의 연구를 먹을 수 있습니다!

따라서 먼저 배우고 싶은 것을 정의하십시오. 간단하게 시작하십시오.

어떤 언어는 특정 작업에 더 적합하지만 원하는 언어를 사용하십시오. 예를 들어 핵심 엔진과 렌더링은 아마도 C / C ++와 같은 "낮은"수준의 언어로 수행하는 것이 가장 좋습니다 (성능이 필요한 경우). 그러나 AI 나 게임 규칙과 같은 것은 고급 언어로 더 잘 수행 될 수 있습니다. 아무것도 당신이 섞일 수 없다고 말합니다. C ++로 엔진을 작성하고, C로 렌더링하면 (OpenGL과 잘 작동하므로) LUA를 사용하여 게임 규칙 등을 스크립팅 할 수 있습니다.

예를 들어, Slick2D라는 게임 엔진이 있습니다. Java로 작성되었으며 공개 소스입니다. 간단한 2D 엔진으로 작성되어 실제로 설계되었습니다. 게임 루프, 게임 상태 관리 등과 같은 기본적인 개념을 배울 수 있습니다.

C / C ++에 익숙하다면; SDL / OpenGL을 살펴볼 것을 제안합니다. 입력, 소리, 창 만들기 등과 같은 하우스 키핑을 처리하고 다른 것들에 집중할 수 있습니다.


4
내가 C ++을 배우고 콘솔 게임이 굉장히 즐거웠 던 시절은 ... [새로운 콘솔 프로젝트
Nick Bedford

나는 나의 질문을 업데이트했다, 나에게 많은 훌륭한 자원을 줄 수 있기를 바란다 :)
Wazery

4

SDL + OpenGL은 커스텀 게임 엔진을 시작하기위한 훌륭한 선택입니다.

개인적으로 C ++ 버전의 C ++를 사용하는 것이 가장 효과적이라는 것을 알았습니다. 즉, 나는 예외를 사용하지 않는다는 것을 의미합니다. 그 이유는 두 가지가 있습니다. 가장 중요한 예외는 OpenGL 및 SDL을 사용하여 달성하기가 쉽지 않은 예외 안전 코드가 필요합니다. 그러나 더 중요한 것은이 방법으로 C ABI를 통해 C ++ 객체를 노출하는 것이 매우 쉽습니다. 스크립팅 언어를 믹스로 가져 오면 매우 유용합니다.

나는 당신과 비슷한 보트에 있고 다른 누군가가 관심이있는 경우 블로그 ( immersedcode.org )에서 SDL 및 OpenGL로 내 모험의 일부를 썼습니다 .

일반적인 아키텍처의 경우 두 가지 제안이 있습니다. 3D 엔진을 원한다면 Jason Lander의 "Game Engine Architecture"책을 확인하십시오. 원하는 것이 2D라면 가능한 한 간단하게 디자인을 유지하고 XNA 또는 다른 프로젝트에서 영감을 얻으십시오.

마지막으로, 모든 곳에서 OpenGL을 호출하지 마십시오. 원하는 경우 나중에 데스크톱 OpenGL / OpenGL ES 또는 DirectX 간을 전환 할 수 있도록 호의를 베풀고 두 곳으로 분리하십시오.


0

구현 세부 정보가 총구에 닿지 않는 한 C를 사용하지 마십시오. 그렇지 않으면 C ++을 사용하십시오. C ++는 훨씬 더 유능한 언어를 제공하므로 나중에 해당 기능을 사용하지 않도록 선택할 수 있습니다. 나는 개인적으로 파이썬에 대해 / 아무것도 없다. 나는 그것을 사용한 적이 없다.

DX는 현대적인 객체 지향 접근 방식을 사용하기 때문에 DirectX에 대해 OpenGL을 권장하지 않습니다.이 방법은 훨씬 깨끗하고 이해하기 쉽고 오류가 발생하기 쉽습니다. OpenGL이 제공하는 인터페이스는 비교가 매우 열악합니다.

마지막으로 얻은 것은 많은 사람들로부터 GDB가 완전히 짜증나고 Visual Studio 디버거가 최고라는 것을 들었습니다. 이것은 내 개인적인 경험이 아니므로 약간의 소금으로 가져 가십시오.


4
"OpenGL 대 DX". DirectX가 더 많은 OO라는 사실은 실제로 중요하지 않습니다. 보다 이해하기 쉬운 한 OpenGL (3 이전)은 상당히 간단한 인터페이스와 C 스타일 명령 방식으로 모두 스캔하기 쉬운 인터페이스를 제공합니다. "투영 행렬을 이것으로 설정하십시오. 삼각형을 시작하십시오. 여기에 vert가 있습니다. 여기 vert가 있습니다. 여기 vert가 있습니다. 끝 삼각형이 있습니다." OpenGL API의 1.x 시리즈는 그래픽 프로그래밍에 발을 담그는 데 유용하며 SDL (또는 GLUT ... urg)과 결합하면 30-50 줄의 코드로 앱을 만들 수 있습니다.
ChrisE

2
@ChrisE : 물론입니다. 이라는 것이 extern "C"있으며, 적절하게 사용하면 특히 Python에 대해 C 인터페이스를 작성하는 것이 쉽지 않습니다. 특히 Boost에는 변환기가 존재하여 쉽게 바인딩 할 수 있습니다. C ++ 언어 기능은 어떻습니까? 그들은 대단하다 . C ++의 언어 기능을 더 많이 사용하면 프로젝트의 안정성이 향상되고 코딩 성능이 크게 향상되어 허용 가능한 초소형 성능의 균형을 이룰 수 있습니다. C의 언어 기능은 비교가 심합니다. 예를 들어, 현대 C ++ 컴파일러의 올바른 사용을 수행 할 수 있습니다 보장 할 어떤 메모리 누수를. C에서 그렇게하세요
DeadMG

1
@DeadMG : OOP가 실제로 큰 문제라면 여기에 대한 대답은 C ++이 아닌 Java 또는 C #입니다. 내가 동의하지 않는 것은 C ++ 기능을 사용한다고해서 마술처럼 코드가 더 좋고 빠르거나 안정적이지 않다는 것입니다. 이러한 기능을 사용하는 방법 을 알아야 하며 엔진을 설계하는 것 외에 언어를 배우는 것이 실제로 시간을 잘 활용하고 있습니까? 아니요. 누군가 이것을 처음으로하는 것은 아닙니다. 하루나 이틀 만에 C를 모두 배울 수 있고 언어가 무엇을하고 있는지 궁금해하지 않을 것입니다. 언제 어디서나 유용한 기본 호출 인 OpenGL은 동일한 투명성을 제공합니다.
ChrisE

2
OOP는 고성능 게임 엔진이 아닌 큰 문제가 아닙니다. 물론 유용하지만, 종종 잘못된 추상화입니다. 데이터 흐름, 위치 및 메모리 레이아웃이 양호할수록 좋습니다. 많은 팀이 C ++을 사용하고 있지만 대부분의 C ++ 기능은 사용하지 않습니다. 가능한 한 적은 수의 가상, RTTI, STL / 부스트 없음도 예외는 없습니다. 왜? 여러 플랫폼에서 예측 가능하고 빠른 실행과 작은 코드. 나는 C로 코딩하고 C ++을 사용하는 두 가지 영역, 즉 범위 잠금 및 일반 배열 만 있습니다. 번거로운 IMHO 가치가 없습니다.
void

4
GL과 D3D의 경우 : GL3 / 4 코어에는 매트릭스 스택이없고 속성 스택이 없습니다. GL과 D3D는 모두 동일한 하드웨어 아키텍처에 매핑되지만 많은 시간이 소요됩니다. GL 상태 머신은 약간 번거롭지 만 실제 하드웨어도 마찬가지입니다.
void
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.