2

最近我开始使用 qt3d(使用它的 QGlView 和 QGLSceneNode)。我为生成的模型提供每个顶点法线,现在想为我的建模应用程序使用 GL_FLAT 着色模型。但是对 glShadeModel(GL_FLAT) 的简单调用并没有做任何事情 - 阴影看起来像在平滑模式下

我试图找到 qt3d/qopengl 调用该函数的位置,但除了 QGLBuilder 找不到任何东西。

在我看来,我必须对 QOpenGLContext 做一些事情才能使本机 opengl 函数工作(我对其他一些 opengl 函数也有同样的问题)

或者 QGLPainter/QGLSceneNode 内部设置着色模型,我根本不用它?

4

1 回答 1

0

我猜你已经找到了解决方案或放弃了,但为了完整起见,如果我理解正确的话,这应该会有所帮助:

QGLPainter通过“高级”效果设置着色程序,然后在绘制(渲染)时使用该效果QGLSceneNode。您可以使用此功能设置一些标准效果:

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

标准效果在文档中定义。如果你找不到你想要的,你可以使用这个函数传递一个用户效果:

void QGLPainter::setUserEffect(QGLAbstractEffect * effect)

QGLShaderProgramEffectQGLAbstractEffect在这种情况下继承并且是您要查找的类。

另请注意,Qt3D 类似于“高级”OpenGL 包装器。在大多数情况下(除了初始化代码和其他一些东西),直接调用 OpenGL 命令不是“正确的方法”。您应该告诉 Qt3D 渲染什么以及如何渲染,而不是告诉 OpenGL API。

于 2012-09-12T23:19:40.457 回答