2017-12-11 30 views
0

glVertex로 일부 선을 이동하는 방법을 찾고 있지만 지금까지는 내 코드가 없습니다. 나는 움직이지 않으려 고 노력했다. 작동하지 않는다. 나는 번역을 추가하는데 지쳤다. 끊임없이 패닝을하면 작동하지 않는다. 그리고 나는 줌과 함께 무엇을 해야할지 전혀 모릅니다. 아마도 카메라를 만들어서 그것을 완전한 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을 사용하여 확대/축소를 할 수 있습니다.