안녕하세요 게임 개발 SE!
간단 하고 매우 가벼운 게임 엔진 을 만들 겠다는 희망으로 OpenGL을 탐색하고 있습니다. 나는이 프로젝트를 결국에는 약간의 돈을 벌 수있는 학습 경험으로 보지만 어느 쪽이든 재미있을 것입니다.
지금까지 GLFW를 사용하여 몇 가지 기본 I / O, 창 (아주 멋진 F11 전체 화면 키 포함) 및 OpenGL 컨텍스트를 얻었습니다. 또한 Windows를 사용하고 있고 모든 OpenGL 3.0 이상을 사용하고 싶기 때문에 GLEW를 사용하여 나머지 OpenGL 확장을 노출했습니다.
장면 그래프가 나타납니다. 요컨대, 나는 내 자신의 롤을하고 싶습니다. 이 결정은 OSG를보고 장면 그래프의 개념이 어떻게 왜곡되고 구부러지고 깨지는 지에 대한 몇 가지 기사를 읽은 후에 이루어졌습니다. 그러한 기사 중 하나 는 장면 그래프가 어떻게 발전했는지 설명했습니다 ...
그런 다음 장식품 중 일부는 멋진 육즙이 많은 스테이크이고 일부는 전체 살아있는 소라는 것을 제외하고는 크리스마스 트리에 장식품을 매달는 것과 같이이 여분의 모든 것을 추가했습니다.
유추에 따르면, 스테이크, 장면 코드가 필요한 고기, 여분의 코드 더미 또는 전체 소를 묶을 필요가 없습니다.
그래서 그것을 염두에두고, 장면 그래프가 무엇인지, 간단한 장면 그래프를 어떻게 구현 해야하는지 궁금해합니다. 여기까지 내가 가진 것입니다 ...
하나의 부모, n- 자식 트리 또는 DAG ...
- 게임 오브젝트 변형 (위치, 회전, 스케일)을 추적해야합니다.
- 최적화를 위해 렌더링 상태를 유지해야합니다
- 뷰 프러스 텀 내에 있지 않은 오브젝트 컬링 수단을 제공해야합니다.
다음과 같은 속성으로 ...
모든 노드는 렌더링 할 수없는 것으로 취급해야합니다 (렌더링하지 않더라도).
- 모두 cull (), state () 및 draw () 메서드가 있어야합니다 (표시되지 않는 경우 0을 반환 함)
- cull ()은 모든 자식에서 cull ()을 재귀 적으로 호출하여 전체 노드와 모든 자식에 대해 완전한 컬 메시를 생성합니다. 또 다른 방법 인 hasChanged ()를 사용하면 소위 스태틱 메시가 각 프레임마다 컬링 지오메트리를 계산할 필요가 없습니다. 하위 트리의 노드가 변경된 경우 루트까지 모든 지오메트리가 다시 작성되도록 작동합니다.
렌더 상태는 간단한 열거로 유지되며 각 노드는이 열거에서 필요한 OpenGL 상태 세트를 선택하며 해당 노드에서 draw ()가 호출되기 전에 해당 상태가 설정됩니다. 이를 통해 일괄 처리가 가능하며 주어진 상태 세트의 모든 노드가 함께 렌더링 된 후 다음 상태 세트가 설정됩니다.
노드는 지오메트리 / 쉐이더 / 텍스처 데이터를 직접 보유해서는 안되며 대신 노드는 공유 객체 (아마도 리소스 관리자와 같은 단일 객체로 관리)를 가리켜 야합니다.
장면 그래프 같은 상황 있도록 (아마도 프록시 노드를 사용하여) 다른 장면 그래프를 참조 할 수 있어야 이를 따라서 모델 멀티 메쉬 복잡한 / 데이터의 톤을 추가하지 않고 장면 그래프의 주위에 복사 할 개체 수.
현재 디자인에 대한 귀중한 피드백을 받기를 바랍니다. 기능이 없습니까? 훨씬 더 좋은 방법 / 디자인 패턴이 있습니까? 다소 단순한 3D 게임을 위해이 디자인에 포함되어야 할 더 큰 개념이 누락 되었습니까? 기타.
고마워