Qt3d + glShadeModel

Posted

技术标签:

【中文标题】Qt3d + glShadeModel【英文标题】: 【发布时间】:2012-06-18 22:27:45 【问题描述】:

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

我试图找到 qt3d/qopengl 调用该函数的位置,但除了 QGLBuilder 之外什么也找不到。

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

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

【问题讨论】:

【参考方案1】:

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

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

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

标准效果定义为in the documentation。如果你找不到你想要的,你可以使用这个函数传递一个用户效果:

void QGLPainter::setUserEffect(QGLAbstractEffect * effect)

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

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

【讨论】:

以上是关于Qt3d + glShadeModel的主要内容,如果未能解决你的问题,请参考以下文章

(持续更新)Qt3D 学习资源

Qt3d用c ++输入

Qt3d + glShadeModel

Qt3D 是 Qt5 的一部分吗?

QT3D中的透明对象

qt3d窗口内的Qt小部件