Показать сообщение отдельно
Старый 26.03.2011, 22:54   #4
ІГРОГРАЙКО
ПроЭктировщик
 
Аватар для ІГРОГРАЙКО
 
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений
(для 24 пользователей)
Радость Ответ: Рисование примитивов XNA

Сообщение от Mr_F_ Посмотреть сообщение
полигоны надо сортировать от дальних к ближним, чтобы альфа работала
учитывая что они у тебя пересекаются все друг другом... то придётся изначально в геометрии каждый разделить на кучу маленьких полигонов, полученных при пересечениях и сортировать уже их
либо авось сойдёт просто сортировать и рендерить без записи Z
1. А как сортировать полигоны? Ти имееш в виду, чтоб DrawTriangleStrip() Отрисововала в первую очередь полигодны которие поближе к камере?? Или ето надо чото с шейдером сделать...?
2. А как ето без записи Z???

Сообщение от pax Посмотреть сообщение
Я бы попробовал выключить zwrite и рисовать в два прохода - сначала внутренние грани, потом наружные.
Как выключить zwrite?? И на счет граней - Использовать:
GraphicsDevice.RenderState.CullMode = CullMode.CullClockwiseFace;
GraphicsDevice.RenderState.CullMode = CullMode.CullCounterClockwiseFace;
???

Как решить проблему с неверной отрисовкой полигонов?
Когда я попробовал сделать так:
        private void DrawTriangleStrip(Vector3 sizes)
        {
            effect.Begin();
            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Begin();
                for (int nx = 0; nx < sizes.Y; nx++)
                {
                    GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionTexture>(
                        PrimitiveType.TriangleStrip,
                        pointListNX,
                        nx * 4,  // vertex buffer offset to add to each element of the index buffer
                        4,  // number of vertices to draw
                        triangleStripIndicesNX,
                        nx,  // first index element to read
                        4   // number of primitives to draw
                    );
                }

                for (int ny = 0; ny < sizes.X; ny++)
                {
                    GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionTexture>(
                        PrimitiveType.TriangleStrip,
                        pointListNY,
                        ny * 4,  // vertex buffer offset to add to each element of the index buffer
                        4,  // number of vertices to draw
                        triangleStripIndicesNY,
                        ny,  // first index element to read
                        4  // number of primitives to draw
                    );
                }

                for (int nz = 0; nz < sizes.Z; nz++)
                {
                    GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionTexture>(
                        PrimitiveType.TriangleStrip,
                        pointListNZ,
                        nz * 4,  // vertex buffer offset to add to each element of the index buffer
                        4,  // number of vertices to draw
                        triangleStripIndicesNZ,
                        nz,  // first index element to read
                        4   // number of primitives to draw
                    );
                }
                pass.End();
            }
            effect.End();
        }
Оно отрисовало верное количество полигонов, но нарисовало и много лишнего:
Нажмите на изображение для увеличения
Название: Image1.jpg
Просмотров: 1255
Размер:	55.5 Кб
ID:	13117Нажмите на изображение для увеличения
Название: Image2.jpg
Просмотров: 1211
Размер:	53.1 Кб
ID:	13118
Что здесь не так я не понимаю... Прежняя версия DrawTriangleStrip() на мой взгляд правильная, но неправильно работает... Посоветуйте мне что нибудь на счет етого...
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
(Offline)
 
Ответить с цитированием