コード例 #1
0
        public void DrawTerrainAsset(TerrainBlock asset)
        {
            SamplerState s = new SamplerState();
            effect.View = viewMatrix;
            effect.Projection = projectionMatrix;
            s.AddressU = TextureAddressMode.Wrap; s.AddressV = TextureAddressMode.Wrap;
            Game.GraphicsDevice.SamplerStates[0] = s;
            Game.GraphicsDevice.RasterizerState = new RasterizerState() { CullMode = CullMode.None };
            //effect.FogEnabled = true;
            //effect.FogStart = 120f;
            //effect.FogEnd = 150f;
            //effect.FogColor = Color.CornflowerBlue.ToVector3();
            effect.TextureEnabled = true;
            effect.Texture = asset.GetTexture();
            effect.EnableDefaultLighting();
            effect.AmbientLightColor = new Vector3(0.5f, 0.5f, 0.5f);
            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Apply();
                game.GraphicsDevice.SetVertexBuffer(asset.GetVertexBuffer());
                game.GraphicsDevice.Indices = asset.GetIndexBuffer();
                game.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, asset.GetVerticesLength(), 0, asset.GetIndicesLength() / 3);
            }

            //base.Draw(gameTime);
        }
コード例 #2
0
ファイル: Map.cs プロジェクト: ewencluley/Basic-Game-Engine
        private TerrainBlock[] AdjustJoinVertices(TerrainBlock[] terrainSegments)
        {
            for (int sD = 0; sD < segmentsDown; sD++)
            {
                for (int sA = 0; sA < segmentsAcross; sA++)
                {

                    TerrainBlock currentBlock = terrainSegments[(sD * sA) + sA];
                    if(sA == 0)
                    {/*left hand edge piece*/
                        if (sD == 0)
                        {/*top left corner*/
                        }
                        else if (sD == segmentsDown - 1)
                        {/*bottom left corner*/
                        }
                        else
                        {/*left edge*/
                        }
                    }
                    else if (sA == segmentsAcross - 1)
                    { /*right hand edge piece*/
                        if (sD == 0)
                        {/*top right corner*/
                        }
                        else if (sD == segmentsDown - 1)
                        {/*bottom right corner*/
                        }
                        else
                        {/*right edge*/
                        }
                    }
                    else
                    {
                        if (sD == 0) { /*top edge piece*/}
                        else if (sD == segmentsDown - 1) { /*bottom edge piece*/}
                        else { /* middle piece*/

                        }
                    }
                }
            }
            return terrainSegments;
        }
コード例 #3
0
ファイル: Map.cs プロジェクト: ewencluley/Basic-Game-Engine
        //Splits a large height map texture into a variety of smaller ones.
        //Size is defined by TerrainBlock and should be limited to the maximum drawable verticies in one pass
        private TerrainBlock[] splitMap(Texture2D heightMap)
        {
            segmentsAcross = heightMap.Width / TerrainBlock.BLOCK_VERT_WIDTH;
            segmentsDown = heightMap.Height / TerrainBlock.BLOCK_VERT_WIDTH;
            TerrainBlock[] terrainBlocks = new TerrainBlock[segmentsAcross * segmentsDown];
            for (int sD = 0; sD < segmentsDown; sD++)
            {
                for (int sA = 0; sA < segmentsAcross; sA++)
                {
                    Color[] sectionHeightMapData = new Color[TerrainBlock.BLOCK_VERT_WIDTH * TerrainBlock.BLOCK_VERT_WIDTH];
                    int offsetX =0 , offsetY = 0;
                    if (sA > 0) offsetX = 1;
                    if (sD > 0) offsetY = 1;
                    heightMap.GetData<Color>(0, new Rectangle((sA * TerrainBlock.BLOCK_VERT_WIDTH)-offsetX, (sD * TerrainBlock.BLOCK_VERT_WIDTH)-offsetY, TerrainBlock.BLOCK_VERT_WIDTH, TerrainBlock.BLOCK_VERT_WIDTH), sectionHeightMapData, 0, TerrainBlock.BLOCK_VERT_WIDTH * TerrainBlock.BLOCK_VERT_WIDTH);

                    Texture2D mapSegment = new Texture2D(game.GraphicsDevice, TerrainBlock.BLOCK_VERT_WIDTH, TerrainBlock.BLOCK_VERT_WIDTH);
                    mapSegment.SetData<Color>(sectionHeightMapData);

                    terrainBlocks[sD * segmentsAcross + sA] = new TerrainBlock(game,mapSegment);
                    terrainBlocks[sD * segmentsAcross + sA].Initialize();
                    terrainBlocks[sD * segmentsAcross + sA].InitalizeTerrain(new Vector3(sA*TerrainBlock.REAL_BLOCK_WIDTH, 0, sD*TerrainBlock.REAL_BLOCK_WIDTH));
                }
            }
            return terrainBlocks;
        }