c++ - Qt 4.6 OpenGL GLSL

标签 c++ qt opengl glsl

我正试图找到像 NeHe 一样的 Qt 教程,它们都在 GLSL 中。因为让我们面对现实吧,过去的 OpenGL 已经死了,Shaders 是现在唯一的方法。在 Qt-4.6 中,他们引入了 QMatrix4x4、QVector3 和 Shader 类。但是我找不到这方面的任何教程。

我找到的所有这些,都使用糟糕的 SDL 和/或 GLUT(它们根本没用)。

最佳答案

在语言和 GUI 框架之间移植 OpenGL 代码应该不会改变太多代码。例如,当从 GLUT 迁移到 Qt 时,您将 GLUT 的 reshape 代码移动到 QGLWidget 的 resizeGL 函数中,并将 GLUT 的显示函数移动到 QGLWidget 的 paintGL 函数中。除了设置之外,这是从 GLUT 到 Qt 的最大变化。

除此之外,几乎所有的东西都被添加到很少的额外实用程序和类中。您基本上必须在需要时寻找类(class)。就像“我要使用着色器,所以让我们看看 Qt 是否有任何辅助类”。您找到一个名为 QGLShader 的类,它似乎有帮助,但它没有任何文档,因此您应该尝试另一个可能有文档的类,例如 QGLShaderProgram。

http://doc.trolltech.com/4.6/qglshaderprogram.html#details

跳到细节,它为您提供了如何使用它和 QGLShader 类的示例/教程。

对于 vector 和矩阵等较小的类,您只需阅读它们的函数文档即可,这很简单。例如, vector 有一个 QVector3 类。我可以查看它的类页面,并看到它具有我期望在 vector 类中的正常功能,如规范化、添加等。关于如此简单的内容的教程对我没有真正帮助。

根据我的经验,这是在 OpenGL 中使用包装器的标准方法。例如,在 JOGL 中,有一个很大的 Texture 类,这对纹理 io 很有帮助。当我需要添加纹理时,我只是通过在 javadoc 中搜索“纹理”找到了它。

关于c++ - Qt 4.6 OpenGL GLSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2755620/

相关文章:

c++ - 从 ui 文件中检索 Qwidget

c++ - 如何对 QMap<QString, myStruct> 进行排序?

qt - 在 QScrollArea 内的 QVBoxLayout 中为最初隐藏的小部件保留空间

c++ - 向 Pimpl 类添加单例功能

c++ - 对 `USER_ERROR__inconsistent_build_configuration__see_dlib_faq_1_' 的 undefined reference

c++ - OpenGL 似乎没有读取我的顶点/索引

c++ - OpenGL 移动对象不起作用

c++ - 我错过了什么纹理无法正常工作 OpenGL

C++ U32 类型 header

c++ - 是否有一个 lint 工具可以检查子类虚函数是否与父类定义匹配?