From 576d8dbb3bac7cb868754762f22e946c67d85c31 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Wed, 8 Apr 2015 12:02:16 +0300 Subject: [PATCH] 3d scene, continue --- src/dlangui/graphics/scene/camera.d | 26 ++++++++++++++++++++++++++ src/dlangui/graphics/scene/node.d | 20 ++++++++++++++++++++ src/dlangui/graphics/scene/scene3d.d | 1 + 3 files changed, 47 insertions(+) diff --git a/src/dlangui/graphics/scene/camera.d b/src/dlangui/graphics/scene/camera.d index 8ecadb58..90944b76 100644 --- a/src/dlangui/graphics/scene/camera.d +++ b/src/dlangui/graphics/scene/camera.d @@ -2,6 +2,32 @@ module dlangui.graphics.scene.camera; import dlangui.graphics.scene.node; +import gl3n.linalg; +import gl3n.math; + /// Camera class Camera : Node3d { + + protected mat4 _projectionMatrix; + + /// get projection matrix + @property ref mat4 projectionMatrix() { + return _projectionMatrix; + } + + /// set custom projection matrix + @property void projectionMatrix(mat4 v) { + _projectionMatrix = v; + } + + /// set orthographic projection + void setOrtho(float left, float right, float bottom, float top, float near, float far) { + _projectionMatrix = mat4.orthographic(left, right, bottom, top, near, far); + } + + /// set perspective projection + void setPerspective(float width, float height, float fov, float near, float far) { + _projectionMatrix = mat4.perspective(width, height, fov, near, far); + } + } diff --git a/src/dlangui/graphics/scene/node.d b/src/dlangui/graphics/scene/node.d index 161ce222..71deed80 100644 --- a/src/dlangui/graphics/scene/node.d +++ b/src/dlangui/graphics/scene/node.d @@ -4,6 +4,7 @@ import gl3n.linalg; import gl3n.math; import dlangui.graphics.scene.transform; +import dlangui.core.collections; /// 3D scene node class Node3d : Transform { @@ -12,6 +13,25 @@ class Node3d : Transform { protected mat4 _worldMatrix; + protected ObjectList!Node3d _children; + + /// returns child node count + @property int childCount() { + return _children.count; + } + /// returns child node by index + Node3d child(int index) { + return _children[index]; + } + /// add child node + void addChild(Node3d node) { + _children.add(node); + node.parent = this; + } + /// removes and destroys child node by index + void removeChild(int index) { + destroy(_children.remove(index)); + } /// parent node @property Node3d parent() { diff --git a/src/dlangui/graphics/scene/scene3d.d b/src/dlangui/graphics/scene/scene3d.d index e8fb61c6..ce45022d 100644 --- a/src/dlangui/graphics/scene/scene3d.d +++ b/src/dlangui/graphics/scene/scene3d.d @@ -12,5 +12,6 @@ class Scene3d : Node3d { @property vec3 ambientColor() { return _ambientColor; } @property void ambientColor(const ref vec3 v) { _ambientColor = v; } + }