Book Image

XNA 4 3D Game Development by Example: Beginner's Guide

By : Kurt Jaegers
Book Image

XNA 4 3D Game Development by Example: Beginner's Guide

By: Kurt Jaegers

Overview of this book

Move beyond the world of flat 2D-based game development and discover how to create your own exciting 3D games with Microsoft XNA 4.0. Create a 3D maze, fire shells at enemy tanks, and drive a rover on the surface of Mars while being attacked by alien saucers."XNA 4 3D Game Development by Example: Beginner's Guide" takes you step-by-step through the creation of three different 3D video games with Microsoft XNA 4.0. Learn by doing as you explore the worlds of 3D graphics and game design.This book takes a step-by-step approach to building 3D games with Microsoft XNA, describing each section of code in depth and explaining the topics and concepts covered in detail. From the basics of a 3D camera system to an introduction to writing DirectX shader code, the games in this book cover a wide variety of both 3D graphics and game design topics. Generate random mazes, load and animate 3D models, create particle-based explosions, and combine 2D and 3D techniques to build a user interface."XNA 4 3D Game Development by Example: Beginner's Guide" will give you the knowledge to bring your own 3D game creations to life.
Table of Contents (16 chapters)
XNA 4 3D Game Development by Example Beginner's Guide
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface

Time for action – adding the ReadHeightMap() method


  1. 1. Add the Height Map region to the Terrain class, shown as follows:

    #region Height Map
    private void ReadHeightMap(
        Texture2D heightMap, 
        int terrainWidth, 
        int terrainHeight, 
        float heightScale)
    {
        float min = float.MaxValue;
        float max = float.MinValue;
    
        heights = new float[terrainWidth, terrainHeight];
    
        Color[] heightMapData = new Color[
            heightMap.Width * heightMap.Height];
    
        heightMap.GetData(heightMapData);
        for (int x = 0; x < terrainWidth; x++)
            for (int z = 0; z < terrainHeight; z++)
            {
                byte height = heightMapData[x + z * terrainWidth].R;
                heights[x, z] = (float)height / 255f;
    
                max = MathHelper.Max(max, heights[x, z]);
                min = MathHelper.Min(min, heights[x, z]);
            }
    
        float range = (max - min);
    
        for (int x = 0; x < terrainWidth; x++)
            for (int z = 0; z < terrainHeight; z++)
            {
               ...