Python OpenGL、PyQt和传统OpenGL的兼容性如何?
我正试图弄清楚Python OpenGL在做什么以及Qt的使用情况。实际问题以粗体显示。如果有太多问题需要适当的SO格式,请提前道歉,但它们都是相关的,我猜知道一个问题答案的人可能知道所有问题的答案 我在PyQt4上使用Python2.7,在Win7 x64上使用PythonOpenGL模块。Python OpenGL、PyQt和传统OpenGL的兼容性如何?,python,qt,opengl,Python,Qt,Opengl,我正试图弄清楚Python OpenGL在做什么以及Qt的使用情况。实际问题以粗体显示。如果有太多问题需要适当的SO格式,请提前道歉,但它们都是相关的,我猜知道一个问题答案的人可能知道所有问题的答案 我在PyQt4上使用Python2.7,在Win7 x64上使用PythonOpenGL模块。 GL.glGetString(“GL.GL\u版本”)返回'3.3.0-Build 8.15.10.2725' 这说明我正在使用OpenGL的现代版本,据我所知,它不再使用固定管道,用户需要提供着色器 P
GL.glGetString(“GL.GL\u版本”)
返回'3.3.0-Build 8.15.10.2725'
这说明我正在使用OpenGL的现代版本,据我所知,它不再使用固定管道,用户需要提供着色器
GL.glUseProgram(…)
,我仍然可以在屏幕上渲染一些东西,并使用基本的着色来响应照明。因此,这意味着存在一些默认着色器。我不确定这是OpenGL的一部分,还是Python模块中包含的东西
glUseProgram(…)
,则使用该着色器,或者这是由兼容模式提供的固定管道着色器?glBegin()
和glEnd()
,以及glVertex
、旋转矩阵等,告诉我这是在使用传统OpenGL
GL\u ARB\u兼容性
?或者这可能来自PyQt4.QtOpenGL子模块吗?也可以看到,C++中的Qt5.5 OpenGL示例没有调用<代码> GLUX()/Cux>,并且在示例中包含了一些着色器。我猜这是纯现代的OpenGL,没有遗留的东西
#包含//OpenGL32库的头文件
#包含//GLu32库的头文件
#包含//GLaux库的头文件
...
glxrot;//X旋转
glyrot;//Y旋转
GLfloat xspeed;//X转速
glyspeed;//Y轴转速
GLfloat z=-5.0f;//进入屏幕的深度
GLfloat LightAmbient[]={0.5f,0.5f,0.5f,1.0f};//环境光值
GLfloat LightDiffuse[]={1.0f,1.0f,1.0f,1.0f};//漫反射光值
GLfloat LightPosition[]={0.0f,0.0f,2.0f,1.0f};//灯位
GLuint过滤器;//使用哪个过滤器
胶合纹理[3];//存储3种纹理
QMatrix4x4
等?非常感谢TL;DR:您需要使用原始OpenGL和Qt的所有内容都有文档记录。您将以相同的方式访问任何其他函数集,只不过您不会使用
QOpenGLFunctions
,因为这些函数用于OpenGL ES 2.0,而是使用从QAbstractOpenGLFunctions
派生的其他类
您可以选择阅读并考虑使用更高级别的接口。如果你想使用它们,它们就在那里,但再说一次,不管你是否使用,都是你自己的选择。只要平台的实现支持您需要的功能(即提供您请求的接口版本),Qt就可以方便地为您提供完整的、功能解析的OpenGL API
QOpenGLContext
上设置的格式请求特定版本,然后在create()
成功后,您可以检查是否获得该版本或更低版本。在所有情况下,都是上下文的格式
提供了版本
函数本身可以通过QAbstractOpenGLFunctions
接口获得,这是最原始的
#include <gl\gl.h> // Header File For The OpenGL32 Library
#include <gl\glu.h> // Header File For The GLu32 Library
#include <gl\glaux.h> // Header File For The GLaux Library
...
GLfloat xrot; // X Rotation
GLfloat yrot; // Y Rotation
GLfloat xspeed; // X Rotation Speed
GLfloat yspeed; // Y Rotation Speed
GLfloat z=-5.0f; // Depth Into The Screen
GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f }; // Ambient Light Values
GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f }; // Diffuse Light Values
GLfloat LightPosition[]= { 0.0f, 0.0f, 2.0f, 1.0f }; // Light Position
GLuint filter; // Which Filter To Use
GLuint texture[3]; // Storage for 3 textures