Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Свой 3D формат, я запутался... 
:(
    Опции темы
ZC1989
Дата 29.12.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



arilou, у меня повремянка, и качать 18 (или сколько там) мегов, мне не оч удобно...  да и вопрос помоему не такой уж сложный smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
arilou
Дата 29.12.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Чисто для интереса - Mesh Serializer из Огра:



Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  OgreMeshSerializerImpl.cpp 87,03 Kb


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Rickert
Дата 30.12.2006, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Цитата(ZC1989 @  29.12.2006,  16:30 Найти цитируемый пост)
я по примеру Bitter'a начил писать формат, но возник вопрос такой: у меня объект состоит из нескольких подъобъектов, а вершинный буфер для кадого объекта свой (в классе инициализируется) так вот какое колличество мне памяти выделять, просто посмотреть максимальное их колличество в каждом подобъекте и выбрать большее? или надо как-то по другому..

Я так понял, что у тебя объект состоит из нескольких объектов. Например человек состоит из рук, ног, головы - это всё отдельные объекты.
тогда ты идёшь по всем объектам, получаешь кол-во трианглов в каждом и умножаешь на 3 - получаешь кол-во вершин. это если ты используешь трианглы. А если у тебя все полигоны с разным количеством вершин - то тебе надо брать кол-во вершин каждого и суммировать их у всех подобъектов. Это ты получишь кол-во вершин. Но тебе ведь надо выделить память под массив значений координат, тогда ты должен полученное число ещё умножить на 3 - XYZ - три координаты.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
ZC1989
Дата 30.12.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Rickert, да объект состоит из нескольких объектов. а буфер на это всё один, но какой смысл суммироваться все вершины? ведь каждый подъобъект я отрисовываю поочереди, можно ли в таком случае, если в первом объекте 100 вершин, а во втором 200 завести буфер на 200? при отрисовке первого объекта я заполню его только ста вершинами и их отрисую, а потом в этот буфер скину 200 вершин... или это не правельно?


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Bitter
Дата 30.12.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Нет, не правильно. Будет всё сильно тормозить, так как для заполнения буфера на каждом кадре, его нужно запирать, а это "тормознутая" операция. Надо делать так, как сказал Rickert, т.е. подготовить буфер сразу для всех вершин. А потом рисовать какую-то его часть.
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 30.12.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Bitter, но я расчитываю производить некоторые действия с вершинами (перемещения к римеру) для этого же то же надо открывать и закрывать буфер

Кстати, в твоеё редмишке (из архива) было написано, что нормаль полученные из ASE файла не правельны, как тогда можно для треугольника их раситать?

Это сообщение отредактировал(а) ZC1989 - 30.12.2006, 17:01


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Rickert
Дата 30.12.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



ZC1989, во-первых - никто не делает объект состоящий из нескольких объектов. Как ты анимацию собираешься организовывать?
Во-вторых - такты процессора намного важнее количества использованной памяти


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
DragonFire
Дата 31.12.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: 5
Всего: 9



Цитата(ZC1989 @  30.12.2006,  17:00 Найти цитируемый пост)
Кстати, в твоеё редмишке (из архива) было написано, что нормаль полученные из ASE файла не правельны, как тогда можно для треугольника их раситать?

http://forum.vingrad.ru/index.php?showtopi...st&p=953774


--------------------
PM MAIL ICQ   Вверх
ZC1989
Дата 31.12.2006, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



DragonFire, спасибо! то что надо! smile 



С наступающим ВСЕХ!!! smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Bitter
Дата 31.12.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Цитата

я расчитываю производить некоторые действия с вершинами (перемещения к римеру)

Для этого используют матрицы трансформаций. Хотя с помощью матриц, не сделаешь, например анимацию воды или морфинг. В этом недостаток буфера вершин и соответственно всего DirectX. Хотя может я просто не знаю как это делать матрицами.
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 31.12.2006, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Bitter, я не хочу матрицы использовать дирекстовые... да и мой метод, когда на каждый кадр я открываю и закрываю буфер не тормозит, фпс на месте остаётся... подъобъектов на 1500 полигонов

Добавлено @ 01:21 
правда они без текстур, да и не все параметры заданы... но мне кажется для игры достаточно, ведь яж не только изменять размеры собираюсь


Rickert, а что с анимацией?! я не зарекаюсь, но думаю о скелетной анимации, а мне парень, рисующий 3Д описал эту анимацию как привязку некоторых объектов к "ключам" неким точкам (на типе внетренней системы координат)


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Bitter
Дата 31.12.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



ZC1989, 1500 полигонов это же понт! Одна только более менее ровная сфера уже 1000 полигонов. А если планету делать, то еще и полупрозрачная атмосфера таких же размеров. Если использовать матрицы, 10-15 тысяч с текстурами, полупрозрачностью и прочей ерундой отлично работает. 

Rickert, как это никто не делает? А как же по твоему делается разрушение объекта? Например, разрушение стены из кирпечей или отпадание колес автомобиля? Именно так. Автомобиль - массив из подобъектов (колеса, двери и т.д.). Каждый подобъект содержит матрицу трансформаций. Чтобы сделать анимацию колеса, например, изменяешь его матрицу одной строчкой в программе и всё! Я делал анимацию человекообразного робота именно матрицами. Он умел ходить как человек и падать, когда его убиваешь.
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 31.12.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Bitter, в прошлых попытка сделать draw'илку объекта у меня уже на 500 полигонов фпс падало в 2 раза, тем более для моей сцены я не думаю что отрисовка всех объектов разом привысит 3000 полигонов. я конечно попробую забивать все вершины в один буфер, но как тогда производить перемещение внутренней матрицы?! раньше я передавал в функцию вектор направления и точку центра, получал глобальные координаты, а сейчас как? smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Bitter
Дата 31.12.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Напимер, ты нарисовал объект в Max'e с координатами 0,0,0.
Импортировал его.
В инициализации пишешь Matrix := IdentityMatrix;  Это сброс матрицы.
Чтобы переместить объект в пространстве пишешь:

 Matrix._41 := x; Matrix._42 := y;  Matrix._43 := z;

 Перед рендерингом пишешь D3Device.SetTransform(D3DTS_WORLD, Matrix);
 
А потом уже рендеришь функцией DrawPrimitive ... И всё. Объект отрисуется в координатах x,y,z

Если нужно повернуть объект вокруг оси пишешь:

 SetRotateXMatrix(Matrix, Angle);  // Поворот по оси Х
 
 Angle - угол в радианах 

Масштаб:

 SetScaleMatrix(Matrix, x, y, z)
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 1.1.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



DragonFire, я по твоей статье сделал функцию получения нормалей, все расчёты правельны, но почему-то получается некая фигня... я прикрепил скреншот того что мне кажется странным...

а вот кусочек кода где нормаль присываиваются к вершинам

Код

if(RendSub.Faces.size() > 0)
        {
            CountPoint    = 0;
            VertBuf -> Lock(0, 3 * RendSub.Faces.size(), (void**)&VertList, 0);
                // Перебор лиц (треугольников
            for(iFaces = RendSub.Faces.begin(); iFaces != RendSub.Faces.end(); ++iFaces)
            {
                FaceTemp = *iFaces;

                VertList[CountPoint].Point        = FaceTemp.Vertex[0];
                VertList[CountPoint++].Normal    = FaceTemp.Normal;

                VertList[CountPoint].Point        = FaceTemp.Vertex[1];
                VertList[CountPoint++].Normal    = FaceTemp.Normal;

                VertList[CountPoint].Point        = FaceTemp.Vertex[2];
                VertList[CountPoint++].Normal    = FaceTemp.Normal;
            }

            VertBuf -> Unlock();

                // Отрисовка
            //DXDevace -> SetRenderState(D3DRS_LIGHTING, FALSE);
            //DXDevace -> SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(0, 140, 140));
            DXDevace -> SetFVF(VertFormat3DO);
            DXDevace -> SetStreamSource(0, VertBuf, 0, sizeof(Vertex3DO));
            DXDevace -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, RendSub.Faces.size());
                // На всякий очищаю массив
            VertList = NULL;
        }


так как источник света определён в другой части проги приводить его не буду

Это сообщение отредактировал(а) ZC1989 - 1.1.2007, 17:43

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  bad_normal.jpg 41,42 Kb


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0880 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.