XNA i znikające powierzchnie

XNA i znikające powierzchnie
Riw
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 9 lat
  • Lokalizacja:Gdynia
  • Postów:201
0

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

Kopiuj
 
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ć ?

edytowany 1x, ostatnio: Riw
wedlock
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Bartoszyce
  • Postów:180
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.

Riw
A jak to zrobić ?
wedlock
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Bartoszyce
  • Postów:180
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

Riw
a wiesz może jak zrobić żeby kamera nie mogła przez tą ścianę przenikać ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.