目录
opengl安装:
有的报错:
opengl pyqt渲染缩放
opengl 和控件分屏
opengl旋转
android预览摄像头:
opengl安装:
pip install -U pyopengl
有的报错:
: Attempt to call an undefined function glutIn
问题:使用 pip 安装了 PyOpenGL 包,然后运行程序,结果提示:: Attempt to call an undefined function glutInit
原因:使用 pip 安装的 OpenGL 包是 32 位,与 64 位电脑不匹配,故出现此错误。
解决办法:pip 不能在线安装 64 位的 OpenGL,只能手动下载后安装。
下载地址:
/~gohlke/pythonlibs/#pyopengl
opengl pyqt渲染缩放
import sys
from import QApplication, QMainWindow
from import QGLWidget
from import *
from import *
class OpenGLWidget(QGLWidget):
def __init__(self, parent=None):
super().__init__(parent)
(200, 200)
self.scale_factor = 1.0
def initializeGL(self):
glClearColor(0.0, 0.0, 0.0, 1.0)
def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glScalef(self.scale_factor, self.scale_factor, 1.0)
# 绘制一个简单的三角形
glBegin(GL_TRIANGLES)
glColor3f(1.0, 0.0, 0.0)
glVertex2f(0.0, 1.0)
glColor3f(0.0, 1.0, 0.0)
glVertex2f(-1.0, -1.0)
glColor3f(0.0, 0.0, 1.0)
glVertex2f(1.0, -1.0)
glEnd()
def resizeGL(self, w, h):
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-2.0, 2.0, -2.0, 2.0, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW)
def wheelEvent(self, event):
# 获取滚轮滚动的距离
num_degrees = ().y() / 8
num_steps = num_degrees / 15.0 # 每次缩放15度
self.scale_factor *= pow(1.1, num_steps) # 乘以一个缩放因子
()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
("OpenGL Widget Example")
(100, 100, 400, 400)
self.gl_widget = OpenGLWidget(self)
(self.gl_widget)
if __name__ == '__main__':
app = QApplication()
window = MainWindow()
()
(app.exec_())
opengl 和控件分屏
import sys
from import QPixmap
from import QApplication, QMainWindow, QSplitter, QLabel
from import QGLWidget
from import *
from import *
class OpenGLWidget(QGLWidget):
def __init__(self, parent=None):
super().__init__(parent)
(200, 200)
self.scale_factor = 1.0
def initializeGL(self):
glClearColor(0.0, 0.0, 0.0, 1.0)
def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glScalef(self.scale_factor, self.scale_factor, 1.0)
# 绘制一个简单的三角形
glBegin(GL_TRIANGLES)
glColor3f(1.0, 0.0, 0.0)
glVertex2f(0.0, 1.0)
glColor3f(0.0, 1.0, 0.0)
glVertex2f(-1.0, -1.0)
glColor3f(0.0, 0.0, 1.0)
glVertex2f(1.0, -1.0)
glEnd()
def resizeGL(self, w, h):
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-2.0, 2.0, -2.0, 2.0, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW)
def wheelEvent(self, event):
# 获取滚轮滚动的距离
num_degrees = ().y() / 8
num_steps = num_degrees / 15.0 # 每次缩放15度
self.scale_factor *= pow(1.1, num_steps) # 乘以一个缩放因子
()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
("OpenGL Widget Example")
(100, 100, 400, 400)
self.gl_widget = OpenGLWidget(self)
splitter = QSplitter()
(splitter)
(self.gl_widget)
self.image_label = QLabel()
pixmap = QPixmap(r"C:\Users\Administrator\Pictures\mm\pics\005953_4.jpg") # 替换为你的图片路径
self.image_label.setPixmap(pixmap)
(self.image_label)
if __name__ == '__main__':
app = QApplication()
window = MainWindow()
()
(app.exec_())
opengl旋转
import sys
from import Qt
from import QPixmap, QMouseEvent
from import QApplication, QMainWindow, QSplitter, QLabel
from import QGLWidget
from import *
from import *
class OpenGLWidget(QGLWidget):
def __init__(self, parent=None):
super().__init__(parent)
(200, 200)
self.scale_factor = 1.0
self.x_rotation = 0.0
self.y_rotation = 0.0
self.z_rotation = 0.0
self.last_pos = None
def initializeGL(self):
glClearColor(0.0, 0.0, 0.0, 1.0)
def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glScalef(self.scale_factor, self.scale_factor, 1.0)
# glTranslatef(0.0, 0.0, -5.0)
glRotatef(self.x_rotation, 1.0, 0.0, 0.0)
glRotatef(self.y_rotation, 0.0, 1.0, 0.0)
glRotatef(self.z_rotation, 0.0, 0.0, 1.0)
glBegin(GL_TRIANGLES)
glColor3f(1.0, 0.0, 0.0)
glVertex2f(0.0, 1.0)
glColor3f(0.0, 1.0, 0.0)
glVertex2f(-1.0, -1.0)
glColor3f(0.0, 0.0, 1.0)
glVertex2f(1.0, -1.0)
glEnd()
def resizeGL(self, w, h):
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-2.0, 2.0, -2.0, 2.0, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW)
def wheelEvent(self, event):
num_degrees = ().y() / 8
num_steps = num_degrees / 15.0 # 每次缩放15度
self.scale_factor *= pow(1.1, num_steps) # 乘以一个缩放因子
()
def mousePressEvent(self, event: QMouseEvent):
self.last_pos = ()
def mouseMoveEvent(self, event: QMouseEvent):
if self.last_pos is None:
return
dx = () - self.last_pos.x()
dy = () - self.last_pos.y()
if () & :
self.x_rotation += dy * 0.5
self.y_rotation += dx * 0.5
elif () & :
self.x_rotation += dy * 0.5
self.z_rotation += dx * 0.5
self.last_pos = ()
()
def mouseReleaseEvent(self, event: QMouseEvent):
self.last_pos = None
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
("OpenGL Widget Example")
(100, 100, 800, 400)
self.gl_widget = OpenGLWidget(self)
splitter = QSplitter()
(splitter)
(self.gl_widget)
self.image_label = QLabel()
self.image_label.setFixedSize(400, 400)
pixmap = QPixmap(r"C:\Users\Administrator\Pictures\mm\pics\005953_4.jpg") # 替换为你的图片路径
self.image_label.setPixmap(pixmap)
(self.image_label)
if __name__ == '__main__':
app = QApplication()
window = MainWindow()
()
(app.exec_())
android预览摄像头:
GitHub - ChinaZeng/OpenGLESCameraDemo