Russian Qt Forum
Ноябрь 23, 2024, 14:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt3D проблемы с освещением  (Прочитано 3424 раз)
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« : Март 01, 2013, 11:26 »

Играюсь тут с Qt3D, ветка для Qt4.8 взято вот отсюда git://gitorious.org/qt/qt3d.git.

Не могу сделать более одного источника света. Добавляю источники света вот так:

Код
C++ (Qt)
void DeviceView::initializeGL(QGLPainter *painter)
{
   QGLLightParameters* lp1 = new QGLLightParameters(this);
   lp1->setAmbientColor(Qt::red);
   lp1->setDiffuseColor(Qt::red);
   lp1->setSpecularColor(Qt::red);
   lp1->setPosition(QVector3D(0, 0, 100));
   painter->addLight(lp1);
 
   QGLLightParameters* lp2 = new QGLLightParameters(this);
   lp2->setAmbientColor(Qt::yellow);
   lp2->setDiffuseColor(Qt::yellow);
   lp2->setSpecularColor(Qt::yellow);
   lp2->setPosition(QVector3D(100, 0, 100));
   painter->addLight(lp2);
 
   QGLBuilder builder;
   builder << QGLSphere();
   sphere_ = builder.finalizedSceneNode();
}
 

Всегда видно только первый добавленный источник света.

В чём может быть проблема? Главное, что в примерах и демках всегда не более одного источника света, даже и посмотреть не на чём (

Еще где-то видел такую фразу (в сорцах или доке) мол на OpenGL/ES нельзя больше одного источника света %( сейчас найти не могу
Записан

Гугль в помощь
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Март 01, 2013, 13:02 »

1) На форуме есть раздел Qt3D  Улыбающийся

2) Практически стандарт - максимум 8 источников, это держат даже скромные/старые карты. Ну у крутых конечно больше.

3) Бегло глянув исходники - да, почему-то используется только GL_LIGHT0 - и все. Ну никто не мешает посмотреть значение переменной GL_MAX_LIGHTS и вызвать ф-ции напрямую
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Март 01, 2013, 13:44 »

Нашел такое: http://lists.qt.nokia.com/public/qt-3d/2012-February/000831.html
Вкратце, есть проблема с двумя и более источниками света, начиная с 2011 года, что-то там какая-то у них заморока с шейдерами, в феврале 2012 еще не исправлено, и по сию пору похоже. Указанный баг в трекере я не нашёл.

Не понятно, наф.. зачем шейдеры для источников света?

Потом я попробовал добавить руками источник света - не помогает.

В итоге, я никак не могу заставить сцену быть светлее. Видимо сейчас буду брать геометрию, текстуры и материалы из qt3d сцены, а рисовать это чистым opengl...

Я бы изначально рисовал руками, но надо модельки подгружать из блендера с текстурами и материалами. А может быть вообще викину этот qt3d да буду грузить модельки напрямую с помощью assimp, без промежуточных звеньев.
Записан

Гугль в помощь
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 01, 2013, 14:10 »

Не понятно, наф.. зачем шейдеры для источников света?
Шейдер обычно просматривает все активные источники. А без шейдера phong не получить.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #4 : Март 01, 2013, 15:07 »

Копнул немного глубже. Для освещения используются эффекты наследники QGLAbstractEffect.

Стандартный QGLLitMaterialEffect использует шейдеры для освещения модели, хотя там есть код для Fixed Function. При этом используются обычные OpenGL-функции glLightfv. Этот код включается дефайном QGL_FIXED_FUNCTION_ONLY при сборке qt3d.

Включил я, значит, этот дефайн, собралось, но теперь у меня прога сегфолтится при попытке отрисовать модель.. судя по стеку где-то в недрах драйвера Невидия. Такие дела.

Код:
Program received signal SIGSEGV, Segmentation fault.
0xb5c72be0 in ?? () from /usr/lib/libnvidia-glcore.so.290.10

И ещё один интересный эффект был всё это время - при запуске из под криатора модели не отображаются вообще в окне QGLView. При запуске из консоли, или файлового менеджера - всё ок.

Сейчас попробую написать свой эффект, который будет использовать Fixed Function без использования дефайна.

UPD. Не помогло. Буду руками прогружать модельку в чистый OpenGL.
« Последнее редактирование: Март 01, 2013, 15:39 от navrocky » Записан

Гугль в помощь
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.156 секунд. Запросов: 23.