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

Поиск:

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


Опытный
**


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

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



Вот такая вот делема: начал было писать свой формат... для начала решил что надо бы хотя бы из OBJ сделать свой файл... написал программку експорта, там я брал структуру ОБДЖА и перегонял в свою... в итоге у меня не было разделений по объектам (как в ОБДЖЕ) и вся эта куча треугольников была обном объектом...

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

я тут думаю, может надо соблюдать структуру того же ОБДЖА? тобишь создавать при чтении столько боъектов сколько в первоисточнике и поочереди их рендерить? подскажите, я уже запутался во всём этом... smile 

ЗЫ: DirectX 9, C++


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


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


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

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



Структуру соблюдать не нужно - это точно. Ты просто криво экспортёр написал. Думай, ищи ошибку.

Это сообщение отредактировал(а) Rickert - 1.11.2006, 13:53


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


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


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

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



ZC1989, а .X формат не устраивает? 


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


Опытный
**


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

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



arilou, я стараюсь от этих "шаблонов" как Х файл уйти, да и попробовать надо, не помешает...


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


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


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

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



ZC1989, я к чему спрашивал: практически всегда полезно не просто задавать вопрос, а описывать всю ситуацию. Тебе не хватает ф-ти .X файла? Или ты делаешь cross-platform формат? Или что-то еще...? 

Не помешало бы привести код, и картинку более сложного объекта для начала.


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


Опытный
**


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

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



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

формат не кросс-платформенный...  просто попытка своё создать... и библиотеки к нему


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


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


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

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



ZC1989, так трудно сказать. Ты определил, в каком именно месте происходит зависание? Отладчиком прошелся?


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


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


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

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



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


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


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


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

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



Если ты рисуешь в 3DMax, то лучше всего использовать формат ASE. Это очень удобный, на мой взляд, формат. Я написал конвектор без проблем. Потом создал 3D движок, который загружает уже файлы нужного мне формата и теперь клепаю 3D проги тока-так. Правда, есть и там проблемка: файлы ASE неправильно хранят нормали объектов. Точнее, если ты создашь, скажем, шарик, а потом его экспортируешь а ASE, то всё вроде нормально. Но стОит этот шарик повернуть... В общем нормали приходится расчитывать самому. И еще описание вершин в ASE приводится ПРОТИВ часовой стрелки.

Если хочешь, могу тебе выслать эту прогу и движок (406 Кб). Но, дело в том, что сам конвектор около 2000 строк текста и движок - около 700. А как извесно нет ничего хуже, чем разбираться в чужих прогах. Я, конечно, напишу тебе ReadMe, но лучше, писать самому.
PM MAIL ICQ Skype   Вверх
Bitter
Дата 10.11.2006, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Да, забыл предупредить. Всё это написано на Delphi 7, а движок использует Direct3D
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 10.11.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bitter, если не трудно пришли пожалуйста... мыло [email protected], в коде попробую разобраться... smile 


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



Цитата(Bitter @  10.11.2006,  01:20 Найти цитируемый пост)
описание вершин в ASE приводится ПРОТИВ часовой стрелки

Правильно, т.к. отсекаются невидимые полигоны дефолтно с вершинами по часовой стрелке.

PM MAIL   Вверх
Bitter
Дата 10.11.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата

отсекаются по часовой стрелке

:-) я просто всегда думал, что наоборот


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


Опытный
**


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

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



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


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


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


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

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



ZC1989, загляни в формат меша для Огра. Очень, знаешь ли, занимательно-поучительно  smile 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
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   Вверх
DragonFire
Дата 1.1.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ZC1989
Долго силился вникнуть в код но понятно только в общих чертах, т.к. сам пишу на Delphi (тут не особенно проблем) и OpenGL (а вот директа не совсем ясна).

Я так понял ты сначало задаешь все вершины с нормалями в буфер, потом его отрисовываешь. По 
причине, описанной выше точно сказать не могу почему так, но есть идея одна.
Возможно ты к двем треугольникам лежащим в одной плоскости строишь разные нормали. Одну как бы "вверх", другую "вниз". У меня была такая проблема. Все зависит от последовательности вершин, пихаемых в функцию.  

На всякий случай приведу свой код, который у меня работает верно:
Код

 for i:=1 to Count do begin
    glBegin(GL_TRIANGLES);
      Normal:=Normal3D(
      vertexes[planes[i][0]].x,vertexes[planes[i][0]].y,vertexes[planes[i][0]].z,
      vertexes[planes[i][1]].x,vertexes[planes[i][1]].y,vertexes[planes[i][1]].z,
      vertexes[planes[i][2]].x,vertexes[planes[i][2]].y,vertexes[planes[i][2]].z
      );
      glNormal3f(Normal.X,Normal.Y,Normal.Z);
      glVertex3f(vertexes[planes[i][0]].x,vertexes[planes[i][0]].y,vertexes[planes[i][0]].z);
      glVertex3f(vertexes[planes[i][1]].x,vertexes[planes[i][1]].y,vertexes[planes[i][1]].z);
      glVertex3f(vertexes[planes[i][2]].x,vertexes[planes[i][2]].y,vertexes[planes[i][2]].z);
    glEnd;
  end;

Тут Normal это просто вектор, тоесть посути запись x,y,z:extended...


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


Опытный
**


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

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



DragonFire,  так у меня то же вектор это 3 координты (xyz, ijk... как угодно) просто на именно этой грани такая запарка, но о последовательности я уверен что она зде правильно описана (против часово)... ладно, с другими гранями вроде нормально, возможно просто точку у одного увело вниз... буду искать сам... потом расскажу об успехах smile 


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


Опытный
**


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

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



А как в директе источник света задается? Может дело в нем?


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


Опытный
**


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

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



DragonFire, нет, сет не даёт ошибки 100%, это что-то с нормалью или моделью...

но всё равно, вот мой свет
Код

D3DLIGHT9                    plight;
D3DXVECTOR3                    vecDir;
...
    // LIGHT'S
    pDevice -> SetRenderState(D3DRS_LIGHTING, TRUE);
    ZeroMemory (&plight, sizeof(D3DLIGHT9));
    plight.Type = D3DLIGHT_DIRECTIONAL;
    plight.Diffuse.r  = 0.85f;
    plight.Diffuse.g  = 0.85f;
    plight.Diffuse.b  = 0.85f;
    plight.Range = 1000.0f;

    vecDir = D3DXVECTOR3(Px, Py - 700, Pz - 100);
    D3DXVec3Normalize((D3DXVECTOR3*)&plight.Direction, &vecDir);
    pDevice -> SetLight(0, &plight);
    pDevice -> LightEnable(0, true);



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


Опытный
**


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

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



DragonFire, извини за флуд! я прав был, это не ошибки расчётов, просто парень рисовавшый объект смустил точки! с нормалями всё О.К. но всёж спасибо! smile 


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


Опытный
**


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

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



Ура ура)))


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


Опытный
**


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

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



Решил последовать совету и перевёл все точки в один буфер, потом, разобрался с матрицами, теперь могу делать в пяти строчках все, что мне нужно было, оч удобно! На радостях решил загрузить один файлик, там описан «микроб», состоит он из 22000 полигонов, собс-но это где-то 66000 точек.
Перевёл в свой формат, всё пучком, когда загружается сцена, получается такая фишка, что нельзя разом увидеть этот «микроб», его попросту нет на экране, но если повертеть камерой так что в кадре не весь он будет, а половина, то он начинает отрисовываться… от чего такая кривизна, от того что это один объект целиковый или я что-то нафлудил?

ЗЫ: грубо говоря «микроб» это сфера с торчащими из неё ножками, оч похожа на мину глубоководную со времён ВМВ.



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


Опытный
**


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

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



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

 это я вот к чему, ты писал что нормали в ASE описанные не верны, но может этот как раз тот случай когда для каждой точки нормали раные? тем более, если не ошибаюсь, ты говорил нормали "испортятся" если сферу повернуть, но, помоему, они и должны будут поменяться!

есть в этом бредовом рассуждении хоть капля здравого смысла? smile 


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


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


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

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



smile  Всё это конечно, правильно. Но дело как раз в том, что при повороте сферы нормали НЕ меняются. В этом и есть запара. Т.е. объект поворачивается, а нормали нет. По этому приходится их расчитывать самому. А вообще, конечно, надо для каждой точки свою нормаль иметь. По этому шарики всегда получаются круглыми (сглаженными), даже при малых кол-вах полигонов. 
По моему в доке, который я тебе присылал, есть описание подобъекта, так вот там как раз каждая точка имеет свою нормаль. Если надо, выложу код для расчета сглаженных нормалей по заданному углу (например, сглаживать, если угол <50 градусов). Но он на Delphi (хотя можно попробовать в словесной форме написать код).
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 4.1.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bitter, я мутно представляю как для точек расчитывать, так что буду раб! и в словесной форме, как-то лучше получается, хоть сразу знаю что делать надо...

+ у меня проблемы какие-то при экспорте в ASE, объект получается инвертирован слева-на-право, и поднят на 90 градусов


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


Опытный
**


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

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



Цитата(Bitter @  4.1.2007,  03:34 Найти цитируемый пост)
Если надо, выложу код для расчета сглаженных нормалей по заданному углу (например, сглаживать, если угол <50 градусов). Но он на Delphi (хотя можно попробовать в словесной форме написать код). 

Выложи плиз))


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


Опытный
**


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

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



ZC1989, для справки: когда каждая грань объекта имеет 1 нормаль, обычно происходит плоская закраска (flat); гладкие закраски (гуро, фонга, последний точнее и заметно лучше выглядит) происходят из расчета того, что каждая точка грани имеет свою нормаль.

При модификации объекта (повороте, непропорциональном сжатии/растяжении) массив нормалей должен соответственно быть модифицирован.
Можно пересчитывать нормали при трансформации каждый раз.
Нахождение нормали к грани можно получить следующим образом:
Код

   For i := 0 to FacesCnt-1 do 
   begin
     tVector1 := FVertexes[FFaces[i].v1];
     tVector2 := FVertexes[FFaces[i].v2];
     tVector3 := FVertexes[FFaces[i].v3];

     vx1 := tVector1.x - tVector2.x;
     vy1 := tVector1.y - tVector2.y;
     vz1 := tVector1.z - tVector2.z;

     vx2 := tVector2.x - tVector3.x;
     vy2 := tVector2.y - tVector3.y;
     vz2 := tVector2.z - tVector3.z;

     nx := vy1*vz2 - vz1*vy2;
     ny := vz1*vx2 - vx1*vz2;
     nz := vx1*vy2 - vy1*vx2;

     v := SQRT (nx*nx + ny*ny + nz*nz);
     IF v = 0 THEN v := 1; // проверка на нулевую длину

     // Получаем унитарный вектор нормали 
     FNormals[i].x := nx / v;
     FNormals[i].y := ny / v;
     FNormals[i].z := nz / v;
  end;


Получить нормаль к каждой из вершин грани можно, используя нормали к смежным граням, вычисленные по алгоритму, приведенному выше.  smile 


--------------------
...все в мире относительно
PM   Вверх
ZC1989
Дата 4.1.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Nicholas_S, впринцыпе оно и есть, я нашёл у себя статью где это опысывалось...

если кому надо то суть такая: надо суммировать нормали всех плоскостей содержащих эту точку, потом нормализовать все вектора и вуаля, список нормалей индивидуальных для кажой точки! а изначально, перед началом суммирования, надо все нормальные вектора прописать нулевыми  smile   -0 всё гениалное просто!


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


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


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

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



ZC1989, именно так! Вот то, что обещал (словесное описание в качестве коментариев):

Код

function CrossProduct(a, b: TVector): TVector;
begin
 Result.x := a.y * b.z - a.z * b.y;
 Result.y := a.z * b.x - a.x * b.z;
 Result.z := a.x * b.y - a.y * b.x;
end;

procedure TForm2.CalcNormals;
var m:Single;
    u,l,k,i,j:integer;
    p,q,d,a,b,c:TVector;
    Normals:array of TVector;
begin
 for i:=1 to Object.SubCount do // Количество подообъектов
 begin

  {сначала расчитываем не сглаженные нормали}

  SetLength(Normals,Object.SubObjects[i-1].FaceCount);  // установить длинну массива Normals = количество граней

  for j:=1 to Object.SubObjects[i-1].FaceCount do
  begin
   a:=Object.SubObjects[i-1].Faces[j-1].Vertexs[1];     // a, b, с - вершины текущей грани
   b:=Object.SubObjects[i-1].Faces[j-1].Vertexs[2];     // 
   c:=Object.SubObjects[i-1].Faces[j-1].Vertexs[3];

   p:=Vector(b.x-a.x,b.y-a.y,b.z-a.z);                  // p, q - вектора (b-a) и (c-a)
   q:=Vector(c.x-a.x,c.y-a.y,c.z-a.z);
   Normals[j-1]:=NormalizeVec(CrossProduct(p,q));       // получаем нормаль к грани (CrossProduct описан выше)
  end;

  {теперь сглаживаем их. смысл в том, чтобы найти совпадающие вершины и просуммировать их нормали}

  for j:=1 to Object.SubObjects[i-1].FaceCount do
   for k:=1 to 3 do // to 3, потому что 3 вершины в каждой грани
   begin
    a:=Object.SubObjects[i-1].Faces[j-1].Vertexs[k]; // выбираем очередную вершину
    b:=Normals[j-1];                                 // b - нормаль к текущей грани

    for l:=1 to Object.SubObjects[i-1].FaceCount do  // в этом цикле будем искать одинаковые вершины
    begin

     if j<>l then                     // если i != j, т.е. рассматриваются разные грани
      for u:=1 to 3 do
      begin
       c:=Object.SubObjects[i-1].Faces[l-1].Vertexs[u];

       if (c.x=a.x)and(c.y=a.y)and(c.z=a.z) then     // если вектор a равен вектору c, т.е. вершины совпадают
       begin
        d:=Normals[l-1];
        m:=ArcCos(DotProduct(b,d))*180/Pi;           // m - угол между двумя нормалями
        if m<Angle then b:=AddVector(b,d);           // если m < заданного угла, добавляем к b вектор d
        Break;                                       // выход из цикла
       end;

      end;
    end;
    Object.SubObjects[i-1].Faces[j-1].Normals[k]:=NormalizeVec(b); // нормализуем и сохраняем полученную нормаль
   end;

 end;
end;



вообще-то реализация зависит от формы организации данных. В данном случае имеется массив граней, каждый элемент которого хранит три вершины, три нормали и три текстурные координаты.

Цитата

объект получается инвертирован слева-на-право


а если камеру разместить с другой стороны, то получится нормальным. или я может чего-то не понял?
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 5.1.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bitter
Цитата

а если камеру разместить с другой стороны, то получится нормальным. или я может чего-то не понял

ты не понял... представь, что будет с объектом если все координаты по Х умножить на -1, получится зеркальное отражение

Добавлено @ 00:04 
там ещё объект поворачивался на 90 градусов по Y оси, но я нашёл простое решение, менять у точек координаты Y и Z, и менять местами 1 и третью вершыны, что, как мне кажется геморойно...


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


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


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

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



Цитата

координаты по Х умножить на -1


Да, действительно так и есть. Я про это совсем забыл. У меня в движке написано

  Read(FileBuf,z);
  Vertices.X:=-z.X;
  Vertices.Y:=z.Y;
  Vertices.Z:=z.Z;

Так и напиши. 

А про Y и Z есть такая мысль: В 3DMaxe ось Z направлена вверх, в то время как в DirectX - в глубину экрана. Просто при иницализации камеры вектор "Up" нужно задавать как (0,0,1). Попробуй по играться с этим вектором, я думаю дело в этом.
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 5.1.2007, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bitter, ну так как всё у меня с матрицей 0,1,0 я наверное останусь при своём, а именно оси менять буду и точки местами, чтоб полигоны не обращались в другую сторону... smile 

а про другой вопрос мой наверное забыли, что за фишка была при отрисовке буфера с колличеством точек 66000? это просто ограничение функции DrawPrimitiv или в чём-то другом ошибка? (рисую я их за раз)

Добавлено @ 02:53 
Bitter, ты извини, я твой код не могу щас мотреть, у меня вылетел Делфи и не ставится больше, винда парит... так что максимум чем я могу пользоваться это твоей РедМи'шкой... smile поэтому вопросы такие задаю...


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


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


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

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



Цитата

так как всё у меня с матрицей 0,1,0 я наверное останусь при своём

Ты наверное не понял. я имел ввиду, что у тебя камера неправильно ориентирована. Другими словами ты лежишь на полу и пытаешься прикрепить люсту к стене. А нужно просто встать на ноги.

Можешь попробовать другой подход: рисовать в 3DMaxe заведомо под углом -90 градусов. Таким образом, чтобы верх объекта совпадал с осью Y. И не надо менять оси и вершины это же как в анекдоте:

Цитата

На конференции по научным достижениям:
Французы: Мы изобрели вечный двигатель!

Немцы: Мы узнали секрем вечной молодости!

Русские: Мы научились удалять гланды через ж*пу!

???

Руские: Ну у нас же всё так делают...

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


Опытный
**


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

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



Bitter, ладно, я попробую матрицу камеры повернуть.. пасиб...

а что с отрисовкой?
Цитата

а про другой вопрос мой наверное забыли, что за фишка была при отрисовке буфера с колличеством точек 66000? это просто ограничение функции DrawPrimitiv или в чём-то другом ошибка? (рисую я их за раз)



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


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


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

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



ZC1989, а какой у тебя комп?
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 5.1.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bitter, не спуер уже по мощам... 1.7Гц, 64 видео, 256 озу


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


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


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

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



Может не хватает видео памяти? Буфер-то именно туда записывает инфу...

Добавлено @ 23:30 
попробуй уменьшить кол-во полигонов и посмотри. если начнет отрисовываться, значит видухи не хватает...
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 6.1.2007, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


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


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


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

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



Ну раз обекты по-менье рисуются, этот нет, значит дело в видео памяти. Попробуй рисовать по частям или попробуй разместить буфер в системной памяти:

D3Device.CreateVertexBuffer((BufLength) * SizeOf(TBufferVertex), 0,D3DVERTEX, D3DPOOL_SYSTEMMEM, 3DBuffer);

PM MAIL ICQ Skype   Вверх
DragonFire
Дата 7.1.2007, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня два вопроса по теме:
1) Что быстрее будет работать: Просчитать все нормли к каждой точке заранее и записать в память, или пересчитывать их на каждом шаге. Размеры объекта до 20к точек?
2) Как на все это наложить текстуру по-нормальному?


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


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


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

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



1) DragonFire, конечно расчитать один раз! ты что! Это же довольно долго даже один раз!
2) Если импортируешь из ASE, то там текстурные координаты указаны. Из файла и загружай
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 7.1.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bitter, слушай, а вот ещё маленький вопросик относительно координат в ASE, когда мы поменяем знак у Z просчёт нормали к треугольнику будет не правельный да и рисоваться он уже не будет, т.к. вершыны будут счиататься в другую сторону... нужно ли местами менять первую и третью вершины?


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


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


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

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



ZC1989, а для чего ты их вообще меняешь?
PM MAIL ICQ Skype   Вверх
ZC1989
Дата 7.1.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bitter, ну если оставить всё как было то объекть рисуется не правильно! порядок вершин в обратную сторону получается... если не менять Z координату, то объект зеркальный... по любому надо что-то делать для нормальной последовательност


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


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


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

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



Так он же у тебя по Х зеркальный был... Или уже и по Z?
PM MAIL ICQ Skype   Вверх
arilou
Дата 13.1.2007, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ZC1989 @  11.1.2007,  22:58 Найти цитируемый пост)
отойду от темы, задав вопрос, как мне поменять расчёт поворота камеры... у меня щас 0 1 0 и расчёт такой 
x = cos(long) * cos(lat)
y = sin(lat)
z = cos(long) * sin(lat)

а для матрицы 0 0 1, что поменять надо, я что-то туго соображаю... 



M
arilou
Один топик - один вопрос!


Добавлено @ 00:34 
ЗЫ. Разделил тему


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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