2012-06-18 4 views
1

Недавно я начал использовать qt3d (с его QGlView и QGLSceneNode). Я предоставляю пер-вершинные нормали для сгенерированной модели и теперь хочу использовать модель затенения GL_FLAT для моего приложения моделирования. Но простой вызов glShadeModel (GL_FLAT) ничего не делает - затенение делает вид в плавном режимеQt3d + glShadeModel

Я попытался найти, где qt3d/qopengl вызывает эту функцию, но кроме QGLBuilder ничего не нашел.

Мне кажется, что я должен сделать что-то с QOpenGLContext, чтобы сделать родную OpenGL функция работает (у меня есть такие же проблемы с некоторыми другими OPENGL функций)

или, возможно, QGLPainter/QGLSceneNode внутренне устанавливает затенение модель и у меня нет использовать его вообще?

ответ

0

Я думаю, вы уже нашли решение или сдавались, но для полноты картины, это должно помочь, если я вас правильно понял:

QGLPainter устанавливает программу затенения с помощью эффекта «высокого уровня», который затем будет использоваться при рисовании (рендеринга) QGLSceneNode s. Есть некоторые стандартные эффекты, которые можно установить с помощью этой функции:

void QGLPainter::setStandardEffect(QGL::StandardEffect effect); 

Стандартные эффекты определяются in the documentation. Если вы не можете найти то, что вы хотите, вы можете передать эффект пользователя, используя эту функцию:

void QGLPainter::setUserEffect(QGLAbstractEffect * effect) 

QGLShaderProgramEffect наследует QGLAbstractEffect и класс вы ищете в этом случае.

Также обратите внимание, что Qt3D является чем-то вроде «высокоуровневой» оболочки OpenGL. Вызов команд OpenGL напрямую не является «правильным способом» в большинстве случаев (кроме кода инициализации и некоторых других вещей). Вы должны сказать Qt3D, что и как визуализировать, а не API OpenGL.

Смежные вопросы