|
Модераторы: Rickert, Alexeis, BorisVorontsov |
|
kefir01 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: нет Всего: 2 |
Друзья, я новичок в OpenGL и VBO.
Успешно научился подгружать из 3ds файла модель и отрисовывать через VBO Хотелось бы узнать как пользоваться VBO если речь идет о частицах (огонь/фонтан и т.п.) Не могли бы вы дать небольшой пример с пояснениями или ссылкой на литературу, доступно объясняющую что да как Заранее спасибо! Добавлено через 2 минуты и 2 секунды Скажем как в этом случае использовать VBO http://www.naturewizard.com/tutorial08.html |
|||
|
||||
kefir01 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: нет Всего: 2 |
Ну же на 28 просмотров ни одного ответа?)))
Скажите ходь что нуб и покажите куда копать... Или просто никто не сталкивался с такой необходимостью? |
|||
|
||||
Vetos |
|
||||
Опытный Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
все точно также как и с моделей, только тебе придется обновлять VBO на каждый кадр.
Я так понял для огня и т.п. у тебя заведен массив? Теперь перед каждым кадром ты передаешь VBO измененный массив. просто вместо обычного :
ты делаешь
и делаешь это перед каждым кадром. GL_DYNAMIC_DRAW говорит OGL что данные будут постоянно изменятся, и он(OGL) размещает эти данные в оперативе, а не в памяти видеокарты как происходит с GL_STATIC_DRAW. Во всяком случае так написано в мануале. VBO это просто способ передачи данных видеокарте, и то когда ты его будешь изменять значения не имеет -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
||||
|
|||||
kefir01 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: нет Всего: 2 |
Спасибо, дружище! Дай-ка я тебе плюсану)
В общем-то я так и предполагал, но вводит в заблуждение одна вещь:
Так понимаю rendering - это событие отрисовки, происходящее при повороте/смене положения вида и т.п. Тогда frame - произвольно выбранный отрезок времени - таймер там, функция отрисовки модели и все в таком роде? И еще - кроме пользования возможностью такого общения с видеокартой есть ли реальный прирост производительности или для небольших задач это больше заморочка (дольше складывать буду нежели отрисовывать налету)? У меня скорее фонтан из примера http://www.naturewizard.com/tutorial08.html, но в перспективе - да огонь... Кстати был бы рад ссылкам на примеры с огнем... |
|||
|
||||
Rooctor |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
Чтоб не гонять данные между процами заюзай вертексный шейдер.
|
|||
|
||||
kefir01 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: нет Всего: 2 |
Rooctor, а можно ссылку на пример/документацию?
На самом задача небольшая. Один объект, фон, флаг и огонь - можно наверное и не заморачиваться, хотя полагаю подобные знания пригодятся. |
|||
|
||||
Vetos |
|
|||
Опытный Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
Сам сейчас пишу прогу используя шейдера, использую версию OGL 3.2, а там без шейдеров и точку не нарисуешь. Если тебе охота заморачиваться с изучением шейдеров(по себе скажу что трудно), то вот есть неплохой сайтик, где шаг за шагом показывается как шо делать, правда он на английском LightHouse3D Если сцена простенькая то и заморачиваться думаю не стоит, много времени потратишь на переделку своего проекта. По идее там уже есть готовый код по созданию и обработке шейдерной программы, просто главное понять сам процесс и работу шейдеров. На счет фрэйма и рендеринга ничего тебе не скажу, используй GL_DYNAMIC_DRAW . Это дельный совет! Но если у тебя небольшой огонек, то прироста производительности ты не почувствуешь, но зато нет нужды держать массив с частицами в памяти и изменять их в каждом кадре, правильно запрограммировав шейдер ты получишь красивый результат. Удачи! Еще совет, используй glm, это математическая библиотека специально для OGL, все функции которые только могут пригодится, работа с матрицами, векторами, квантернионами ... На всякий случай ссыла для скачивания, там еще есть полезные весчи (ссыла) Если что не будет выходить пиши сюда чем смогу тем помогу. Это сообщение отредактировал(а) Vetos - 21.4.2011, 17:26 -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
kefir01 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: нет Всего: 2 |
Спасибо!
Понял что сейчас не буду с шейдерами возиться - один огонек и так не перекроет прогу. Что на английском иногда даже лучше. Я вообще Qt использую - там тоже есть свои классы для создания шейдеров - надо еще туда сунуться будет. Проблема еще в том, что приходится быстро и много всего одновременно учить. Постараюсь не донимать вопросами) |
|||
|
||||
kefir01 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: нет Всего: 2 |
http://freespace.virgin.net/hugo.elias/models/m_main.htm
Немного огня, ветра, тряпок и всего прочего. Пользуйтесь! |
|||
|
||||
kefir01 |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: нет Всего: 2 |
Продолжаем разговор...
http://forum.vingrad.ru/forum/topic-327864.html Пытаюсь загрузить вершины и координаты в VBO...
Отрисовка
Получаю следующее изображение... Похоже неправильно выделяю память, но совершено не могу понять принцип... Еще есть ощущение, что в QVector неправильно добавляются значения. как-то все смещено... Это сообщение отредактировал(а) kefir01 - 24.4.2011, 09:44 Присоединённый файл ( Кол-во скачиваний: 11 ) ______________2011_04_24___9.41.23.png 87,63 Kb |
||||
|
|||||
Vetos |
|
|||
Опытный Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
Не работал с Qt, но та епт, тыж в массив передаешь не два треугольника а четыре вершины, делай тогда glDrawArrays(GL_QUADS...
или на крайняк так, но тогда тебе придется пересчитать totalNodes
Это сообщение отредактировал(а) Vetos - 26.4.2011, 18:13 -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
Vetos |
|
|||
Опытный Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
А вообще использовал бы ты для этого флага glDrawElements. Во первых ты бы сэкономил видеопамять, ведь передаешь одну и туже точку несколько раз, а это позиция и текстура, а в дальнейшем тебе понадобятся еще и нормали(если захочешь развивающийся флаг).
glDrawElements позволяет избежать дублирование вершин, помимо вершинных буферов, подключается еще индексный буфер(или просто передается в glDrawElements), в котором содержаться номера(индексы) вершин, ну вот простой пример
vertex и texture содержат позицию и текст.коорд. четырех точек, а в indexArray находятся индексы вершин по которым уже строится два треугольника. Думаю ты уже понял преимущество! Дерзай Это сообщение отредактировал(а) Vetos - 26.4.2011, 18:35 -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
kefir01 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: нет Всего: 2 |
Большое спасибо за совет. Да выглядит многообещающе. Я пока разбираюсь с огнем - флаг с ветром мне удались. Как разберусь - попробую сделать как предлагаешь.
Это сообщение отредактировал(а) kefir01 - 28.4.2011, 21:07 |
|||
|
||||
kefir01 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: нет Всего: 2 |
Еще один вопрос - будут ли индексы последующих треугольников +4?
|
|||
|
||||
Vetos |
|
|||
Опытный Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
Смотри рисунок, у тебя есть точки 0,1,2,3,4,5,6,7 - допустим это восемь точек, тогда индексы треугольников будут такими:
0,1,4 1,5,4 1,2,5 2,6,5 2,3,6 3,7,6. Все зависит только от того как точки распологаются у тебя в массиве. Присоединённый файл ( Кол-во скачиваний: 10 ) attach.jpg 15,38 Kb -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |