mirror of https://github.com/buggins/dlangui.git
Move cube mesh creation to Mesh static method - #183
This commit is contained in:
parent
5107982579
commit
9661eb12dd
|
@ -99,56 +99,7 @@ class UiWidget : VerticalLayout {
|
|||
|
||||
_scene.activeCamera = _cam;
|
||||
|
||||
VertexFormat vfmt = VertexFormat(VertexElementType.POSITION, VertexElementType.COLOR, VertexElementType.TEXCOORD0);
|
||||
_mesh = new Mesh(vfmt);
|
||||
// square
|
||||
|
||||
float x0 = 0;
|
||||
float y0 = 0;
|
||||
float z0 = -0.9;
|
||||
|
||||
addCube(x0, y0, z0, 1);
|
||||
//_mesh.addVertex([x0-1,y0-1,z0+0, 1,0,1,1, 0,0]);
|
||||
//_mesh.addVertex([x0-1,y0+1,z0+0, 1,1,1,1, 1,0]);
|
||||
//_mesh.addVertex([x0+1,y0+1,z0+0, 0,1,1,1, 1,1]);
|
||||
//_mesh.addVertex([x0+1,y0-1,z0+0, 1,1,0,1, 0,1]);
|
||||
//_mesh.addPart(PrimitiveType.triangles, [0, 1, 2, 2, 3, 0]);
|
||||
|
||||
}
|
||||
|
||||
void addCube(float x0, float y0, float z0, float d) {
|
||||
auto p000 = [x0-d, y0-d, z0-d];
|
||||
auto p100 = [x0+d, y0-d, z0-d];
|
||||
auto p010 = [x0-d, y0+d, z0-d];
|
||||
auto p110 = [x0+d, y0+d, z0-d];
|
||||
auto p001 = [x0-d, y0-d, z0+d];
|
||||
auto p101 = [x0+d, y0-d, z0+d];
|
||||
auto p011 = [x0-d, y0+d, z0+d];
|
||||
auto p111 = [x0+d, y0+d, z0+d];
|
||||
addQuad(p000 ~ p010 ~ p110 ~ p100); // front face
|
||||
addQuad(p101 ~ p111 ~ p011 ~ p001); // back face
|
||||
addQuad(p100 ~ p110 ~ p111 ~ p101); // right face
|
||||
addQuad(p001 ~ p011 ~ p010 ~ p000); // left face
|
||||
addQuad(p010 ~ p011 ~ p111 ~ p110); // top face
|
||||
addQuad(p001 ~ p000 ~ p100 ~ p101); // bottom face
|
||||
}
|
||||
|
||||
void addQuad(float[] vertexes) {
|
||||
static float[] txcoords = [0, 0, 1, 0, 1, 1, 0, 1];
|
||||
ushort startVertex = cast(ushort)_mesh.vertexCount;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
_mesh.addVertex([
|
||||
vertexes[i*3 + 0], vertexes[i*3 + 1], vertexes[i*3 + 2],
|
||||
1,1,1,1,
|
||||
txcoords[i*2 + 0], txcoords[i*2 + 1]]);
|
||||
}
|
||||
_mesh.addPart(PrimitiveType.triangles, [
|
||||
cast(ushort)(startVertex + 0),
|
||||
cast(ushort)(startVertex + 1),
|
||||
cast(ushort)(startVertex + 2),
|
||||
cast(ushort)(startVertex + 2),
|
||||
cast(ushort)(startVertex + 3),
|
||||
cast(ushort)(startVertex + 0)]);
|
||||
_mesh = Mesh.createCubeMesh(vec3(0, 0, -0.9));
|
||||
}
|
||||
|
||||
/// returns true is widget is being animated - need to call animate() and redraw
|
||||
|
|
|
@ -287,6 +287,41 @@ class Mesh {
|
|||
_vertexBuffer = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void addQuad(ref vec3 v0, ref vec3 v1, ref vec3 v2, ref vec3 v3, ref vec4 color) {
|
||||
ushort startVertex = cast(ushort)vertexCount;
|
||||
addVertex([v0.x, v0.y, v0.z, color.r, color.g, color.b, color.a, 0, 0]);
|
||||
addVertex([v1.x, v1.y, v1.z, color.r, color.g, color.b, color.a, 1, 0]);
|
||||
addVertex([v2.x, v2.y, v2.z, color.r, color.g, color.b, color.a, 1, 1]);
|
||||
addVertex([v3.x, v3.y, v3.z, color.r, color.g, color.b, color.a, 0, 1]);
|
||||
addPart(PrimitiveType.triangles, [
|
||||
cast(ushort)(startVertex + 0),
|
||||
cast(ushort)(startVertex + 1),
|
||||
cast(ushort)(startVertex + 2),
|
||||
cast(ushort)(startVertex + 2),
|
||||
cast(ushort)(startVertex + 3),
|
||||
cast(ushort)(startVertex + 0)]);
|
||||
}
|
||||
|
||||
static Mesh createCubeMesh(vec3 pos, float d=1, vec4 color = vec4(1,1,1,1)) {
|
||||
Mesh mesh = new Mesh(VertexFormat(VertexElementType.POSITION, VertexElementType.COLOR, VertexElementType.TEXCOORD0));
|
||||
auto p000 = vec3(pos.x-d, pos.y-d, pos.z-d);
|
||||
auto p100 = vec3(pos.x+d, pos.y-d, pos.z-d);
|
||||
auto p010 = vec3(pos.x-d, pos.y+d, pos.z-d);
|
||||
auto p110 = vec3(pos.x+d, pos.y+d, pos.z-d);
|
||||
auto p001 = vec3(pos.x-d, pos.y-d, pos.z+d);
|
||||
auto p101 = vec3(pos.x+d, pos.y-d, pos.z+d);
|
||||
auto p011 = vec3(pos.x-d, pos.y+d, pos.z+d);
|
||||
auto p111 = vec3(pos.x+d, pos.y+d, pos.z+d);
|
||||
mesh.addQuad(p000, p010, p110, p100, color); // front face
|
||||
mesh.addQuad(p101, p111, p011, p001, color); // back face
|
||||
mesh.addQuad(p100, p110, p111, p101, color); // right face
|
||||
mesh.addQuad(p001, p011, p010, p000, color); // left face
|
||||
mesh.addQuad(p010, p011, p111, p110, color); // top face
|
||||
mesh.addQuad(p001, p000, p100, p101, color); // bottom face
|
||||
return mesh;
|
||||
}
|
||||
}
|
||||
|
||||
/// Mesh part - set of vertex indexes with graphics primitive type
|
||||
|
|
Loading…
Reference in New Issue