Beispiel #1
0
        private static void RenderSystem_Setup()
        {
            Axiom.Graphics.RenderSystem rs = Root.Instance.RenderSystem;

            var colorBlendMode = new LayerBlendModeEx();

            colorBlendMode.blendType = LayerBlendType.Color;
            colorBlendMode.source1   = LayerBlendSource.Texture;
            colorBlendMode.operation = LayerBlendOperationEx.Source1;

            var uvwAddressMode = new UVWAddressing(TextureAddressing.Clamp);

            rs.WorldMatrix      = Matrix4.Identity;
            rs.ViewMatrix       = Matrix4.Identity;
            rs.ProjectionMatrix = Matrix4.Identity;
            rs.SetTextureMatrix(0, Matrix4.Identity);
            rs.SetTextureCoordSet(0, 0);
            rs.SetTextureCoordCalculation(0, TexCoordCalcMethod.None);
            rs.SetTextureBlendMode(0, colorBlendMode);
            rs.SetTextureAddressingMode(0, uvwAddressMode);
            rs.DisableTextureUnitsFrom(1);
            rs.LightingEnabled = false;
            rs.SetFog(FogMode.None);
            rs.CullingMode = CullingMode.None;
            rs.SetDepthBufferParams(false, false);
            rs.SetColorBufferWriteEnabled(true, true, true, false);
            rs.ShadingType = ShadeOptions.Gouraud;
            rs.PolygonMode = PolygonMode.Solid;
            rs.UnbindGpuProgram(GpuProgramType.Fragment);
            rs.UnbindGpuProgram(GpuProgramType.Vertex);
            rs.SetSeparateSceneBlending(SceneBlendFactor.SourceAlpha, SceneBlendFactor.OneMinusSourceAlpha, SceneBlendFactor.One,
                                        SceneBlendFactor.One);
            rs.SetAlphaRejectSettings(CompareFunction.AlwaysPass, 0, true);
        }
        public void RenderLeaves(RenderSystem targetRenderSystem, int positionParamIndex, Tree t)
        {
            if (meterRenderingOfTrees)
            {
                renderLeavesMeter.Enter();
            }

            // set the position register in the hardware
            positionParameters.SetConstant(positionParamIndex, t.Location.x, t.Location.y, t.Location.z, 0);
            targetRenderSystem.BindGpuProgramParameters(GpuProgramType.Vertex, positionParameters);

            if (t.Leaf0RenderArgs.Active)
            {
                targetRenderSystem.SetAlphaRejectSettings(CompareFunction.Greater, (byte)t.Leaf0RenderArgs.AlphaTestValue);
                int lod = t.Leaf0RenderArgs.LOD;
                leaf0RenderOp.vertexData = leafVertexBuffers[lod];
                leaf0RenderOp.indexData = leafIndexBuffers[lod];

                if (leaf0RenderOp.vertexData != null)
                {
                    targetRenderSystem.Render(leaf0RenderOp);
                }
            }
            if (t.Leaf1RenderArgs.Active)
            {
                targetRenderSystem.SetAlphaRejectSettings(CompareFunction.Greater, (byte)t.Leaf1RenderArgs.AlphaTestValue);

                int lod = t.Leaf1RenderArgs.LOD;
                leaf1RenderOp.vertexData = leafVertexBuffers[lod];
                leaf1RenderOp.indexData = leafIndexBuffers[lod];
                if (leaf1RenderOp.vertexData != null)
                {
                    targetRenderSystem.Render(leaf1RenderOp);
                }
            }
            if (meterRenderingOfTrees)
            {
                renderLeavesMeter.Exit();
            }
        }
        public void Render(RenderSystem targetRenderSystem)
        {
            ((Axiom.SceneManagers.Multiverse.SceneManager)TerrainManager.Instance.SceneManager).SetTreeRenderPass(billboardMaterial.GetBestTechnique(0).GetPass(0), this);

            string lastTextureName = null;
            foreach (TreeBillboardRenderOp op in renderOps)
            {
                // set the texture if necessary
                if (op.textureName != lastTextureName)
                {
                    targetRenderSystem.SetTexture(0, true, op.textureName);
                    lastTextureName = op.textureName;
                }

                targetRenderSystem.SetAlphaRejectSettings(CompareFunction.Greater, (byte)op.alpha);

                targetRenderSystem.Render(op.renderOp);
            }
        }
        public void RenderBranch(RenderSystem targetRenderSystem, int positionParamIndex, Tree t)
        {
            if (meterRenderingOfTrees)
            {
                renderBranchMeter.Enter();
            }

            int lod = t.BranchRenderArgs.LOD;

            if ((branchVertexBuffers[lod] != null) && (branchIndexBuffers[lod] != null))
            {

                targetRenderSystem.SetAlphaRejectSettings(CompareFunction.Greater, (byte)t.BranchRenderArgs.AlphaTestValue);

                // set the position register in the hardware
                positionParameters.SetConstant(positionParamIndex, t.Location.x, t.Location.y, t.Location.z, 0);
                targetRenderSystem.BindGpuProgramParameters(GpuProgramType.Vertex, positionParameters);

                branchRenderOp.vertexData = branchVertexBuffers[lod];
                branchRenderOp.indexData = branchIndexBuffers[lod];
                targetRenderSystem.Render(branchRenderOp);
            }
            if (meterRenderingOfTrees)
            {
                renderBranchMeter.Exit();
            }
        }