|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.12.2010, 13:53 | #1 |
Форумчанин
Регистрация: 26.02.2010
Сообщений: 126
|
Ландшафт OpenGL
Здравствуйте ув. форумчане. У меня такой вопрос, рисую ландшафт посредством OpenGL, на него накладывается текстура размером 1024х1024, ландшафт размером 256х256 клеток каждая с которых имеет размер 2х2. Вопрос, почему текстура имеет очень страшный вид, ведь по идее на квадрат ландшафта 2х2 приходится квадрат текстуры 4х4 и качество не должно страдать... Собственно код отрисовки:
Код:
Скрин картинки: Последний раз редактировалось nXs; 18.12.2010 в 13:58. |
18.12.2010, 17:32 | #2 | |
c++, dx/ogl
Форумчанин
Регистрация: 10.11.2008
Сообщений: 131
|
Цитата:
Попробуйте так может получше будет. Код:
Мой вам совет, если вы решили уйти дальше кубика, в своем поиске) Забудьте про весь GL Immediate mode функционал. Изучите и используйте. VBO, IBO, VAO, Шейдерные программы. По крайней мере, VBO бы вам точно помог поднять скорость отрисовки примитивов. Еще можно поинтересоваться что такое - glEnable(GL_CULL_FACE); и glEnable(GL_DEPTH_TEST); и с чем их едят)) да и еще текстуру пробуйте по разному подгрузить с оборачиванием и без... где она у вас там грузится) Код:
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but rather how many batches/frame! Последний раз редактировалось .pixel; 18.12.2010 в 17:37. Причина: время |
|
19.12.2010, 13:18 | #3 |
Форумчанин
Регистрация: 26.02.2010
Сообщений: 126
|
Спасибо за советы, с текстурой эт я протупил.....
В общем я так понял что для больших сцен нужно использовать glDrawElements(). Попробовал, вот так: Код:
UPD:В общем я подозреваю что лаг в расчете координат вертексов и фейсов. Вертексы считаю так(по карте высот): Код:
Код:
Последний раз редактировалось nXs; 19.12.2010 в 15:17. |
19.12.2010, 22:27 | #4 | |
c++, dx/ogl
Форумчанин
Регистрация: 10.11.2008
Сообщений: 131
|
glDrawElements() – рисует геометрию из индексного буфера(проиндексированного списка) по данным вершинного буфера (буфер вершин).
Каждый элемент индексного буфера – без знаковое целочисленное. Это число – индекс (позиция) вершины в буфере вершин (вершинных данных). Код:
Цитата:
«Faces»? Это что индексы? Indexes – смотрелось бы понятнее. glDrawElements – нарисует все как надо, если есть привязанные данные на вершины и вершины правильно сгенерированны для геометрии, а индексы на те вершины правильно расставлены. Гляньте что показывает… Код:
И засуньте вершинные данные в VBO. Когда все будет рисоваться начнете прикручивать индексы на данную геометрию. Тут участок кода может чего и подскажет в часности с VBO… http://paste.org.ru/?iz64s8
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but rather how many batches/frame! |
|
21.12.2010, 10:58 | #5 |
Форумчанин
Регистрация: 26.02.2010
Сообщений: 126
|
Спасибо огромное, пересмотрев код, понял что массив индексов неправильно генерируется(пока не придумал как сделать правильно...), ваш код работает. Я так понял с помощью vbo можна загнать массивы в память видеокарты и брать их оттуда не передавая каждый раз из системной памяти,хотелось бы еще знать есть ли какие то ограничения на количество таких массивов в памяти карты?
UPD: Я наверное вообще тупой, никак не получается рассчитать индексы, посмотрите пожалуйста что не так Код:
Код:
Последний раз редактировалось nXs; 21.12.2010 в 11:47. |
22.12.2010, 11:25 | #6 |
Форумчанин
Регистрация: 26.02.2010
Сообщений: 126
|
Пытаюсь подключить расширения VBO,написал специально модуль типа:
Код:
Последний раз редактировалось nXs; 22.12.2010 в 11:28. |
22.12.2010, 14:24 | #7 |
Форумчанин
Регистрация: 26.02.2010
Сообщений: 126
|
В общем решил проблему, обновил драйвер и прописал InitExtentions после получения контекста воспроизведения.
|
22.12.2010, 17:16 | #8 | |
c++, dx/ogl
Форумчанин
Регистрация: 10.11.2008
Сообщений: 131
|
карты высот несколько примеров http://wingman.org.ru/opengl/
Цитата:
начните рисовать, отбросьте Z-ось чтобы было проще представить. Z-компоненту потом можно брать из карты высот или монохромного изображения (во время генерации или после, но до того как массив вершин будет отправлен в VBO). Обрисовал в общих чертах пример того, как можно представить генерацию сетки на основе GL_QUAD. Это не идеальный вариант но понять суть можно. В качестве текстуры для такой сетки можно использовать тайл (бесшовная текстура). Если вы хотите использовать одну текстуру на всю поверхность (атлас) то UV координаты придется пересчитывать по иному. Там же можно увидеть, что такое индексы вершины и откуда они берутся.
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but rather how many batches/frame! |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
OpenGL | bigory | Общие вопросы C/C++ | 8 | 24.06.2010 14:26 |
OpenGL | Paul_AG | Общие вопросы C/C++ | 3 | 02.02.2010 20:28 |
Opengl | Алексадр | Компоненты Delphi | 4 | 29.09.2009 17:23 |
3d Ландшафт | Flinka | Помощь студентам | 1 | 28.04.2009 12:19 |
Трехмерный (3D) ландшафт. OpenGL | Flinka | Помощь студентам | 1 | 27.04.2009 14:45 |