![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопросы по OpenGL [Delphi, Windows]
Pa5ha © (2005-04-01 00:20:00)Решил написать небольшой симулятор на ОпенГЛ и столкнулся с некоторыми тонкостями.
1. скайбокс из-за интерполяции имеет стыки, которые всё сильно портят. Как их можео убрать?
2. как удалять текстуры имея только GLUint? Просто, сцены надо менять по ходу дела, а старые текстуры не удаляются до завершения (и удаляются ли вообще).
Вопросы будут поступать ещё скорее всего =)
parovoZZ (2005-04-12 09:31:00) [81]А вот в функции gluPerspective каким должен быть угол зрения камеры, чтобы отображалось всё правильно (60 градусов? по аналогии с фототехникой).
XProger (2005-04-11 00:57:00) [82]ты выделаешь память под буфер, затем передаёшь OGL значения из него , он в свою очередь копирует их в память видяхи и создаёт текстурку. После этого твой буфер уже не нужен и ты его можешь смело высвобождать.
А саму текстуру из памяти видяхи удаляй при помощи glDeleteTexture
Pa5ha (2005-04-10 22:35:00) [83]Я тут так подумал... glDeleteTexture удалят текстуру или только указатель на её? Для создания её выделяется память: GetMEM. Вызывает ли glDeleteTexture FreeMEM?
XProger (2005-04-10 18:25:00) [84]А сколько BPP выставил? Ато большинство карточек "презирают" 32 бит на пиксель ;)
Pa5ha (2005-04-10 14:24:00) [85]Небо тогда получается без текстур. А как тогда с облаками быть?
Думал думал, почему ФПС резко упал, а потом вспомнил, что купил новый монитор =) Как отключить синхронизацию, а то у меня при 1280х1024 фпс до 36 падает при всего 1000 полигонов? Т.е. при таком раскладе у меня максимум может быть 70 в лучшем случае. Почему же в КС ФПС держится стабильно на 60 при том же разрешении на OpenGL рендере, хотя там намного все сложнее?
XProger (2005-04-09 17:13:00) [86]1) Вместо клампа ставь GL_REPEAT
2) Вместо GL_DECAL ставь GL_MODULATE
Небо, хм... ну собсна вокруг планеты нашей чёрный космос вот.
Следовательно тебе нуна добиваться голубого неба путём использования GL_FOG и имхо для этого лучше использовать GL_EXT_FOG_COORD (расширение).
Но, можно обойтись без этого. Просто рисуя скайбокс без текстуры.
Как рисуем:
На высоте около 20 км (макс высота полёта допустим) небо будет уже совершенно чёрным :)
Следовательно цвет скайбокса там будет (0 0 0).
На высоте 0 над уровнем океана небо голубое и цвет скайбокса соотвтетвенно (70 170 255) к примеру.
У нас есть текущая высота (H), и максимальная (20 км). Определяем цвет скайбокса.
R := 70 - trunc(70/20*H);
G := 170 - trunc(170/20*H);
B := 255 - trunc(255/20*H);
glColor3ub(R, G, B);
Всё цвет скай бокса установили. Затем чтобы нарисовать его нам нужно:
1) Повернуть камеру (без смещения)
2) Отключить тест глубины
3) Отключить текстуру
Всё... далее рисуешь скайбокс. Затем пойдёт отрисовка ландшафта и летательного аппарата :)
Pa5ha (2005-04-09 15:51:00) [87]XProger, спасибо. Ща воткну.
Скайбокс устраивает на земле. А как делают в авиасимуляторах небо? Хотя бы намек.
Как кламп отменить, чтоб текстуры тайлить?
Зачем нужно glColor, если есть материалы?
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); // цвет примитива не учитывается
А как отменить эту команду? Т.е. включить смешивание текстуры с цветом примитива?
XProger (2005-04-08 22:08:00) [88]
glViewport(0, 0, W, H);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
if is3D then
gluPerspective(90, W/H, 0.4, 1000) // три измерения
else
gluOrtho2D(0, W, H, 0); // на одно меньше ;)
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
Используй скайбокс, если результат устраивает... ;)
Pa5ha (2005-04-08 00:23:00) [89]Что то я пока в настройки не втыкаю. Буду думать, искать...
Что надо сделать, чтоб с 3д переключиться в 2д, потом обратно при условии, что 2д рисуется в конце кадра.
А чтож со скайбоксом то делать? Такой красивый получился =)
XProger (2005-04-07 20:37:00) [90]1) Для авиа симов скайбокс не катит ;)
2) Обычная GrayScale текстура. Рисуешь каждый символ квадом с символом из текстуры :)
Pa5ha (2005-04-07 19:22:00) [91]Итак. Подоспели ещё пара вопросов.
1. Как работать со скайбоксом? Тот что он должен следовать за камерой понятно. Но что делать при изменении высоты? Симулятор то авиа...
2. Пришло время сделать консоль. Шрифт должен грузиться из файла и я хочу, чтоб он имел альфа канал. Как это лучше реализовать? Если есть примеры, то...
XProger (2005-04-04 16:27:00) [92]Удаление зубчиков "Z-Battle"
1) (zFar - zNear) чем меньше тем точнее расчёт :)
2) glPolygonOffset
Pa5ha (2005-04-04 03:03:00) [93]Вывожу модель. На двух поверхностях, соединяющихся под маленьким углом появляются зубчики. Это вроде бага Z-буфера. Как это можно убрать? Потом покажу скрин.
Только что написал загрузку моделей. 2 часа багу отлавливал. Каляка маляка рисовалась. Оказалось не в том порядке считывал координаты =)
XProger (2005-04-02 02:03:00) [94]Ян Хорн писал простые примеры, и в большинстве случаев не стремился к оптимальности кода. В основном только эффекты...
А в данный момент сайт поддерживают его друзья, ибо нет больше с нами Хорни :(
А ограничение в 100 фпс связанно с автоматическим контролем вертикальной синхроницазии драйвером по умолчанию. Если же ты вручную уберёшь её, то фпс увеличится. ян также писал пример на эту тему VSync зовётся, поищи...
Pa5ha (2005-04-02 00:18:00) [95]XProger, ну, код то я встявить догадался, только результат вроде не изменился. Может и изменился, но лучше не стало.
Ещё вопрос: почему в проектах Джона Хорна ФПС не больше 100, хотя никаких ограничений в коде вроде нету и построен он не на мультимедийном таймере.
XProger (2005-04-01 22:12:00) [96]Биндишь текстуру и ставишь кламп (2 строки которые я дал)
После этого OpenGL не будет интерполировать цвета на гранях полигона с цветами текстуры на противоположной грани. Повторять нельзя будет текстуру проще говоря... ;)
Pa5ha (2005-04-01 19:38:00) [97]XProger, расскажи плиз про кламп. Что такое? Что то лучше не стало.
XProger (2005-04-01 19:05:00) [98]Pa5ha, вот тут кламп поможет
@!!ex, а тебе поможет точное представление какие координаты текстуры куда пойдут на скайбоксе, ибо, как говорят, либо не стыкуются, либо не той стороной... ;)
Pa5ha (2005-04-01 13:03:00) [99]http://www.cs.karelia.ru/~vpashkov/bug.jpg- мой баг такого плана ибо с другой стороны текстуры она совсем другого цвета.
@!!ex, у Тебя текстуры вроде не стыкуются вообще.
A22 (2005-04-01 12:20:00) [100]не помню константы Gl'a, но в принципе стыки на скайбоксе как раз и убираются клэмпом. ну, можно еще миррор попробовать