首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QtOpenGL中平移和缩放顶点线

如何在QtOpenGL中平移和缩放顶点线
EN

Stack Overflow用户
提问于 2017-12-11 02:49:29
回答 1查看 534关注 0票数 0

我正在寻找一种通过glVertex移动一些行形式的方法,但到目前为止,我还没有解决方案,这是我的代码。我尝试过移动glOrtho,它不起作用,我已经厌倦了添加翻译,如果我不断地移动它,它就不能工作。我也不知道如何处理变焦,也许我应该创造一个相机,把它变成一个完整的3D场景?但我没有找到好的文件,所以我希望有人能给我一些启发,谢谢。

代码语言:javascript
复制
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from PyQt4 import QtGui, QtCore
from PyQt4.QtOpenGL import *


class SampleWidget(QGLWidget):
    xTranslationChanged = QtCore.pyqtSignal(int)
    yTranslationChanged = QtCore.pyqtSignal(int)

    def __init__(self, parent=None):
        super(SampleWidget, self).__init__(parent)
        self.xTrans = 0
        self.yTrans = 0
        self.w = 1600
        self.h = 900
        self.lastPos = QtCore.QPoint()
        self.v_pos = [[50, 50], [75, 100], [100, 150], [200, 200], [300, 250], [400, 450]]

    def paintGL(self):
        glClear(GL_COLOR_BUFFER_BIT)
        glBegin(GL_LINE_STRIP)
        glColor3f(1.0, 0.0, 0.0)
        for i, x in enumerate(self.v_pos):
            if i < len(self.v_pos) - 1:
                glVertex2i(self.v_pos[i][0], self.v_pos[i][1])
                glVertex2i(self.v_pos[i + 1][0], self.v_pos[i + 1][1])
        glEnd()

    def resizeGL(self, w, h):
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        glOrtho(0, 1600, 0, 900, -1.0, 1.0)
        #glViewport(0, 0, w, h)

    def initializeGL(self):
        glClearColor(0.0, 0.0, 0.0, 1.0)
        glClear(GL_COLOR_BUFFER_BIT)

    def mousePressEvent(self, event):
        self.lastPos = event.pos()

    def mouseMoveEvent(self, event):
        dx = event.x() - self.lastPos.x()
        dy = event.y() - self.lastPos.y()
        # self.xTranslate(dx)
        # self.yTranslate(dy)
        glViewport(dx, dy, dx + 1600, dy + 900)
        if event.buttons() & QtCore.Qt.RightButton:
            pass

    def xTranslate(self, dx):
        self.xTrans = dx
        self.xTranslationChanged.emit(dx)
        self.updateGL()

    def yTranslate(self, dy):
        self.yTrans = -dy
        self.yTranslationChanged.emit(dy)
        self.updateGL()


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    widget = SampleWidget()
    widget.show()
    app.exec_()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-11 14:14:34

应该有一个glTranslate在某处,以移动您正在呈现的线条到正确的位置。在调用GL_MODELVIEW之前,应该将矩阵模式设置为glTranslate。

您可以使用glScale进行缩放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47745791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档