2009년 03월 24일
Anatomy of Nebula3 - Terms
Anatomy of Nebula3 - Terms
Nebula3는 Nebula2에 비해서 훨씬 더 많은 클래스들로 구성이 되어 있다. (하지만 실제 코드의 라인수는 훨씬 적다.) 또 새로운 클래스들이 많기 때문에 다소 생소한 부분도 많다. 이들 클래스들 간의 관계를 잘 살펴서 이해하면 전체적인 구조를 쉽게 파악할 수있다. 이 글에서는 이들 클래스들 중에서 비슷한 이름으로 헷갈리기 쉽거나 파악이 모호한 것들의 관계에 대해서 설명한다.
1. Render Layer
여기에서는 Nebula3의 세가지 레이어 중에서 Render Layer에 속하는 클래스들에 대해서 설명한다.DisplayDevice와 RenderDevice의 구분
디스플레이 디바이스는 윈도우의 창, 렌더 디바이스는 렌더링 드라이버와 관련한 것으로 win32에서는 Direct3D 디바이스를 캡슐화한 것이다. 렌더 디바이스는 자신의 백버퍼의 내요을 디스플레이 디바이스에 출력하는 처리를 한다.
Stage와 View의 구분
stage는 전체 장면을 구성하는 모든 엔티티들을 포함하는 것으로 무대의 의미로 이해할 수 있다. view는 현재 카메라로 컬링된 장면을포함한다. 즉, view는 stage에서 컬링을 통해서 현재 카메라를 통해서 보이는 엔티티들, 다시 이야기하면 렌더링해야 하는객체들을 포함한다.
Model과 Resource의 구분
Model은 Resouce 클래스를 상속하는 클래스로 Resoucre의 하위 개념이다. 즉, 리소스의 하나로 생각할 수 있는데 리소스중에서도 렌더링과 관련한 리소스가 바로 Model이다. Model은 렌더링할 객체를 위한 템플릿으로 사용된다.namespace Models { class Model : public Resources::Resource { ... }; } |
Model과 ModelNode의 구분
Model은 렌더링할 객체를 위한 템플릿으로 파일 등으로 리소스를 읽으면 하나 이상의 ModelNode를 가진다. 파일로부터 리소스를읽어 들였다고 바로 렌더링하는 것이 아니라 Model은 ModelInstance를 생성하고 생성한 ModelInstance를 렌더링에 사용한다.
ModelNode와 같이 -Node의 이름을 가지는 클래스들은 장면 구성을 위한 변환(Transform) 정보를 가지며, 장면 처리를 위해서 계층(Hierarchy)을 구성할 수 있다.
ModelNode과 ModelNodeIntance의 구분
Nebula에서의 Node는 장면(Scene) 트리를 구성하는 트리의 노드를 의미한다. 즉, 렌더링과 관련되는 것이다.
ModelNode - 리소스의 관점, 직접 렌더링하지 않는다. 읽어 들인 Node를 렌더링하기 위해서는 Instance를 생성해야 한다.
읽어 들인 Model을 렌더링하기 위해서는 적어도 하나 이상의 ModelInstance가 필요한데 이 ModelInstance는 Model 클래스 객체가 생성한다.
Ptr<ModelInstance> modelInstance = model->CreateInstance(); |
ModelNodeInstance는 렌더링 인스턴스로 매 프레임마다 갱신해야 하는 처리는 멤버 함수 Update() 함수 내에서 처리한다.
namespace Model { class ModelNodeInstance : : public Core::RefCounted { ... // 매 프레임마다 호출된다. virtual void Update(); ... }; } |
(계속...)
# by | 2009/03/24 16:24 | Nebula3 | 트랙백 | 덧글(0)
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]