article search result of 'VertexBuffter' : 1

  1. 2010.12.04 [XNA3.1 index buffer vertex buffter] 교과서와는 다른 버퍼메모리 사용법 (158)

[XNA3.1 index buffer vertex buffter] 교과서와는 다른 버퍼메모리 사용법


한참을 방황했다.. 버퍼가 안되서..

DrawUserIndexPrimitives  vs  DrawIndexPrimitives   라는 주제를 한번쯤 보았을것이다.

물론 후자쪽이 빠르다. 그런데, 가지고 있는 한글번역판 책들은 죄다 xna1.0 버전이라,, 그런지

xna3 에서는 사용법이 달랐다.




Created with colorer-take5 library. Type 'csharp'

public void setVertices()
        {
            
           // vertices 들 ~//
            //vertexBuff 라는 멤버 변��가 있겠죠..
            vertexBuff = new VertexBuffer(device.GraphicsDevice, VertexPositionNormalTexture.SizeInBytes * vertices.Length, BufferUsage.WriteOnly);
            vertexBuff.SetData(vertices);
        }
        public void setIndices()
        {

           //index들  ~//
            //indexBuff 라는 멤버 변��가 있겠죠..
            indexBuff = new IndexBuffer(device.GraphicsDevice, typeof(int), indices.Length, BufferUsage.WriteOnly);
            indexBuff.SetData<int>(indices);
        }
        

         //메인클��스에 update()에 넣어야 함
        public void update()
        {
            device.GraphicsDevice.Vertices[0].SetSource(vertexBuff, 0, VertexPositionNormalTexture.SizeInBytes);
            device.GraphicsDevice.Indices = indexBuff;
        }

        //메인클��스에 draw()에 넣어야함
        public void render(Matrix view , Matrix projection)
        {
            effect.World = Matrix.Identity; ;
            effect.View = view;
            effect.Projection = projection;

            effect.Begin();

            /* //여러개일경우
            foreach (EffectPass p in effect.CurrentTechnique.Passes)
            {
                p.Begin();
                device.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, vertices.Length, 0, indices.Length / 3);
                p.End();
            }*/

            effect.CurrentTechnique.Passes[0].Begin();
            device.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, vertices.Length, 0, indices.Length / 3);
            effect.CurrentTechnique.Passes[0].End();

            effect.End();
           
        }
물론 여러가지 방법이야 있겠지만 꾀나 골머리를 썩은 문제이므로 일단 이대로 ..

update 부분은 render 에도 해도 되나 그냥 로직과 분리를 하고 싶은 마음에서 한거다.

한가지 덧붙이자면

effect.World 라던지 effect.View 라던지 effect.Projection 은 변경사항이 없다면

따로 메소드를 빼서 루프를 돌리지 않는 방법도 있다.





( 첫째도 퍼포먼스 둘째도 퍼포먼스 셋째는 수면... ? )

Yamecoder 야매코더_
XNA 2010.12.04 02:20
Powerd by Tistory, designed by criuce
rss