mirror of https://github.com/buggins/dlangui.git
3d scene - better scene for testing - #183
This commit is contained in:
parent
9661eb12dd
commit
b8cadad8fb
|
@ -41,11 +41,15 @@ class UiWidget : VerticalLayout {
|
|||
margins: 10
|
||||
padding: 10
|
||||
backgroundImageId: "tx_fabric.tiled"
|
||||
layoutWidth: fill
|
||||
layoutHeight: fill
|
||||
|
||||
VerticalLayout {
|
||||
id: glView
|
||||
margins: 10
|
||||
padding: 10
|
||||
layoutWidth: fill
|
||||
layoutHeight: fill
|
||||
TextWidget { text: "There should be OpenGL animation on background"; textColor: "red"; fontSize: 150%; fontWeight: 800; fontFace: "Arial" }
|
||||
TextWidget { text: "Do you see it? If no, there is some bug in Mesh rendering code..."; fontSize: 120% }
|
||||
HorizontalLayout {
|
||||
|
@ -80,6 +84,7 @@ class UiWidget : VerticalLayout {
|
|||
CheckBox { id: cb2; text: "checkbox 2" }
|
||||
}
|
||||
}
|
||||
VSpacer { layoutWeight: 30 }
|
||||
HorizontalLayout {
|
||||
TextWidget { text: "Some buttons:" }
|
||||
Button { id: btnOk; text: "Ok"; fontSize: 27px }
|
||||
|
@ -99,7 +104,18 @@ class UiWidget : VerticalLayout {
|
|||
|
||||
_scene.activeCamera = _cam;
|
||||
|
||||
_mesh = Mesh.createCubeMesh(vec3(0, 0, -0.9));
|
||||
_mesh = Mesh.createCubeMesh(vec3(0, 0, 0), 0.3f);
|
||||
for (int i = 0; i < 10; i++) {
|
||||
_mesh.addCubeMesh(vec3(0, 0, i * 2 + 1.0f), 0.2f, vec4(i / 12, 1, 1, 1));
|
||||
_mesh.addCubeMesh(vec3(i * 2 + 1.0f, 0, 0), 0.2f, vec4(1, i / 12, 1, 1));
|
||||
_mesh.addCubeMesh(vec3(-i * 2 - 1.0f, 0, 0), 0.2f, vec4(1, i / 12, 1, 1));
|
||||
_mesh.addCubeMesh(vec3(0, i * 2 + 1.0f, 0), 0.2f, vec4(1, 1, i / 12 + 0.1, 1));
|
||||
_mesh.addCubeMesh(vec3(0, -i * 2 - 1.0f, 0), 0.2f, vec4(1, 1, i / 12 + 0.1, 1));
|
||||
_mesh.addCubeMesh(vec3(i * 2 + 1.0f, i * 2 + 1.0f, i * 2 + 1.0f), 0.2f, vec4(i / 12, i / 12, i / 12, 1));
|
||||
_mesh.addCubeMesh(vec3(-i * 2 + 1.0f, i * 2 + 1.0f, i * 2 + 1.0f), 0.2f, vec4(i / 12, i / 12, 1 - i / 12, 1));
|
||||
_mesh.addCubeMesh(vec3( i * 2 + 1.0f, -i * 2 + 1.0f, i * 2 + 1.0f), 0.2f, vec4(i / 12, 1 - i / 12, i / 12, 1));
|
||||
_mesh.addCubeMesh(vec3(-i * 2 - 1.0f, -i * 2 - 1.0f, -i * 2 - 1.0f), 0.2f, vec4(1 - i / 12, i / 12, i / 12, 1));
|
||||
}
|
||||
}
|
||||
|
||||
/// returns true is widget is being animated - need to call animate() and redraw
|
||||
|
@ -134,27 +150,37 @@ class UiWidget : VerticalLayout {
|
|||
Log.e("Invalid texture");
|
||||
return;
|
||||
}
|
||||
_cam.setPerspective(4.0f, 3.0f, 45.0f, 0.1f, 100.0f);
|
||||
_cam.setPerspective(4.0f, 3.0f, 45.0f, 1.1f, 100.0f);
|
||||
mat4 projectionViewModelMatrix;
|
||||
if (true) {
|
||||
// ======== Projection Matrix ==================
|
||||
mat4 projectionMatrix;
|
||||
float aspectRatio = cast(float)rc.width / cast(float)rc.height;
|
||||
projectionMatrix.setPerspective(45.0f, aspectRatio, 0.1f, 100.0f);
|
||||
projectionMatrix.setPerspective(
|
||||
45.0f, //angle
|
||||
aspectRatio, // aspect
|
||||
1.1f, // near
|
||||
1000.0f // far
|
||||
);
|
||||
|
||||
// ======== View Matrix ==================
|
||||
mat4 viewMatrix;
|
||||
//viewMatrix.translate(0, 0, 1 - angle / 100); // + angle
|
||||
//viewMatrix.rotatex(-15.0f + angle);
|
||||
//viewMatrix.translate(0, 0, -1 + angle / 100); // + angle
|
||||
//viewMatrix.translate(0, 0, -4); // + angle
|
||||
//viewMatrix.rotatez(-15.0f + angle);
|
||||
//viewMatrix.rotatez(angle);
|
||||
//viewMatrix.lookAt(vec3(-10, 0, 0), vec3(0, 0, 0), vec3(0, 1, 0));//translation(0.0f, 0.0f, 4.0f).rotatez(angle);
|
||||
//viewMatrix.lookAt(vec3(0, 0, -1 + angle / 100), vec3(0, 0, 0), vec3(0, 1, 0));//translation(0.0f, 0.0f, 4.0f).rotatez(angle);
|
||||
//viewMatrix.lookAt(vec3(0, angle / 1000, -2 - angle / 100), vec3(0, 0, 0), vec3(0, 1, 0));//translation(0.0f, 0.0f, 4.0f).rotatez(angle);
|
||||
viewMatrix.lookAt(vec3(0, 1, -3), vec3(0, 0, 0), vec3(0, 1, 0));//translation(0.0f, 0.0f, 4.0f).rotatez(angle);
|
||||
|
||||
// ======== Model Matrix ==================
|
||||
mat4 modelMatrix;
|
||||
modelMatrix.scale(0.2f);
|
||||
//modelMatrix.scale(0.1f);
|
||||
modelMatrix.rotatez(30.0f + angle * 0.3456778);
|
||||
//modelMatrix.rotatey(25);
|
||||
//modelMatrix.rotatex(15);
|
||||
modelMatrix.rotatey(angle);
|
||||
modelMatrix.rotatez(angle * 1.98765f);
|
||||
modelMatrix.rotatex(angle * 1.98765f);
|
||||
|
||||
// ======= PMV matrix =====================
|
||||
projectionViewModelMatrix = projectionMatrix * viewMatrix * modelMatrix;
|
||||
|
@ -162,11 +188,12 @@ class UiWidget : VerticalLayout {
|
|||
projectionViewModelMatrix = _scene.viewProjectionMatrix;
|
||||
}
|
||||
//projectionViewModelMatrix.setIdentity();
|
||||
Log.d("matrix uniform: ", projectionViewModelMatrix.m);
|
||||
//Log.d("matrix uniform: ", projectionViewModelMatrix.m);
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
checkgl!glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
checkgl!glEnable(GL_CULL_FACE);
|
||||
//checkgl!glDisable(GL_CULL_FACE);
|
||||
checkgl!glEnable(GL_DEPTH_TEST);
|
||||
checkgl!glCullFace(GL_BACK);
|
||||
|
||||
|
|
|
@ -924,6 +924,34 @@ struct mat4 {
|
|||
}
|
||||
|
||||
void setPerspective(float angle, float aspect, float nearPlane, float farPlane)
|
||||
{
|
||||
// Bail out if the projection volume is zero-sized.
|
||||
float radians = (angle / 2.0f) * PI / 180.0f;
|
||||
if (nearPlane == farPlane || aspect == 0.0f || radians < 0.0001f)
|
||||
return;
|
||||
float f = 1 / tan(radians);
|
||||
float d = 1 / (nearPlane - farPlane);
|
||||
|
||||
// Construct the projection.
|
||||
m[0*4 + 0] = f / aspect;
|
||||
m[1*4 + 0] = 0.0f;
|
||||
m[2*4 + 0] = 0.0f;
|
||||
m[3*4 + 0] = 0.0f;
|
||||
m[0*4 + 1] = 0.0f;
|
||||
m[1*4 + 1] = f;
|
||||
m[2*4 + 1] = 0.0f;
|
||||
m[3*4 + 1] = 0.0f;
|
||||
m[0*4 + 2] = 0.0f;
|
||||
m[1*4 + 2] = 0.0f;
|
||||
m[2*4 + 2] = (nearPlane + farPlane) * d;
|
||||
m[3*4 + 2] = 2.0f * nearPlane * farPlane * d;
|
||||
m[0*4 + 3] = 0.0f;
|
||||
m[1*4 + 3] = 0.0f;
|
||||
m[2*4 + 3] = -1.0f;
|
||||
m[3*4 + 3] = 0.0f;
|
||||
}
|
||||
|
||||
void setPerspective2(float angle, float aspect, float nearPlane, float farPlane)
|
||||
{
|
||||
// Bail out if the projection volume is zero-sized.
|
||||
if (nearPlane == farPlane || aspect == 0.0f)
|
||||
|
@ -1043,67 +1071,83 @@ struct mat4 {
|
|||
/// multiply two matrices
|
||||
static mat4 mul(const ref mat4 m1, const ref mat4 m2) {
|
||||
mat4 m;
|
||||
m.m[0*4 + 0] = m1.m[0*4 + 0] * m2.m[0*4 + 0] +
|
||||
m.m[0*4 + 0] =
|
||||
m1.m[0*4 + 0] * m2.m[0*4 + 0] +
|
||||
m1.m[1*4 + 0] * m2.m[0*4 + 1] +
|
||||
m1.m[2*4 + 0] * m2.m[0*4 + 2] +
|
||||
m1.m[3*4 + 0] * m2.m[0*4 + 3];
|
||||
m.m[0*4 + 1] = m1.m[0*4 + 1] * m2.m[0*4 + 0] +
|
||||
m.m[0*4 + 1] =
|
||||
m1.m[0*4 + 1] * m2.m[0*4 + 0] +
|
||||
m1.m[1*4 + 1] * m2.m[0*4 + 1] +
|
||||
m1.m[2*4 + 1] * m2.m[0*4 + 2] +
|
||||
m1.m[3*4 + 1] * m2.m[0*4 + 3];
|
||||
m.m[0*4 + 2] = m1.m[0*4 + 2] * m2.m[0*4 + 0] +
|
||||
m.m[0*4 + 2] =
|
||||
m1.m[0*4 + 2] * m2.m[0*4 + 0] +
|
||||
m1.m[1*4 + 2] * m2.m[0*4 + 1] +
|
||||
m1.m[2*4 + 2] * m2.m[0*4 + 2] +
|
||||
m1.m[3*4 + 2] * m2.m[0*4 + 3];
|
||||
m.m[0*4 + 3] = m1.m[0*4 + 3] * m2.m[0*4 + 0] +
|
||||
m.m[0*4 + 3] =
|
||||
m1.m[0*4 + 3] * m2.m[0*4 + 0] +
|
||||
m1.m[1*4 + 3] * m2.m[0*4 + 1] +
|
||||
m1.m[2*4 + 3] * m2.m[0*4 + 2] +
|
||||
m1.m[3*4 + 3] * m2.m[0*4 + 3];
|
||||
m.m[1*4 + 0] = m1.m[0*4 + 0] * m2.m[1*4 + 0] +
|
||||
m.m[1*4 + 0] =
|
||||
m1.m[0*4 + 0] * m2.m[1*4 + 0] +
|
||||
m1.m[1*4 + 0] * m2.m[1*4 + 1] +
|
||||
m1.m[2*4 + 0] * m2.m[1*4 + 2] +
|
||||
m1.m[3*4 + 0] * m2.m[1*4 + 3];
|
||||
m.m[1*4 + 1] = m1.m[0*4 + 1] * m2.m[1*4 + 0] +
|
||||
m.m[1*4 + 1] =
|
||||
m1.m[0*4 + 1] * m2.m[1*4 + 0] +
|
||||
m1.m[1*4 + 1] * m2.m[1*4 + 1] +
|
||||
m1.m[2*4 + 1] * m2.m[1*4 + 2] +
|
||||
m1.m[3*4 + 1] * m2.m[1*4 + 3];
|
||||
m.m[1*4 + 2] = m1.m[0*4 + 2] * m2.m[1*4 + 0] +
|
||||
m.m[1*4 + 2] =
|
||||
m1.m[0*4 + 2] * m2.m[1*4 + 0] +
|
||||
m1.m[1*4 + 2] * m2.m[1*4 + 1] +
|
||||
m1.m[2*4 + 2] * m2.m[1*4 + 2] +
|
||||
m1.m[3*4 + 2] * m2.m[1*4 + 3];
|
||||
m.m[1*4 + 3] = m1.m[0*4 + 3] * m2.m[1*4 + 0] +
|
||||
m.m[1*4 + 3] =
|
||||
m1.m[0*4 + 3] * m2.m[1*4 + 0] +
|
||||
m1.m[1*4 + 3] * m2.m[1*4 + 1] +
|
||||
m1.m[2*4 + 3] * m2.m[1*4 + 2] +
|
||||
m1.m[3*4 + 3] * m2.m[1*4 + 3];
|
||||
m.m[2*4 + 0] = m1.m[0*4 + 0] * m2.m[2*4 + 0] +
|
||||
m.m[2*4 + 0] =
|
||||
m1.m[0*4 + 0] * m2.m[2*4 + 0] +
|
||||
m1.m[1*4 + 0] * m2.m[2*4 + 1] +
|
||||
m1.m[2*4 + 0] * m2.m[2*4 + 2] +
|
||||
m1.m[3*4 + 0] * m2.m[2*4 + 3];
|
||||
m.m[2*4 + 1] = m1.m[0*4 + 1] * m2.m[2*4 + 0] +
|
||||
m.m[2*4 + 1] =
|
||||
m1.m[0*4 + 1] * m2.m[2*4 + 0] +
|
||||
m1.m[1*4 + 1] * m2.m[2*4 + 1] +
|
||||
m1.m[2*4 + 1] * m2.m[2*4 + 2] +
|
||||
m1.m[3*4 + 1] * m2.m[2*4 + 3];
|
||||
m.m[2*4 + 2] = m1.m[0*4 + 2] * m2.m[2*4 + 0] +
|
||||
m.m[2*4 + 2] =
|
||||
m1.m[0*4 + 2] * m2.m[2*4 + 0] +
|
||||
m1.m[1*4 + 2] * m2.m[2*4 + 1] +
|
||||
m1.m[2*4 + 2] * m2.m[2*4 + 2] +
|
||||
m1.m[3*4 + 2] * m2.m[2*4 + 3];
|
||||
m.m[2*4 + 3] = m1.m[0*4 + 3] * m2.m[2*4 + 0] +
|
||||
m.m[2*4 + 3] =
|
||||
m1.m[0*4 + 3] * m2.m[2*4 + 0] +
|
||||
m1.m[1*4 + 3] * m2.m[2*4 + 1] +
|
||||
m1.m[2*4 + 3] * m2.m[2*4 + 2] +
|
||||
m1.m[3*4 + 3] * m2.m[2*4 + 3];
|
||||
m.m[3*4 + 0] = m1.m[0*4 + 0] * m2.m[3*4 + 0] +
|
||||
m.m[3*4 + 0] =
|
||||
m1.m[0*4 + 0] * m2.m[3*4 + 0] +
|
||||
m1.m[1*4 + 0] * m2.m[3*4 + 1] +
|
||||
m1.m[2*4 + 0] * m2.m[3*4 + 2] +
|
||||
m1.m[3*4 + 0] * m2.m[3*4 + 3];
|
||||
m.m[3*4 + 1] = m1.m[0*4 + 1] * m2.m[3*4 + 0] +
|
||||
m.m[3*4 + 1] =
|
||||
m1.m[0*4 + 1] * m2.m[3*4 + 0] +
|
||||
m1.m[1*4 + 1] * m2.m[3*4 + 1] +
|
||||
m1.m[2*4 + 1] * m2.m[3*4 + 2] +
|
||||
m1.m[3*4 + 1] * m2.m[3*4 + 3];
|
||||
m.m[3*4 + 2] = m1.m[0*4 + 2] * m2.m[3*4 + 0] +
|
||||
m.m[3*4 + 2] =
|
||||
m1.m[0*4 + 2] * m2.m[3*4 + 0] +
|
||||
m1.m[1*4 + 2] * m2.m[3*4 + 1] +
|
||||
m1.m[2*4 + 2] * m2.m[3*4 + 2] +
|
||||
m1.m[3*4 + 2] * m2.m[3*4 + 3];
|
||||
m.m[3*4 + 3] = m1.m[0*4 + 3] * m2.m[3*4 + 0] +
|
||||
m.m[3*4 + 3] =
|
||||
m1.m[0*4 + 3] * m2.m[3*4 + 0] +
|
||||
m1.m[1*4 + 3] * m2.m[3*4 + 1] +
|
||||
m1.m[2*4 + 3] * m2.m[3*4 + 2] +
|
||||
m1.m[3*4 + 3] * m2.m[3*4 + 3];
|
||||
|
|
|
@ -1165,7 +1165,6 @@ class GLVertexBuffer : VertexBuffer {
|
|||
override void draw(GraphicsEffect effect) {
|
||||
//bind();
|
||||
enableAttributes(effect);
|
||||
Log.d("draw ", _indexFragments);
|
||||
foreach (fragment; _indexFragments) {
|
||||
checkgl!glDrawRangeElements(primitiveTypeToGL(fragment.type),
|
||||
0, _vertexCount - 1, // The first to last vertex
|
||||
|
|
|
@ -304,8 +304,7 @@ class Mesh {
|
|||
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));
|
||||
void addCubeMesh(vec3 pos, float d=1, vec4 color = vec4(1,1,1,1)) {
|
||||
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);
|
||||
|
@ -314,12 +313,17 @@ class Mesh {
|
|||
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
|
||||
addQuad(p000, p010, p110, p100, color); // front face
|
||||
addQuad(p101, p111, p011, p001, color); // back face
|
||||
addQuad(p100, p110, p111, p101, color); // right face
|
||||
addQuad(p001, p011, p010, p000, color); // left face
|
||||
addQuad(p010, p011, p111, p110, color); // top face
|
||||
addQuad(p001, p000, p100, p101, color); // bottom face
|
||||
}
|
||||
|
||||
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));
|
||||
mesh.addCubeMesh(pos, d, color);
|
||||
return mesh;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue