Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.011 c
15-1293587663
TUser
2010-12-29 04:54
2011.04.17
Чтобы только мышкой тыкать


8-1211811559
Staska
2008-05-26 18:19
2011.04.17
разработка класса для изображения квадрата


2-1295269594
Евгений07
2011-01-17 16:06
2011.04.17
дельфи игнорирует файл источник


15-1294009604
Германн
2011-01-03 02:06
2011.04.17
Бред и I/O Error 1784


15-1293716306
makarik01
2010-12-30 16:38
2011.04.17
виртульный диск