完整代码:
from PyQt5.QtOpenGL import QGLWidget
from PyQt5.QtWidgets import QApplication, QMainWindow, QOpenGLWidget, QStyleFactory, QLabel
from OpenGL.GLUT import *
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from math import sin, cos, pi
from ui_3dView import Ui_MainWindow
class OpenGLWidget(QGLWidget):
def initializeGL(self):
glClearColor(0.0, 0.0, 0.0, 1.0) # 设置清除颜色为黑色
def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
# 定义爱心形状的顶点坐标
points = []
num_points = 100
for i in range(num_points):
angle = 2 * pi * i / num_points
x = 6 * sin(angle) ** 3 # 将尺寸减半
y = 5.5 * cos(angle) - 2.5 * cos(2 * angle) - cos(3 * angle) - 0.5 * cos(4 * angle) # 调整系数
points.append((x, y))
# 绘制爱心形状
glBegin(GL_LINE_STRIP)
glColor4f(1.0, 0.0, 0.0, 1.0) # 红色,不透明
for point in points:
glVertex3f(point[0] / 10, point[1] / 10, 0.0) # 缩小尺寸并绘制在屏幕中心
glEnd()
# 绘制填充的爱心形状
glBegin(GL_POLYGON)
glColor4f(1.0, 0.0, 0.0, 0.5) # 半透明的红色
for point in points:
glVertex3f(point[0] / 10, point[1] / 10, 0.0) # 缩小尺寸并绘制在屏幕中心
glEnd()
def resizeGL(self, width, height):
glViewport(0, 0, width, height)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('OpenGL Cylinder')
self.setGeometry(300, 300, 800, 600)
self.opengl_widget = OpenGLWidget(self)
self.setCentralWidget(self.opengl_widget)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())