protected override void DrawGeometry(Matrix view, Matrix projection, object[] optionalParameters, EffectConfigurer effectConfigurer, RendererParameters instance) { ModelParameters modelInstance = instance as ModelParameters; if (modelInstance != null && modelInstance.TryCull && GraphicsManager.ViewBoundingFrustum.Contains(modelInstance.BoundingBox) == ContainmentType.Disjoint) { return; } foreach (ModelMesh mesh in mModel.Meshes) { foreach (AnimationUtilities.SkinnedEffect effect in mesh.Effects) { effect.World = modelInstance.World; effect.View = view; effect.Projection = projection; effect.Parameters["xOverlayColor"].SetValue(modelInstance.OverlayColor.ToVector3()); effect.Parameters["xOverlayColorWeight"].SetValue(modelInstance.OverlayWeight); effect.Parameters["xTextureOffset"].SetValue(modelInstance.TextureAnimationOffset); effect.Parameters["xIsBeingSpaghettified"].SetValue(modelInstance.Spaghettify); effect.Parameters["xWormholePosition"].SetValue(modelInstance.WormholePosition); effect.Parameters["xMaxWormholeDistance"].SetValue(modelInstance.MaxWormholeDistance); effect.Parameters["xModelWormholeDistance"].SetValue((modelInstance.WormholePosition - modelInstance.World.Translation).Length()); effectConfigurer(effect, modelInstance, optionalParameters); } mesh.Draw(); } }
protected override void DrawGeometry(Matrix view, Matrix projection, object[] optionalParameters, EffectConfigurer effectConfigurer, RendererParameters instance) { effectConfigurer(mEffect, instance, optionalParameters); WaterParameters waterInstance = instance as WaterParameters; GraphicsManager.Device.SamplerStates[0] = SamplerState.LinearWrap; mEffect.World = Matrix.CreateScale(1.0f, waterInstance.SeaLevel, 1.0f) * waterInstance.World; mEffect.View = view; mEffect.Projection = projection; mEffect.Parameters["xOverlayColor"].SetValue(waterInstance.OverlayColor.ToVector3()); mEffect.Parameters["xOverlayColorWeight"].SetValue(waterInstance.OverlayWeight); mEffect.Parameters["xTextureOffset"].SetValue(waterInstance.TextureAnimationOffset); mEffect.Texture = AssetLibrary.LookupTexture(waterInstance.TextureName); mEffect.Parameters["xIsBeingSpaghettified"].SetValue(false); GraphicsManager.Device.SetVertexBuffer(mVertexBuffer); GraphicsManager.Device.Indices = mIndexBuffer; mEffect.CurrentTechnique.Passes[0].Apply(); GraphicsManager.Device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, mVertexBuffer.VertexCount, 0, mIndexBuffer.IndexCount / 3); }
protected override void DrawGeometry(Matrix view, Matrix projection, object[] optionalParameters, EffectConfigurer effectConfigurer, RendererParameters instance) { effectConfigurer(mEffect, instance, optionalParameters); GraphicsManager.Device.SamplerStates[0] = SamplerState.PointClamp; SkyBoxParameters skyBoxInstance = instance as SkyBoxParameters; GraphicsManager.Device.SamplerStates[0] = SamplerState.LinearWrap; Vector3 sceneScale = new Vector3(Scale, Scale, Scale); Vector3 centerOffset = new Vector3(0, sceneScale.Y * 0.5f, 0); mEffect.World = Matrix.CreateScale(sceneScale) * skyBoxInstance.World * Matrix.CreateTranslation(-centerOffset); mEffect.View = view; mEffect.Projection = Matrix.CreatePerspectiveFieldOfView(GraphicsManager.Camera.FieldOfView, GraphicsManager.Camera.AspectRatio, GraphicsManager.Camera.NearPlaneDistance, Scale); ; mEffect.Parameters["xOverlayColor"].SetValue(skyBoxInstance.OverlayColor.ToVector3()); mEffect.Parameters["xOverlayColorWeight"].SetValue(skyBoxInstance.OverlayWeight); mEffect.Parameters["xTextureOffset"].SetValue(skyBoxInstance.TextureAnimationOffset); mEffect.Parameters["xTextureTransformation"].SetValue(Matrix.Identity); mEffect.Parameters["xIsBeingSpaghettified"].SetValue(false); mEffect.Texture = AssetLibrary.LookupTexture(skyBoxInstance.TextureName); GraphicsManager.Device.SetVertexBuffer(mVertexBuffer); GraphicsManager.Device.Indices = mIndexBuffer; mEffect.CurrentTechnique.Passes[0].Apply(); GraphicsManager.Device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, mVertexBuffer.VertexCount, 0, mIndexBuffer.IndexCount / 3); }
public RendererBase() { mNormalDepthConfigurer = NormalDepthConfigurer; mShadowMapConfigurer = ShadowMapConfigurer; mWithoutShadowsConfigurer = WithoutShadowsConfigurer; mWithShadowsConfigurer = WithShadowsConfigurer; mPickingConfigurer = PickingConfigurer; mNoShadeConfigurer = NoShadeConfigurer; mUIConfigurer = UIConfigurer; mOverlayConfigurer = NoShadeConfigurer; }
protected override void DrawGeometry(Matrix view, Matrix projection, object[] optionalParameters, EffectConfigurer effectConfigurer, RendererParameters instance) { HeightMapParameters terrainInstance = instance as HeightMapParameters; if (terrainInstance.TryCull && GraphicsManager.ViewBoundingFrustum.Contains(terrainInstance.BoundingBox) == ContainmentType.Disjoint) { return; } for (int i = 0; i < 7; ++i) { GraphicsManager.Device.SamplerStates[i] = SamplerState.PointWrap; } GraphicsManager.Device.SamplerStates[2] = SamplerState.LinearClamp; mEffect.World = instance.World; mEffect.View = view; mEffect.Projection = projection; mEffect.Parameters["xOverlayColor"].SetValue(instance.OverlayColor.ToVector3()); mEffect.Parameters["xOverlayColorWeight"].SetValue(instance.OverlayWeight); mEffect.Parameters["xTextureOffset"].SetValue(instance.TextureAnimationOffset); //mEffect.Parameters["xIsBeingSpaghettified"].SetValue(false); mEffect.Parameters["xDrawCursor"].SetValue((int)terrainInstance.DrawCursor); if (terrainInstance.DrawCursor != HeightMapRenderable.CursorShape.NONE) { mEffect.Parameters["xCursorPosition"].SetValue(terrainInstance.CursorPosition); mEffect.Parameters["xCursorInnerRadius"].SetValue(terrainInstance.CursorInnerRadius); mEffect.Parameters["xCursorOuterRadius"].SetValue(terrainInstance.CursorOuterRadius); } mEffect.Parameters["xTextureMask"].SetValue(terrainInstance.TextureMask); effectConfigurer(mEffect, instance, optionalParameters); mEffect.Parameters["AlphaMap"].SetValue(mMesh.AlphaMap); for (int i = 0; i < mMesh.DetailTextureNames.Length; ++i) { string detailTextureName = mMesh.DetailTextureNames[i]; Vector2 uvOffset = mMesh.DetailTextureUVOffset[i]; Vector2 uvScale = mMesh.DetailTextureUVScale[i]; if (detailTextureName != null) { mEffect.Parameters[LAYER_TEXTURE_NAMES[i]].SetValue(AssetLibrary.LookupTexture(detailTextureName)); mEffect.Parameters[LAYER_TEXTURE_NAMES[i] + "_uvOffset"].SetValue(uvOffset); mEffect.Parameters[LAYER_TEXTURE_NAMES[i] + "_uvScale"].SetValue(uvScale); } } VertexBuffer vertexBuffer = mMesh.VertexBuffer; IndexBuffer indexBuffer = mMesh.IndexBuffer; GraphicsManager.Device.SetVertexBuffer(vertexBuffer); GraphicsManager.Device.Indices = indexBuffer; mEffect.CurrentTechnique.Passes[0].Apply(); GraphicsManager.Device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, vertexBuffer.VertexCount, 0, indexBuffer.IndexCount / 3); GraphicsManager.Device.SetVertexBuffer(null); GraphicsManager.Device.Indices = null; }
protected abstract void DrawGeometry(Matrix view, Matrix projection, object[] optionalParameters, EffectConfigurer effectConfigurer, RendererParameters instance);