3d scene, continue development

This commit is contained in:
Vadim Lopatin 2016-01-15 16:29:06 +03:00
parent cbd055d054
commit 3c371caa5a
2 changed files with 66 additions and 6 deletions

View File

@ -3,6 +3,8 @@ module d3d;
import dlangui;
import dlangui.graphics.scene.scene3d;
import dlangui.graphics.scene.camera;
import dlangui.graphics.scene.mesh;
import dlangui.graphics.scene.material;
mixin APP_ENTRY_POINT;
@ -77,6 +79,7 @@ extern (C) int UIAppMain(string[] args) {
cam.translation = vec3(0, 0, -5);
scene.activeCamera = cam;
mat4 camMatrix = scene.viewProjectionMatrix;
MeshPart part = new MeshPart();
// show window
window.show();

View File

@ -3,11 +3,66 @@ module dlangui.graphics.scene.mesh;
import dlangui.graphics.scene.material;
import dlangui.core.math3d;
class Mesh {
protected Submesh[] _submeshes;
enum VertexElementType : ubyte {
POSITION = 1,
NORMAL,
COLOR,
TEXCOORD0,
TEXCOORD1,
TEXCOORD2,
TEXCOORD3,
TEXCOORD4,
TEXCOORD5,
TEXCOORD6,
TEXCOORD7,
}
class Submesh {
struct VertexElement {
private VertexElementType _type;
private ubyte _size;
@property VertexElementType type() const { return _type; }
@property ubyte size() const { return _size; }
this(VertexElementType type, ubyte size) {
_type = type;
_size = size;
}
}
/// Vertex format elements list
struct VertexFormat {
private VertexElement[] _elements;
private int _vertexSize;
/// make using element list
this(inout VertexElement[] elems...) {
_elements = elems.dup;
foreach(elem; elems)
_vertexSize += elem.size * float.sizeof;
}
/// get number of elements
@property int length() const {
return cast(int)_elements.length;
}
/// get element by index
VertexElement opIndex(int index) const {
return _elements[index];
}
/// returns vertex size in bytes for format
@property int vertexSize() const {
return _vertexSize;
}
/// compare
bool opEquals(immutable ref VertexFormat fmt) {
if (_vertexSize != fmt._vertexSize)
return false;
for(int i = 0; i < _elements.length; i++)
if (_elements[i] != fmt._elements[i])
return false;
return true;
}
}
class Mesh {
protected MeshPart[] _parts;
protected int _vertexCount;
protected int _triangleCount;
protected float[] _coords; // [x, y, z]
@ -78,8 +133,10 @@ class Submesh {
_indexes ~= p3;
_indexes ~= p4;
_indexes ~= p1;
_triangleCount++;
_triangleCount++;
return _triangleCount - 1;
_triangleCount += 2;
return _triangleCount - 2;
}
}
class MeshPart {
}