XNA i znikające powierzchnie

0

Witam,mam pewien problem z XNA,otóż mam następującą klasę Floor

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace XNA_First_Person_Camera
{
    class Floor
    {
        //Atrybuty - Attributes
        private int floorWidth;
        private int floorHeight;
        private VertexBuffer floorBuffer;
        private GraphicsDevice device;
        private Color[] floorColors = new Color[2] { Color.White, Color.Black };
        //Konstruktor
        public Floor(GraphicsDevice device, int width, int height)
        {
            this.device = device;
            this.floorWidth = width;
            this.floorHeight = height;
            BuildFloorBuffer();
        }
        //Buduje Vertex Buffer
        private void BuildFloorBuffer()
        {
            List<VertexPositionColor> vertexList = new List<VertexPositionColor>();
            int counter = 0;
            //Pętla tworząca podłoge
            for (int x = 0; x < floorWidth; x++)
            {
                counter++;
                for (int z = 0; z < floorHeight; z++)
                {
                    counter++;

                    //Pętla tworząca wierzchołki
                    foreach (VertexPositionColor vertex in FloorTile(x, z, floorColors[counter % 2]))
                    {
                        vertexList.Add(vertex);
                    }
                }
            }
            //Tworzy Buffer
            floorBuffer = new VertexBuffer(device,VertexPositionColor.VertexDeclaration,vertexList.Count,BufferUsage.None);
            floorBuffer.SetData<VertexPositionColor>(vertexList.ToArray());
        }
        //Definiuje pojedyńczą komórkę w naszej podłodze
        private List<VertexPositionColor> FloorTile(int xOffset, int zOffset, Color TileColor)
        {
            List<VertexPositionColor> vList = new List<VertexPositionColor>();
            vList.Add(new VertexPositionColor(new Vector3(0 + xOffset, 0, 0 + zOffset), TileColor));
            vList.Add(new VertexPositionColor(new Vector3(1 + xOffset, 0, 0 + zOffset), TileColor));
            vList.Add(new VertexPositionColor(new Vector3(0 + xOffset, 0, 1 + zOffset), TileColor));
            vList.Add(new VertexPositionColor(new Vector3(1 + xOffset, 0, 0 + zOffset), TileColor));
            vList.Add(new VertexPositionColor(new Vector3(1 + xOffset, 0, 1 + zOffset), TileColor));
            vList.Add(new VertexPositionColor(new Vector3(0 + xOffset, 0, 1 + zOffset), TileColor));
            return vList;
        }
        //Metoda rysująca
        public void Draw(Camera camera, BasicEffect effect)
        {
            effect.VertexColorEnabled = true;
            effect.View = camera.View;
            effect.Projection = camera.Projection;
            effect.World = Matrix.Identity;

            //Pętla rysująca Wierzchołki
            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Apply();
                device.SetVertexBuffer(floorBuffer);
                device.DrawPrimitives(PrimitiveType.TriangleList, 0, floorBuffer.VertexCount / 3 );
            }
        }
    }
}

I gdy się włącza grę to wyświetla się szachownica po czym za pośrednictwem innej klasy mogę się po niej poruszać.na razie wszystko działa ok,ale jeżeli spojrzę na szachownice pod innym kątem,tak aby np.widzieć ją od dołu,albo zobaczyć bok,to ona znika,a ja starałbym się tego unikać,wie ktoś jakich zmian muszę dokonać ?

0

W obiektach 3d widok ściany z tyłu zawsze nie jest rysowany . Takie FPS protection bo po co rysować tył ściany w sześcianie, i tak go nie widać więc po co rysować. Boku też nie widać bo bok ściany nie ma grubości 1 piksela. On ma grubość 0 pixela. Dla obiektów 3d żeby uzyskać taki efekt jak chcesz musisz rysować sześcian o wysokości 1 pixela. Wtedy będziesz mógł oglądać bok i spód.

1

W swoim programie rysujesz 1 ścianę, podłogę , powierzchnię. Zrób ich jeszcze 5 ale pamiętaj o odpowiednich wierzchołkach tak aby ściany tworzyły sześcian.

BTW.. jesteś pewny, że użytkownik musi widzieć to co dzieje się pod podłogą.... Jeśli nie to ogranicz obrót kamery do pewnego kąta

Troszkę info o grafice 3d w WPF-e. W sumie ta wiedza odnosi się do grafiki 3d w komputerach. http://kindohm.com/technical/WPF3DTutorial.htm

1 użytkowników online, w tym zalogowanych: 0, gości: 1