LINUX.ORG.RU

Как проще всего создавать и препроцессить 3d-модели

 , , псевдо-3d


0

2

Понадобилось мне тут отобразить 3d-модели. Их несколько и они перекрывают друг друга. Пока тренируюсь (играюсь) на кубике. И, как я понял, OpenGL сам невидимые грани мне не отрежет. Придется химичить самому (с этим разобрался).

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

Понятно, что все равно придется нарисовать лишнего (особенно, если объект вообще перекрыт другими моделями. Но это, в принципе, не проблема. А проблем у меня две:

1. Насколько мой подход коряв? Или может красив? =)

2. В какой формат лучше всего экспортировать 3d модели (и анимацию), чтобы потом легко достать mesh?

PS. Если кто посоветует, как по быстрому освежить в памяти линейную алгебру, тоже буду признателен. А то за давностью лет подзабылась...

★★

Последнее исправление: kulti (всего исправлений: 2)

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

man z-buffer

dmfd
()

Ну а если, ну а если всё же надо очень отрезать вручную то так:
триангулируешь модель, т.е. разбиваешь на триугольники, для каждого треугольника вычисляешь нормаль — с помощью векторного произведения(crossproduct) двух векторов исходящих из вершины треугольника к двум остальным вершинам. Находишь скалярное произведение(dotproduct) нормали треугольника и направления «вида» «камеры». если векторы направлены в разные стороны — это передняя грань, произведение меньше нуля, если в одну сторону — произведение больше нуля — это задняя грань, её можно отрезать

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)
Ответ на: комментарий от Bad_ptr

Да, про него я читал. Но что-то у меня задние грани видно сквозь передние, а по умолчанию (да я и специально включал) должны задние отрезаться...

Код.

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Но что-то у меня задние грани видно сквозь передние

Подобных вам "empirical learners" нужно гнать из профессии. Сначала читайте книжки (до конца), потом пишите код.

dmfd
()
Ответ на: комментарий от dmfd

Ничего ты не понимаешь. Книжки я с удовольствие читаю, но OpenGL мне понадобился для наколенного поделия, а т.к. я несколько лет назад его и всякие 3d-движки щупал, то посчитал, что с наскока все взлетит. Это первое.

А второе, в нашей профессии «empirical learning» более чем достаточно. Банальная интеграция с 3d-party компонентами, которые работают «почти» по спецификации, например.

kulti ★★
() автор топика
Ответ на: комментарий от Bad_ptr

Да, я уже нагуглил это название. Изучаю...

kulti ★★
() автор топика
Ответ на: комментарий от kulti

А второе, в нашей профессии «empirical learning» более чем достаточно.

Замечательная у вас профессия, судя по количеству костылей, которые вы захотели возвести из-за нежелания изучить теорию, причём самые азы.

dmfd
()
Ответ на: комментарий от dmfd

судя по количеству костылей

Вот отсюда поподробнее. Я для того тему и создал, чтобы мне объяснили, если я ерунду придумал. По мне, так препроцессинг модели еще до выполнения - это оптимизация.

kulti ★★
() автор топика
Ответ на: комментарий от kulti

А второе, в нашей профессии «empirical learning» более чем достаточно.

а какая у вас профессия?

Насколько мой подход коряв

по шкале от 0 до «коряв» - коряв. glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST);

В какой формат лучше всего экспортировать 3d модели (и анимацию), чтобы потом легко достать mesh?

в любой, для которого есть готовые библиотеки

x0r ★★★★★
()

невидимые грани мне не отрежет

backface culling

x4DA ★★★★★
()
Ответ на: комментарий от x0r

а какая у вас профессия?

Инженер-программист я. А вы все тут судя по всему нет, если у вас все библиотеки, все железки etc работают изкоробки и как надо =) Можете это на пару с dmfd отрицать, но я все равно не поверю. Т.к. недавно facepalm'ом чуть лицо себе не разбил, ковыряясь с postresql-odbc. В понедельник продолжу.

по шкале от 0 до «коряв» - коряв. glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST);

Спасибо, это я уже осилил, после того, как мне про z-буффер подсказали. Но вот вопрос, в чем кривизна заранее обработать модель и выкинуть все ненужное, прежде чем тащить ее в приложение?

в любой, для которого есть готовые библиотеки

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

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Инженер-программист

кто угодно, но не инженер-программист

в чем кривизна заранее обработать модель

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

x0r ★★★★★
()

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

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

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

Но вот вопрос, в чем кривизна заранее обработать модель и выкинуть все ненужное, прежде чем тащить ее в приложение?

В том, что в файлах моделей уже нет ничего ненужного.

quiet_readonly ★★★★
()
Ответ на: комментарий от x0r

инженер-программист

Да тут бесполезно спорить. Профессия широкая. Ты видать из ынтерпайз-сектора.

в жирнючем и бажном рантайме

Да етить твою налево. Нет этого в моем подходе. Я ж написал: моделей всего несколько штук и они всегда с одного ракурса. Поэтому, как мне кажется, можно заранее из них сделать «урезанные» модели, посмотреть на них, что выглядит они нормально и такими уже распространять вместе с приложением. Это плохо? А насчет сэкономить - для андройда я пишу сейчас. Многие «простые» приложения на моем телефоне тормозят. На планшетах вроде пока таких не встречал.

kulti ★★
() автор топика
Ответ на: комментарий от quiet_readonly

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

Спасибо тебе второй адекватный человек в треде =) Теперь по первому пункту я все понял.

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Ты видать из ынтерпайз-сектора.

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

Нет этого в моем подходе.

лол. тогда нет смысла препроцессить, сделай експорт без ненужных полигонов.

x0r ★★★★★
()
Ответ на: комментарий от x0r

лол. тогда нет смысла препроцессить, сделай експорт без ненужных полигонов.

Круто. А говоришь тему создавать не надо - мне же все тут объяснили, что 3d мне нафиг не сдался. Не работал с ним особо, а он мне и не нужен оказывается =)

kulti ★★
() автор топика
Ответ на: комментарий от kulti

если совсем все так просто то не сдался. если оствещение динамическое, но камера и меш стоят на месте, то сдался. вариантов куча.

x0r ★★★★★
()

Нужен голый опенгл? Тогда иди на nehe, там рассказывают как и что. А вообще библиотек до дури.

ebantrop
()

кулФейс и буфер глубины решат большинство ваших проблем, если в этом случае вы не упираетесь в производительность

trex6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.