mirror of https://github.com/buggins/dlangui.git
3d scene, continue development
This commit is contained in:
parent
cbd055d054
commit
3c371caa5a
|
@ -3,6 +3,8 @@ module d3d;
|
||||||
import dlangui;
|
import dlangui;
|
||||||
import dlangui.graphics.scene.scene3d;
|
import dlangui.graphics.scene.scene3d;
|
||||||
import dlangui.graphics.scene.camera;
|
import dlangui.graphics.scene.camera;
|
||||||
|
import dlangui.graphics.scene.mesh;
|
||||||
|
import dlangui.graphics.scene.material;
|
||||||
|
|
||||||
mixin APP_ENTRY_POINT;
|
mixin APP_ENTRY_POINT;
|
||||||
|
|
||||||
|
@ -77,6 +79,7 @@ extern (C) int UIAppMain(string[] args) {
|
||||||
cam.translation = vec3(0, 0, -5);
|
cam.translation = vec3(0, 0, -5);
|
||||||
scene.activeCamera = cam;
|
scene.activeCamera = cam;
|
||||||
mat4 camMatrix = scene.viewProjectionMatrix;
|
mat4 camMatrix = scene.viewProjectionMatrix;
|
||||||
|
MeshPart part = new MeshPart();
|
||||||
|
|
||||||
// show window
|
// show window
|
||||||
window.show();
|
window.show();
|
||||||
|
|
|
@ -3,11 +3,66 @@ module dlangui.graphics.scene.mesh;
|
||||||
import dlangui.graphics.scene.material;
|
import dlangui.graphics.scene.material;
|
||||||
import dlangui.core.math3d;
|
import dlangui.core.math3d;
|
||||||
|
|
||||||
class Mesh {
|
enum VertexElementType : ubyte {
|
||||||
protected Submesh[] _submeshes;
|
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 _vertexCount;
|
||||||
protected int _triangleCount;
|
protected int _triangleCount;
|
||||||
protected float[] _coords; // [x, y, z]
|
protected float[] _coords; // [x, y, z]
|
||||||
|
@ -78,8 +133,10 @@ class Submesh {
|
||||||
_indexes ~= p3;
|
_indexes ~= p3;
|
||||||
_indexes ~= p4;
|
_indexes ~= p4;
|
||||||
_indexes ~= p1;
|
_indexes ~= p1;
|
||||||
_triangleCount++;
|
_triangleCount += 2;
|
||||||
_triangleCount++;
|
return _triangleCount - 2;
|
||||||
return _triangleCount - 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MeshPart {
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue