mirror of https://github.com/buggins/dlangui.git
fix lighting
This commit is contained in:
parent
b912b6ba83
commit
13ee465cef
|
@ -180,6 +180,7 @@ class UiWidget : VerticalLayout, CellVisitor {
|
|||
brickNode.translate(vec3(-2, 2, -3));
|
||||
Mesh brickMesh = Mesh.createCubeMesh(vec3(0, 0, 0), 0.8, vec4(0.8, 0.8, 0.8, 1));
|
||||
Material brickMaterial = new Material(EffectId("textured.vert", "textured.frag", null), "brick", "brickn"); // with bump mapping
|
||||
//brickMaterial.specular = true;
|
||||
brickNode.drawable = new Model(brickMaterial, brickMesh);
|
||||
_scene.addChild(brickNode);
|
||||
|
||||
|
@ -204,7 +205,7 @@ class UiWidget : VerticalLayout, CellVisitor {
|
|||
updateMinerMesh();
|
||||
|
||||
Material minerMaterial = new Material(EffectId("textured.vert", "textured.frag", null), "blocks");
|
||||
minerMaterial.textureLinear = false;
|
||||
//minerMaterial.textureLinear = false;
|
||||
Model minerDrawable = new Model(minerMaterial, _minerMesh);
|
||||
Node3d minerNode = new Node3d("miner", minerDrawable);
|
||||
_scene.addChild(minerNode);
|
||||
|
|
|
@ -84,65 +84,103 @@ public:
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
0 1
|
||||
3 2
|
||||
// pos, normal, color, tx
|
||||
|
||||
|
||||
/* North, z=-1
|
||||
Y^
|
||||
0 | 1
|
||||
X<-----x-----
|
||||
3 | 2
|
||||
*/
|
||||
|
||||
immutable float inv = -1.0f;
|
||||
|
||||
// pos, normal, color, tx
|
||||
static const float[VERTEX_COMPONENTS * 4] face_vertices_north =
|
||||
[
|
||||
-0.5, 0.5, -0.5, 0.0, 0.0, -1.0*inv, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
0.5, 0.5, -0.5, 0.0, 0.0, -1.0*inv, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
-0.5, -0.5, -0.5, 0.0, 0.0, -1.0*inv, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.5, -0.5, -0.5, 0.0, 0.0, -1.0*inv, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
0.5, 0.5, -0.5, 0.0, 0.0, -1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
-0.5, 0.5, -0.5, 0.0, 0.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
-0.5, -0.5, -0.5, 0.0, 0.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.5, -0.5, -0.5, 0.0, 0.0, -1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
];
|
||||
|
||||
/* South, z=1
|
||||
Y^
|
||||
0 | 1
|
||||
-----x----->X
|
||||
3 | 2
|
||||
*/
|
||||
|
||||
static const float[VERTEX_COMPONENTS * 4] face_vertices_south =
|
||||
[
|
||||
-0.5, -0.5, 0.5, 0.0, 0.0, 1.0*inv, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
0.5, -0.5, 0.5, 0.0, 0.0, 1.0*inv, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
-0.5, 0.5, 0.5, 0.0, 0.0, 1.0*inv, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
0.5, 0.5, 0.5, 0.0, 0.0, 1.0*inv, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
-0.5, 0.5, 0.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
0.5, 0.5, 0.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
0.5, -0.5, 0.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
-0.5, -0.5, 0.5, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
];
|
||||
|
||||
/* West, x=-1
|
||||
Y^
|
||||
0 | 1
|
||||
-----x----->Z
|
||||
3 | 2
|
||||
*/
|
||||
|
||||
static const float[VERTEX_COMPONENTS * 4] face_vertices_west =
|
||||
[
|
||||
-0.5, -0.5, -0.5, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
-0.5, -0.5, 0.5, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
-0.5, 0.5, -0.5, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
-0.5, 0.5, 0.5, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0
|
||||
-0.5, 0.5, -0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
-0.5, 0.5, 0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
-0.5, -0.5, 0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
-0.5, -0.5, -0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0
|
||||
];
|
||||
|
||||
/* East, x=1
|
||||
Y^
|
||||
0 | 1
|
||||
Z<-----x-----
|
||||
3 | 2
|
||||
*/
|
||||
|
||||
static const float[VERTEX_COMPONENTS * 4] face_vertices_east =
|
||||
[
|
||||
0.5, -0.5, 0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
0.5, -0.5, -0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.5, 0.5, 0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
0.5, 0.5, -0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
0.5, 0.5, 0.5, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
0.5, 0.5, -0.5, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
0.5, -0.5, -0.5, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.5, -0.5, 0.5, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
];
|
||||
|
||||
/* Up, y=1
|
||||
|
||||
0 | 1
|
||||
-----x----->X
|
||||
3 | 2
|
||||
Zv
|
||||
*/
|
||||
|
||||
static const float[VERTEX_COMPONENTS * 4] face_vertices_up =
|
||||
[
|
||||
-0.5, 0.5, 0.5, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
0.5, 0.5, 0.5, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
-0.5, 0.5, -0.5, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.5, 0.5, -0.5, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
-0.5, 0.5, -0.5, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
0.5, 0.5, -0.5, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
0.5, 0.5, 0.5, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
-0.5, 0.5, 0.5, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
];
|
||||
|
||||
/* Down, y=-1
|
||||
0 | 1
|
||||
X<-----x-----
|
||||
3 | 2
|
||||
Zv
|
||||
*/
|
||||
|
||||
static const float[VERTEX_COMPONENTS * 4] face_vertices_down =
|
||||
[
|
||||
-0.5, -0.5, -0.5, 0.0, -1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
0.5, -0.5, -0.5, 0.0, -1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
0.5, -0.5,-0.5, 0.0, -1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
-0.5, -0.5,-0.5, 0.0, -1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0,
|
||||
-0.5, -0.5, 0.5, 0.0, -1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.5, -0.5, 0.5, 0.0, -1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
0.5, -0.5, 0.5, 0.0, -1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0,
|
||||
];
|
||||
|
||||
static const ushort[6] face_indexes =
|
||||
[
|
||||
0, 1, 2, 2, 1, 3
|
||||
2, 1, 0, 0, 3, 2 // CCW
|
||||
];
|
||||
|
||||
static const ushort[6] face_indexes_back =
|
||||
|
|
|
@ -404,24 +404,24 @@ struct Position {
|
|||
pos = position;
|
||||
direction = dir;
|
||||
}
|
||||
Vector2d calcPlaneCoords(Vector3d v) {
|
||||
v = v - pos;
|
||||
switch (direction.dir) with(Dir) {
|
||||
default:
|
||||
case NORTH:
|
||||
return Vector2d(v.x, v.y);
|
||||
case SOUTH:
|
||||
return Vector2d(-v.x, v.y);
|
||||
case EAST:
|
||||
return Vector2d(v.z, v.y);
|
||||
case WEST:
|
||||
return Vector2d(-v.z, v.y);
|
||||
case UP:
|
||||
return Vector2d(-v.z, v.x);
|
||||
case DOWN:
|
||||
return Vector2d(v.z, v.x);
|
||||
}
|
||||
}
|
||||
//Vector2d calcPlaneCoords(Vector3d v) {
|
||||
// v = v - pos;
|
||||
// switch (direction.dir) with(Dir) {
|
||||
// default:
|
||||
// case NORTH:
|
||||
// return Vector2d(v.x, v.y);
|
||||
// case SOUTH:
|
||||
// return Vector2d(-v.x, v.y);
|
||||
// case EAST:
|
||||
// return Vector2d(v.z, v.y);
|
||||
// case WEST:
|
||||
// return Vector2d(-v.z, v.y);
|
||||
// case UP:
|
||||
// return Vector2d(-v.z, v.x);
|
||||
// case DOWN:
|
||||
// return Vector2d(v.z, v.x);
|
||||
// }
|
||||
//}
|
||||
void turnLeft() {
|
||||
direction.turnLeft();
|
||||
}
|
||||
|
|
|
@ -86,7 +86,8 @@ class UiWidget : VerticalLayout, CellVisitor {
|
|||
dirLightNode.translateX(2);
|
||||
dirLightNode.translateY(3);
|
||||
dirLightNode.translateZ(0);
|
||||
dirLightNode.light = Light.createPoint(vec3(12, 12, 12), 25); //Light.createDirectional(vec3(1, 0.5, 0.5));
|
||||
dirLightNode.light = Light.createPoint(vec3(1.5, 1.5, 1.5), 25); //Light.createDirectional(vec3(1, 0.5, 0.5));
|
||||
//dirLightNode.light = Light.createDirectional(vec3(1, 0.5, 0.5));
|
||||
dirLightNode.light.enabled = true;
|
||||
_scene.addChild(dirLightNode);
|
||||
|
||||
|
@ -134,9 +135,9 @@ class UiWidget : VerticalLayout, CellVisitor {
|
|||
updateMinerMesh();
|
||||
|
||||
Material minerMaterial = new Material(EffectId("textured.vert", "textured.frag", null), "blocks");
|
||||
minerMaterial.ambientColor = vec3(0.05,0.05,0.05);
|
||||
minerMaterial.ambientColor = vec3(0.1,0.1,0.1);
|
||||
minerMaterial.textureLinear = false;
|
||||
minerMaterial.specular = true;
|
||||
minerMaterial.specular = 10;
|
||||
Model minerDrawable = new Model(minerMaterial, _minerMesh);
|
||||
Node3d minerNode = new Node3d("miner", minerDrawable);
|
||||
_scene.addChild(minerNode);
|
||||
|
|
|
@ -1616,6 +1616,19 @@ struct mat4 {
|
|||
return vec3(m[8], m[9], m[10]);
|
||||
}
|
||||
|
||||
void transformVector(ref vec3 v) const {
|
||||
transformVector(v.x, v.y, v.z, 0, v);
|
||||
}
|
||||
|
||||
void transformPoint(ref vec3 v) const {
|
||||
transformVector(v.x, v.y, v.z, 1, v);
|
||||
}
|
||||
|
||||
void transformVector(float x, float y, float z, float w, ref vec3 dst) const {
|
||||
dst.x = x * m[0] + y * m[4] + z * m[8] + w * m[12];
|
||||
dst.y = x * m[1] + y * m[5] + z * m[9] + w * m[13];
|
||||
dst.z = x * m[2] + y * m[6] + z * m[10] + w * m[14];
|
||||
}
|
||||
|
||||
static __gshared const mat4 IDENTITY;
|
||||
}
|
||||
|
|
|
@ -487,9 +487,9 @@ class SolidFillProgram : GLProgram {
|
|||
/// get location for vertex attribute
|
||||
override int getVertexElementLocation(VertexElementType type) {
|
||||
switch(type) with(VertexElementType) {
|
||||
case POSITION:
|
||||
case POSITION:
|
||||
return vertexLocation;
|
||||
case COLOR:
|
||||
case COLOR:
|
||||
return colAttrLocation;
|
||||
default:
|
||||
return VERTEX_ELEMENT_NOT_FOUND;
|
||||
|
@ -1314,13 +1314,15 @@ class GLVertexBuffer : VertexBuffer {
|
|||
// specify index buffer
|
||||
checkgl!glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
|
||||
int offset = 0;
|
||||
//Log.v("=== enableAttributes for ", _format);
|
||||
for(int i = 0; i < _format.length; i++) {
|
||||
int loc = effect.getVertexElementLocation(_format[i].type);
|
||||
if (loc >= 0) {
|
||||
//Log.v("setting attrib pointer for type ", _format[i].type, " offset=", offset, " location=", loc);
|
||||
checkgl!glVertexAttribPointer(loc, _format[i].size, GL_FLOAT, cast(ubyte)GL_FALSE, _format.vertexSize, cast(char*)(offset));
|
||||
checkgl!glEnableVertexAttribArray(loc);
|
||||
} else {
|
||||
//Log.d("Attribute location not found for ", _format[i].type);
|
||||
//Log.v("Attribute location not found for ", _format[i].type);
|
||||
}
|
||||
offset += _format[i].byteSize;
|
||||
}
|
||||
|
|
|
@ -44,9 +44,9 @@ class Light : RefCountedObject {
|
|||
@property Light node(Node3d n) { _node = n; return this; }
|
||||
|
||||
/// direction in world coordinates
|
||||
@property vec3 direction() { return _node ? _node.forwardVectorWorld : vec3(0, 0, 1); }
|
||||
@property vec3 direction() { return _node ? _node.forwardVectorView : vec3(0, 0, 1); }
|
||||
/// position in world coordinates
|
||||
@property vec3 position() { return _node ? _node.translationWorld : vec3(0, 0, 0); }
|
||||
@property vec3 position() { return _node ? _node.translationView : vec3(0, 0, 0); }
|
||||
|
||||
@property float range() const { return 1.0; }
|
||||
@property void range(float v) { assert(false); }
|
||||
|
|
|
@ -201,7 +201,7 @@ struct VertexElement {
|
|||
/// Vertex format elements list
|
||||
struct VertexFormat {
|
||||
private VertexElement[] _elements;
|
||||
private byte[VertexElementType.max + 1] _elementOffset = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
private byte[16] _elementOffset = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
private int _vertexSize; // vertex size in floats
|
||||
/// make using element list
|
||||
this(inout VertexElement[] elems...) {
|
||||
|
|
|
@ -179,6 +179,14 @@ class Node3d : Transform {
|
|||
return translation;
|
||||
}
|
||||
|
||||
/// returns translation vector (position) of this node in view space
|
||||
@property vec3 translationView() {
|
||||
vec3 translation;
|
||||
worldMatrix.getTranslation(translation);
|
||||
viewMatrix.transformPoint(translation);
|
||||
return translation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the inverse transpose world matrix corresponding to this node.
|
||||
*
|
||||
|
@ -218,4 +226,15 @@ class Node3d : Transform {
|
|||
@property vec3 forwardVectorWorld() {
|
||||
return worldMatrix.forwardVector;
|
||||
}
|
||||
/**
|
||||
* Returns the forward vector of the Node in view space.
|
||||
*
|
||||
* @return The forward vector in view space.
|
||||
*/
|
||||
@property vec3 forwardVectorView() {
|
||||
return worldMatrix.forwardVector;
|
||||
vec3 vector = worldMatrix.forwardVector;
|
||||
viewMatrix.transformVector(vector);
|
||||
return vector;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue