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(); } }