2017-12-11 40 views
0

glVertexによっていくつかの線のフォームを移動する方法を探していますが、これまでのところ固執していません。私はglOrthoを動かしてみました、うまくいきません、翻訳を追加するのに疲れました。私が絶えず動いているとうまくいきません。私はズームをどうすればいいのか分からず、おそらくカメラを作成して完全な3Dシーンにするべきでしょうか?しかし、私はそれについての良い文書を見つけることはできませんので、私は誰かが私に軽い、感謝を払うことを願っています。QtOpenGLで頂点線をパンしたりズームする方法

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_() 

答えて

0

レンダリングする線を正しい位置に移動するには、どこかにglTranslateがあるはずです。 glTranslateを呼び出す前に、行列モードをGL_MODELVIEWに設定する必要があります。

glScaleを使ってズームできます。

関連する問題