示例#1
0
        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();
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
 public RendererBase()
 {
     mNormalDepthConfigurer    = NormalDepthConfigurer;
     mShadowMapConfigurer      = ShadowMapConfigurer;
     mWithoutShadowsConfigurer = WithoutShadowsConfigurer;
     mWithShadowsConfigurer    = WithShadowsConfigurer;
     mPickingConfigurer        = PickingConfigurer;
     mNoShadeConfigurer        = NoShadeConfigurer;
     mUIConfigurer             = UIConfigurer;
     mOverlayConfigurer        = NoShadeConfigurer;
 }
示例#5
0
        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;
        }
示例#6
0
 protected abstract void DrawGeometry(Matrix view, Matrix projection, object[] optionalParameters, EffectConfigurer effectConfigurer, RendererParameters instance);