GLViewWidget显示坐标
时间: 2023-11-18 21:06:22 浏览: 118
显示鼠标坐标
GLViewWidget是一个OpenGL窗口,如果你想要在窗口上显示坐标,可以在OpenGL中使用gluProject函数将3D坐标转换为2D坐标,然后在窗口上绘制出来。具体实现方法可以参考下面的代码示例:
```python
from OpenGL.GL import *
from OpenGL.GLU import *
from PyQt5.QtOpenGL import *
class GLViewWidget(QGLWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.x = 0
self.y = 0
def initializeGL(self):
glClearColor(0.0, 0.0, 0.0, 0.0)
glClearDepth(1.0)
glDepthFunc(GL_LESS)
glEnable(GL_DEPTH_TEST)
glShadeModel(GL_SMOOTH)
def resizeGL(self, width, height):
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(45.0, float(width) / float(height), 0.1, 100.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
glTranslatef(0.0, 0.0, -6.0)
glColor3f(1.0, 1.0, 1.0)
glutSolidSphere(1.0, 20, 20)
def mouseMoveEvent(self, event):
x = event.x()
y = event.y()
viewport = glGetIntegerv(GL_VIEWPORT)
modelview = glGetDoublev(GL_MODELVIEW_MATRIX)
projection = glGetDoublev(GL_PROJECTION_MATRIX)
self.x, self.y, _ = gluUnProject(x, self.height() - y, 0.0, modelview, projection, viewport)
def paintEvent(self, event):
painter = QPainter(self)
painter.drawText(self.x, self.y, "({:.2f}, {:.2f})".format(self.x, self.y))
```
这个示例中,我们在GLViewWidget中继承了QGLWidget,并且重载了initializeGL、resizeGL、paintGL、mouseMoveEvent和paintEvent等函数。其中,mouseMoveEvent函数会在鼠标移动时被触发,我们可以在这个函数中使用gluUnProject函数将窗口坐标转换为OpenGL坐标,并且将它保存下来。然后,我们在paintEvent函数中使用QPainter来绘制这个坐标。这样,当鼠标移动时,就会在窗口上显示出当前的坐标。
阅读全文