// --------------------------------------------------------------------

        public override void OnDrawGizmos(GizmosManager gizmos)
        {
            Matrix4 rts = Transform.ModelMatrix;

            rts[0, 0] = 0.25f;
            rts[1, 1] = 0.25f;
            rts[2, 2] = 0.25f;

            Material mat = Onyx3DEngine.Instance.Resources.GetMaterial(BuiltInMaterial.ReflectionProbe);
            CubemapMaterialProperty cubemapProp = mat.GetProperty <CubemapMaterialProperty>("cubemap");

            cubemapProp.Data = mCubemap.Id;


            gizmos.DrawMesh(rts, Onyx3DEngine.Instance.Resources.GetMesh(BuiltInMesh.Sphere), mat);
        }
示例#2
0
        // --------------------------------------------------------------------

        private void SetUpReflectionProbe(Scene scene, MeshRenderer renderer)
        {
            if (scene.RenderData.ReflectionProbes.Count == 0)
            {
                return;
            }

            CubemapMaterialProperty cubemapProp = renderer.Material.GetProperty <CubemapMaterialProperty>("environment_map");

            if (cubemapProp == null)
            {
                return;
            }

            ReflectionProbe reflectionProbe = GetClosestReflectionProbe(scene, renderer.Transform.Position);

            cubemapProp.Data = reflectionProbe.Cubemap.Id;
        }
示例#3
0
        public void ApplyProperties()
        {
            foreach (KeyValuePair <string, MaterialProperty> mp in Properties)
            {
                switch (mp.Value.Type)
                {
                case MaterialPropertyType.SamplerCube:
                    CubemapMaterialProperty cmp = (CubemapMaterialProperty)mp.Value;
                    GL.ActiveTexture(TextureUnit.Texture0 + cmp.DataIndex);
                    GL.BindTexture(TextureTarget.TextureCubeMap, cmp.CubemapId);
                    GL.Uniform1(GL.GetUniformLocation(Shader.Program, mp.Key), cmp.DataIndex);
                    break;

                case MaterialPropertyType.Sampler2D:
                    TextureMaterialProperty tmp = (TextureMaterialProperty)mp.Value;
                    GL.ActiveTexture(TextureUnit.Texture0 + tmp.DataIndex);
                    Texture t = Onyx3DEngine.Instance.Resources.GetTexture(tmp.TextureGuid);
                    GL.BindTexture(TextureTarget.Texture2D, t.Id);
                    GL.Uniform1(GL.GetUniformLocation(Shader.Program, mp.Key), tmp.DataIndex);
                    break;

                case MaterialPropertyType.Float:
                    int loc = GL.GetUniformLocation(Shader.Program, mp.Key);
                    GL.Uniform1(loc, (float)mp.Value.Data);
                    break;

                case MaterialPropertyType.Vector2:
                    Vector2 v2 = (Vector2)mp.Value.Data;
                    GL.Uniform2(GL.GetUniformLocation(Shader.Program, mp.Key), v2);
                    break;

                case MaterialPropertyType.Vector3:
                    Vector3 v3 = (Vector3)mp.Value.Data;
                    GL.Uniform3(GL.GetUniformLocation(Shader.Program, mp.Key), v3);
                    break;

                case MaterialPropertyType.Vector4:
                case MaterialPropertyType.Color:
                    Vector4 v4 = (Vector4)mp.Value.Data;
                    GL.Uniform4(GL.GetUniformLocation(Shader.Program, mp.Key), v4);
                    break;
                }
            }
        }
示例#4
0
        public void WriteXml(XmlWriter writer)
        {
            writer.WriteStartElement("Material");


            writer.WriteElementString("Shader", Shader.LinkedProjectAsset.Guid.ToString());

            foreach (KeyValuePair <string, MaterialProperty> prop in Properties)
            {
                writer.WriteStartElement("Property");
                writer.WriteAttributeString("id", prop.Key);
                switch (prop.Value.Type)
                {
                case MaterialPropertyType.Color:
                    writer.WriteAttributeString("type", "color");
                    writer.WriteAttributeString("value", XmlUtils.Vector4ToString((Vector4)prop.Value.Data));
                    break;

                case MaterialPropertyType.Vector4:
                    writer.WriteAttributeString("type", "float4");
                    writer.WriteAttributeString("value", XmlUtils.Vector4ToString((Vector4)prop.Value.Data));
                    break;

                case MaterialPropertyType.Vector3:
                    writer.WriteAttributeString("type", "float3");
                    writer.WriteAttributeString("value", XmlUtils.Vector3ToString((Vector3)prop.Value.Data));
                    break;

                case MaterialPropertyType.Vector2:
                    writer.WriteAttributeString("type", "float2");
                    writer.WriteAttributeString("value", XmlUtils.Vector2ToString((Vector2)prop.Value.Data));
                    break;

                case MaterialPropertyType.Float:
                    writer.WriteAttributeString("type", "float");
                    writer.WriteAttributeString("value", ((float)prop.Value.Data).ToString());
                    break;

                case MaterialPropertyType.Sampler2D:
                    writer.WriteAttributeString("type", "sampler2d");
                    TextureMaterialProperty textureProp = (TextureMaterialProperty)prop.Value;
                    writer.WriteAttributeString("value", textureProp.TextureGuid.ToString());
                    writer.WriteAttributeString("index", textureProp.DataIndex.ToString());
                    break;

                case MaterialPropertyType.SamplerCube:
                    writer.WriteAttributeString("type", "samplerCube");
                    CubemapMaterialProperty cubemapProp = (CubemapMaterialProperty)prop.Value;
                    writer.WriteAttributeString("value", cubemapProp.TextureGuid.ToString());
                    writer.WriteAttributeString("index", cubemapProp.DataIndex.ToString());
                    break;
                }


                writer.WriteEndElement();
            }



            writer.WriteEndElement();
        }