2009-10-11 3 views
2

C++, SDL 및 OpenGL을 사용하여 (간단한) 게임 엔진을 만들려고하고 있지만 다음 단계를 파악할 수 없습니다. 이 ... 나는 지금까지 무엇을 가지고게임 엔진 제작 중단

밀어 팝 할 수 있습니다 게임 상태의 스택 장면을 렌더링 주요 게임 루프

장면 렌더링을 제어하는 ​​엔진 객체

각 주에는 액터 모음이 있으며 각 액터에는 삼각형 모음이 있습니다. 장면 렌더러가 뷰 프로젝션 매트릭스를 성공적으로 설정합니다.

액터 위치를 저장하는 방법 또는 렌더링 대기열을 만드는 방법과 관련하여 확실하지 않습니다.

불투명 한 폴리곤을 앞뒤로 그리고 그 다음 앞뒤로 투명한 폴리곤을 그리는 렌더링 대기열을 만드는 것이 효율적이라는 것을 읽었습니다. 이 때문에 내 액터는 장면 렌더러 객체의 "queueTriangle"메서드를 호출합니다. 장면 렌더러 객체는 각 액터 삼각형에 대한 포인터를 저장 한 다음 위치에 따라 정렬 한 다음 렌더링합니다.

내가 직면하고있는 문제는 삼각형이 세계 좌표계에서 그 위치를 알아야한다는 것입니다. 그러나 glTranslatef와 glRotatef를 사용하면이 좌표를 알 수 없습니다!

제발 누군가 제발, 제발 솔루션을 제공하거나 제발이 문제를 해결하는 방법에 대한 (간단한) 가이드로 연결하십시오.

고마워요!

답변

1

'queueTriangle'호출이 나에게 소리가 들리며 매우 비효율적입니다. 현대 엔진은 한 번에 수천 개의 삼각형을 사용하는 경우가 많으므로 일반적으로 단일 삼각형 수준에서 작업하는 것은 거의 없습니다. 그리고이 순서를 수행하기 위해 텍스처를 많이 변경했다면 그것은 더욱 심각합니다.

더 간단한 방법을 권장합니다. 개별 삼각형의 위치가 아닌 월드 공간에서 액터 위치를 정렬하고 액터를 앞뒤로 정렬하여 불투명 한 폴리곤을 훨씬 덜 엄격한 순서로 그릴 수 있습니다. 시각. 투명/반투명 폴리곤은 미리 곱셈 된 알파를 사용하지 않는다면 백 투 프런트 방식이 필요하지만 그 외 모든 것은 더 간단하고 빠릅니다.

+0

실제로 위의 불투명 한 조언은 쉐이더/상수/텍스처/등을 전환하는 것이 초기 Z 테스트에서 실패한 다각형보다 훨씬 비싸기 때문에 그래픽 카드 제조업체가 권장하는 것입니다. – Goz

+0

예. overdraw를 줄이는 것은 좋지만 많은 국가 변화를 희생 시키지는 않습니다. – Kylotan

2

카메라 클래스를 작성하고 함수를 사용하여 세계에서 이동/회전하면 내부 쿼터니언에서 얻은 매트릭스를 사용하여 정점을 변형 할 수 있으므로 카메라 공간에서 위치를 얻을 수 있으므로 정렬 할 수 있습니다 뒤에서 앞으로 삼각형.