From 5f0356b3d97650263fb7c27736edfb0f05e2fa4b Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Mon, 4 Apr 2016 12:18:13 +0300 Subject: [PATCH] #183 material diffuseColor, ambientColor --- examples/d3d/src/d3d.d | 4 +++- src/dlangui/graphics/scene/material.d | 17 +++++++++++++++++ src/dlangui/graphics/scene/mesh.d | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/examples/d3d/src/d3d.d b/examples/d3d/src/d3d.d index 2d7ceea0..0969f8b7 100644 --- a/examples/d3d/src/d3d.d +++ b/examples/d3d/src/d3d.d @@ -138,7 +138,9 @@ class UiWidget : VerticalLayout, CellVisitor { string src = loadTextResource("suzanne.obj"); importer.parse(src); Log.d("suzanne mesh:", importer.mesh.dumpVertexes(20)); - Material suzanneMaterial = new Material(EffectId("colored.vert", "colored.frag", "DIRECTIONAL_LIGHT_COUNT 1"), null); + Material suzanneMaterial = new Material(EffectId("colored.vert", "colored.frag", null), null); //"DIRECTIONAL_LIGHT_COUNT 1" + suzanneMaterial.ambientColor = vec3(0.5, 1.0, 0.5); + suzanneMaterial.diffuseColor = vec4(1.0, 0.7, 0.7, 1.0); Model suzanneDrawable = new Model(suzanneMaterial, importer.mesh); Node3d suzanneNode = new Node3d("suzanne", suzanneDrawable); //suzanneNode.translate(vec3(3, 4, 5)); diff --git a/src/dlangui/graphics/scene/material.d b/src/dlangui/graphics/scene/material.d index fa6c046f..b6960f0a 100644 --- a/src/dlangui/graphics/scene/material.d +++ b/src/dlangui/graphics/scene/material.d @@ -14,10 +14,18 @@ import dlangui.graphics.scene.mesh; alias MaterialRef = Ref!Material; class Material : RefCountedObject { + // effect protected EffectRef _effect; protected EffectId _effectId; + + // textures protected TextureRef _texture; protected string _textureId; + + // colors + protected vec4 _diffuseColor = vec4(1, 1, 1, 1); + protected vec3 _ambientColor = vec3(1, 1, 1); + // TODO: more material properties this() { @@ -28,6 +36,11 @@ class Material : RefCountedObject { _textureId = textureId; } + @property vec4 diffuseColor() { return _diffuseColor; } + @property Material diffuseColor(vec4 color) { _diffuseColor = color; return this; } + @property vec3 ambientColor() { return _ambientColor; } + @property Material ambientColor(vec3 color) { _ambientColor = color; return this; } + @property EffectRef effect() { if (_effect.isNull && !_effectId.empty) _effect = EffectCache.instance.get(_effectId); @@ -81,6 +94,10 @@ class Material : RefCountedObject { _effect.setUniform(DefaultUniform.u_cameraPosition, node.cameraPosition); if (_effect.hasUniform(DefaultUniform.u_worldViewMatrix)) _effect.setUniform(DefaultUniform.u_worldViewMatrix, node.worldViewMatrix); + if (_effect.hasUniform(DefaultUniform.u_ambientColor)) + _effect.setUniform(DefaultUniform.u_ambientColor, _ambientColor); + if (_effect.hasUniform(DefaultUniform.u_diffuseColor)) + _effect.setUniform(DefaultUniform.u_diffuseColor, _diffuseColor); } void drawMesh(Mesh mesh) { diff --git a/src/dlangui/graphics/scene/mesh.d b/src/dlangui/graphics/scene/mesh.d index 54cecb71..2909f285 100644 --- a/src/dlangui/graphics/scene/mesh.d +++ b/src/dlangui/graphics/scene/mesh.d @@ -39,6 +39,7 @@ abstract class GraphicsEffect : RefCountedObject { } enum DefaultUniform : int { + // colors u_ambientColor, // vec3 u_diffuseColor, // vec4 u_lightmapTexture, // sampler2D @@ -56,6 +57,7 @@ enum DefaultUniform : int { u_modulateColor, //uniform vec4 u_modulateColor; u_modulateAlpha, //uniform float u_modulateAlpha; + // matrix u_worldViewProjectionMatrix, //uniform mat4 u_worldViewProjectionMatrix; u_inverseTransposeWorldViewMatrix, //uniform mat4 u_inverseTransposeWorldViewMatrix; u_worldViewMatrix, //uniform mat4 u_worldViewMatrix;