新增renderer渲染器 用于控制场景如何渲染

This commit is contained in:
yhh
2020-06-18 16:35:51 +08:00
parent 915056203d
commit feaac83ee7
15 changed files with 459 additions and 25 deletions

View File

@@ -0,0 +1,12 @@
///<reference path="./Renderer.ts" />
class DefaultRenderer extends Renderer {
public render(scene: Scene) {
let cam = this.camera ? this.camera : scene.camera;
for (let i = 0; i < scene.renderableComponents.count; i++){
let renderable = scene.renderableComponents.buffer[i];
if (renderable.enabled && renderable.isVisibleFromCamera(cam))
this.renderAfterStateCheck(renderable, cam);
}
}
}

View File

@@ -0,0 +1,7 @@
interface IRenderable {
bounds: Rectangle;
enabled: boolean;
isVisible: boolean;
isVisibleFromCamera(camera: Camera);
render(camera: Camera);
}

View File

@@ -0,0 +1,32 @@
/**
* 渲染器被添加到场景中并处理所有对RenderableComponent的实际调用
*/
abstract class Renderer {
/**
* 渲染器用于渲染的摄像机(实际上是用于剔除的变换矩阵和边界)
* 不是必须的
* Renderer子类可以选择调用beginRender时使用的摄像头
*/
public camera: Camera;
/**
* 当渲染器被添加到场景时调用
* @param scene
*/
public onAddedToScene(scene: Scene){}
/**
*
* @param scene
*/
public abstract render(scene: Scene);
/**
*
* @param renderable
* @param cam
*/
protected renderAfterStateCheck(renderable: IRenderable, cam: Camera){
renderable.render(cam);
}
}

View File

@@ -0,0 +1,7 @@
/**
* 渲染器使用自己的不移动的摄像机进行渲染。
*/
class ScreenSpaceRenderer extends Renderer {
public render(scene: Scene) {
}
}