![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
[WoPR]@!!ex |
|
|||
Unregistered |
Мне сказали, что тут собираются гуру программирования. Два вопроса:
1)Поверхность храниться в двумерном массиве 256х256, каждый элемент хранит высоту поверхности в соответсвующей координате. В цикле я эту поверхность отрисовываю. Скорость всего 30 кадров в секунду. Как быстрее отрисовывать? for (y1 = 0; y1 < 255; y1++) for (x1 = 0; x1 < 255; x1++) { glBegin(GL_TRIANGLES); x=x1+1; y=y1+1; glTexCoord2f((GLfloat)((x)/256), (GLfloat)((y)/256)); glVertex3f((GLfloat)(x),(GLfloat)([Map[x][y]),(GLfloat)(y)); x=x1; y=y1; glTexCoord2f((GLfloat)((x)/256), (GLfloat)((y)/256)); glVertex3f((GLfloat)(x1),(GLfloat)(Map[x][y]),(GLfloat)(y1)); x=x1+1; y=y1; glTexCoord2f((GLfloat)((x)/256), (GLfloat)((y)/256)); glVertex3f((GLfloat)(x),(GLfloat)(Map[x][y]),(GLfloat)(y1)); x=x1; y=y1+1; glTexCoord2f((GLfloat)((x)/256), (GLfloat)((y)/256)); glVertex3f((GLfloat)(x1),(GLfloat)(Map[x][y]),(GLfloat)(y)); x=x1; y=y1; glTexCoord2f((GLfloat)((x)/256), (GLfloat)((y)/256)); glVertex3f((GLfloat)(x1),(GLfloat)(Map[x][y]),(GLfloat)(y1)); x=x1+1; y=y1+1; glTexCoord2f((GLfloat)((x)/256), (GLfloat)((y)/256)); glVertex3f((GLfloat)(x),(GLfloat)(Map[x][y]),(GLfloat)(y)); glEnd(); 2) Как сделать быстрое освещение этой поверхности? |
|||
|
||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 2 Всего: 164 |
Я как обычно предложу списки.. Попробуй, если не удовлетворит - дальше будем разбирать.
А чем обычный glLight не подходит? --------------------
|
||||||
|
|||||||
DENNN |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 3 Всего: 43 |
Я так понимаю, что тем и не подходит, что он обсчитывает всю сцену, а это в 50% излишняя нагрузка. Списки конечно помогут, но в принципе это не решение проблемы для больших сцен (там ведь не только освещение, но еще прозрачность, наложение различных данных, поиск пересечения с поверхностью и т.п.). В таких случаях может помочь только LOD. |
||||
|
|||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
* использовать GL_QUADS вместо GL_TRIANGLES, тогда вместо 6 вершин нужно указать четыре; вообще, нужно стремится избегать лишних обращений к OpenGL
* подсчитать нормали заранее * перейти на смешанные массивы (glInterleavedArrays), или просто массивы * скомпилировать массив (glLockArrays/glUnlockArrays) - т.к. одна и та же вершина используется в 6 треугольниках, то лучше обсчитать её (трансформация, освещение) 1 раз, чем 6 раз -------------------- С уважением, г-н Посол. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |