Текущий архив: 2011.04.17;
Скачать: CL | DM;
Вниз
OpenGL вывод в BMP Найти похожие ветки
← →
Unknown user © (2009-09-08 11:28) [0]Помогите, пожалуйста. Использую OpenGL, выполняю рендер в битмап, при этом не выводятся текстуры http://www.geosystema.net/samples/RenderToBitmap.jpg
При отрисовке сцены на экране все ок http://www.geosystema.net/samples/RenderToScreen.jpg
Процедура рисовки используется абсолютна та же самая, в glBindTexture передаются правильные индексы текстур. В чем причина понять не могу. Похоже есть какой-то ньюанс в OpenGL при рендеринге в битмап.
Вот так я инициализирую контекст OpenGL
FDC:=Bmp.Canvas.Handle;
pfd.nSize:=Sizeof(TPixelFormatDescriptor);
pfd.nVersion:=1;
pfd.dwFlags:=PFD_DRAW_TO_BITMAP or PFD_SUPPORT_OPENGL or PFD_SUPPORT_GDI;
pfd.iPixelType:=PFD_TYPE_RGBA;
pfd.cColorBits:=24;
pfd.cDepthBits:=32;
pfd.iLayerType:=PFD_MAIN_PLANE;
← →
Unknown user © (2009-09-09 10:46) [1]Никто не знает? :(
← →
Sapersky (2009-09-09 11:38) [2]Могу предположить, что в битмап рисуется через софтверную эмуляцию. Либо попалась глючная реализация этой эмуляции, либо что-то её в текстурах не устраивает - в DX, например, для софт. эмуляции их нужно создавать в системной памяти, а по умолчанию создаются в видео; хотя GL по дефолту хранит копию текстуры в сист. памяти и поэтому подобных проблем быть не должно.
+ подозреваю, результат софта и харда даже при нормальной работе может отличаться, особенно при использовании продвинутых функций вроде шейдеров.
Проще всего, как мне кажется, рисовать как обычно в бэкбуфер и потом копировать картинку оттуда.
← →
CrytoGen (2009-09-09 12:53) [3]а ты случайно не два контекста создаёшь? один для окна, второй для битмапа?
← →
Unknown user © (2009-09-09 12:58) [4]>Проще всего, как мне кажется, рисовать как обычно в бэкбуфер и потом копировать картинку оттуда.
Требуется картинка с высоким разрешением :(
>а ты случайно не два контекста создаёшь? один для окна, второй для битмапа?
Нет, контекст для окна предусмотрительно убиваю перед созданием контекста для битмапа.
← →
CrytoGen (2009-09-09 13:02) [5]эээ. а текстуры заново создаёшь?
← →
Unknown user © (2009-09-09 13:16) [6]>эээ. а текстуры заново создаёшь?
Да, конечно
← →
Unknown user © (2009-09-09 13:26) [7]Моя сцена состоит из текстурированной поверхности земли и текстурированных зданий. Интересно, что текстура земли рисуется в битмапе, но рисуется не полностью. На картинке видны серые участки поверхности, которые должны быть также оттекстурированы.
Рендеринг в битмап http://www.geosystema.net/samples/RenderToBitmap2.jpg
Рендеринг на экран http://www.geosystema.net/samples/RenderToScreen2.jpg
Если значительно уменьшить размер текстурированной поверхности, тогда текстура будет наложена полностью. Текстуры же зданий не удалось увидеть ни разу. Даже если взять одно здание без поверхности.
Никаких принципиальных отличий в создании и отображении текстур нет зданий и земли. Используются одинаковые функции.
В чем может быть дело? Я уже голову сломал...
← →
Unknown user © (2009-09-09 13:36) [8]Как запустить OpenGL в режиме софтверной эмуляции? Хочу посмотреть как при этом будет рендериться экран. Насколько я знаю, это не так просто сделать, для современных видеокарт.
← →
CrytoGen (2009-09-09 13:36) [9]я не уверен, но возможно при рендеринге в битмап используется софтовый OpenGL, который накладывает свои ограничения... а ещё может быть из-за того, что битмап высокого разрешения не хватает памяти на текстуру, отсюда вопрос - пробовал менять разрешение битмапа?
← →
Sapersky (2009-09-09 15:36) [10]Требуется картинка с высоким разрешением :(
http://www.mvps.org/directx/articles/tilerender/index.htm
← →
Unknown user © (2009-09-09 15:57) [11]>я не уверен, но возможно при рендеринге в битмап используется софтовый OpenGL, который накладывает свои ограничения... а ещё может быть из-за того, что битмап высокого разрешения не хватает памяти на текстуру, отсюда вопрос - пробовал менять разрешение битмапа?
Да, пробовал. Дело точно не в размере текстуры. Текстуры зданий по 20-30 Кб на грань. И не выводятся... Кажется я начинаю понимать причину :) Вспомнил, что размер текстур у меня не кратен степени двойки. Очевидно реализация софтверного рендеринга не умеет с такими работать. Сейчас проверю догадку.
← →
CrytoGen (2009-09-09 17:18) [12]я говорил не про размеры текстуры, а про размеры битмапа в который происходит вывод...
← →
Unknown user © (2009-09-10 15:20) [13]>Sapersky
спасибо за идею
>я говорил не про размеры текстуры, а про размеры битмапа в который происходит вывод...
Пробовал разные размеры битмапа, вплоть до 128 на 128. Дело не в нем.
← →
Unknown user © (2009-09-10 15:43) [14]А вот теперь причина. Хочу поблагодарить всех, кто пытался помочь, вы натолкнули меня на мысль :)
Докладываю, причина рендеринга в битмап без текстур - размеры текстур не были кратны степени двойки. Поверхность текстурировалась фрагментами 256х256 пикселей и только последний рядок и столбец имели меньший размер фрагмента и, соответственно, выводились не текстурированными, тогда как остальная часть поверхности была с изображением. Здания же текстурировались изображениями произвольного размера, их грани всегда оказывались не текстурироваными.
Такое ограничение на размер текстуры имели первые 3Д ускорители. О нем уже все успели забыть, в том числе и я :) А вот реализация софтверного рендера, который используется при рисовании в битмап похоже давно не менялась. Кроме того макс. размер текстуры в моем случае составил 1024х1024 пикс. Это тоже надо учитывать.
Нигде упоминаний об этом в статьях про рендеринг в битмап я не нашел. Так что, будьте внимательны. У меня на это исследование ушло 2 дня. Не повторяйте моих ошибок! :)
Страницы: 1 вся ветка
Текущий архив: 2011.04.17;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.004 c