Главная страница
    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.48 MB
Время: 0.004 c
4-1239082807
Игорь404
2009-04-07 09:40
2011.04.17
Альтернатива SendMessage


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


15-1294148572
alexdn_
2011-01-04 16:42
2011.04.17
c++


2-1295026576
Тоха
2011-01-14 20:36
2011.04.17
Трудности с WMI (инфо о процессах)


2-1295060421
mfender
2011-01-15 06:00
2011.04.17
Не получается создать объект указанного класса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский