Ejemplo n.º 1
0
        //============================================================
        public override void DrawRenderable(FDxRegion region, FDxRenderable renderable, FDxEffect effect)
        {
            // 是否为UI对象
            if (!renderable.IsUi)
            {
                return;
            }
            // 设置输入数据缓冲
            _device.NativeDevice.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
            _device.NativeDevice.InputAssembler.SetVertexBuffers(0, renderable.VertexBuffer.NativeBuffers);
            _device.NativeDevice.InputAssembler.SetIndexBuffer(renderable.FaceBuffer.NativeBuffer, Format.R32_UInt, 0);
            // 设置渲染对象参数
            FDxGeometry geometry = renderable as FDxGeometry;
            FDxMaterial material = geometry.Material;

            effect.NativeEffect.GetVariableByName("_flags").AsVector().Set(new Vector4(renderable.Id, 0, 0, 0));
            effect.NativeEffect.GetVariableByName("_status").AsVector().Set(new Vector4(renderable.IsSelected ? 1 : 0, 0, 0, 0));
            effect.SetMatrix("_modelMatrix", renderable.ModelMatrix);
            effect.SetNativeMatrix("_viewMatrix", region.Camera.Matrix.Native);
            effect.SetNativeMatrix("_projectionMatrix", region.Camera.Viewport.Matrix);
            effect.NativeEffect.GetVariableByName("_cameraPosition").AsVector().Set(new Vector3(region.Camera.Position.X, region.Camera.Position.Y, region.Camera.Position.Z));
            effect.NativeEffect.GetVariableByName("_lightPosition").AsVector().Set(new Vector3(region.LightDirectional.Position.X, region.LightDirectional.Position.Y, region.LightDirectional.Position.Z));
            effect.NativeEffect.GetVariableByName("_ambientColor").AsVector().Set(new Vector4(material.AmbientColor.R, material.AmbientColor.G, material.AmbientColor.B, material.AmbientColor.A));
            effect.NativeEffect.GetVariableByName("_diffuseColor").AsVector().Set(new Vector4(material.DiffuseColor.R, material.DiffuseColor.G, material.DiffuseColor.B, material.DiffuseColor.A));
            effect.NativeEffect.GetVariableByName("_specularColor").AsVector().Set(new Vector4(material.SpecularColor.R, material.SpecularColor.G, material.SpecularColor.B, material.SpecularColor.A));
            // 提交效果设置
            effect.NativePass.Apply(_device.NativeDevice);
            // 绘制几何体
            _device.NativeDevice.DrawIndexed(renderable.FaceBuffer.count, 0, 0);
        }
Ejemplo n.º 2
0
        //============================================================
        public override void DrawRenderable(FDxRegion region, FDxRenderable renderable, FDxEffect effect)
        {
            if (renderable.IsUi)
            {
                return;
            }
            // 设置输入数据缓冲
            _device.NativeDevice.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
            _device.NativeDevice.InputAssembler.SetVertexBuffers(0, renderable.VertexBuffer.NativeBuffers);
            _device.NativeDevice.InputAssembler.SetIndexBuffer(renderable.FaceBuffer.NativeBuffer, Format.R32_UInt, 0);
            // 设置渲染对象参数
            Vector4 flags = new Vector4(renderable.IsSelected ? 1 : 0, renderable.IsUi ? 1 : 0, 0, 0);
            // 设置渲染对象参数
            FDxGeometry geometry = renderable as FDxGeometry;
            FDxMaterial material = geometry.Material;

            effect.NativeEffect.GetVariableByName("_flags").AsVector().Set(new Vector4(renderable.Id, 0, 0, 0));
            effect.NativeEffect.GetVariableByName("_status").AsVector().Set(flags);
            effect.SetMatrix("_modelMatrix", renderable.ModelMatrix);
            effect.SetNativeMatrix("_viewMatrix", region.Camera.Matrix.Native);
            effect.SetNativeMatrix("_projectionMatrix", region.Camera.Viewport.Matrix);
            effect.NativeEffect.GetVariableByName("_projectionMatrix").AsMatrix().SetMatrix(region.Camera.Viewport.Matrix);
            effect.NativeEffect.GetVariableByName("_cameraPosition").AsVector().Set(new Vector3(region.Camera.Position.X, region.Camera.Position.Y, region.Camera.Position.Z));
            effect.NativeEffect.GetVariableByName("_lightPosition").AsVector().Set(new Vector3(region.LightDirectional.Position.X, region.LightDirectional.Position.Y, region.LightDirectional.Position.Z));
            effect.NativeEffect.GetVariableByName("_lightDirection").AsVector().Set(new Vector3(region.LightDirectional.Camera.Direction.X, region.LightDirectional.Camera.Direction.Y, region.LightDirectional.Camera.Direction.Z));
            // 设置渲染材质参数
            effect.NativeEffect.GetVariableByName("_ambientColor").AsVector().Set(new Vector4(material.AmbientColor.R, material.AmbientColor.G, material.AmbientColor.B, material.AmbientColor.A));
            effect.NativeEffect.GetVariableByName("_diffuseColor").AsVector().Set(new Vector4(material.DiffuseColor.R, material.DiffuseColor.G, material.DiffuseColor.B, material.DiffuseColor.A));
            effect.NativeEffect.GetVariableByName("_specularColor").AsVector().Set(new Vector4(material.SpecularColor.R, material.SpecularColor.G, material.SpecularColor.B, material.SpecularColor.A));
            // 设置纹理列表
            int textureCount = geometry.Material.Textures.Count;

            for (int i = 0; i < textureCount; i++)
            {
                FDxTexture texture = geometry.Material.Textures[i];
                if (null != texture)
                {
                    string textureName = "_texture" + RString.FirstUpper(texture.TypeName);
                    effect.NativeEffect.GetVariableByName(textureName).AsResource().SetResource(texture.NativeResource);
                }
            }
            // 提交效果设置
            effect.NativePass.Apply(_device.NativeDevice);
            // 绘制几何体
            _device.NativeDevice.DrawIndexed(renderable.FaceBuffer.count, 0, 0);
        }
Ejemplo n.º 3
0
 //============================================================
 public FDrGrowingGeometry()
 {
     _material = new FDxMaterial();
 }