【问题标题】:How do I resize,scale or magnify the distances between points plotted in OpenGl如何调整、缩放或放大在 OpenGl 中绘制的点之间的距离
【发布时间】:2014-03-03 01:21:55
【问题描述】:

我正在尝试生成一个以纬度和经度作为输入的地图。我对 OpenGL 相当陌生。我需要根据给定的点重新生成地图,但是为了让它看起来不错,它需要按比例缩放到一个大小,以便可以适当地查看它。地图看起来非常密集。关于如何缩放地图以使其适合窗口大小的任何想法。

from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *

import math

def initFun():
    glClearColor(1.0,1.0,1.0,0.0)
    glColor3f(0.0,0.0, 0.0)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluOrtho2D(0,700,0,700)

def displayFun():
    glClear(GL_COLOR_BUFFER_BIT)
    glColor3f(0.0,0.0,1.0)
    xpts=[]
    ypts=[]
    N=len(newlist)
    for i in range(0,N):
        xpts.append(float(newlist[i][4]))
        ypts.append(float(newlist[i][5]))

    glBegin(GL_POINTS)
    for j in range(0,N):        
        glVertex2f(xpts[j],ypts[j])

    glEnd()
    glFlush()

if __name__ == '__main__':
    glutInit()
    glutInitWindowSize(700,700)
    glutCreateWindow("My Display")
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
    glutDisplayFunc(displayFun)
    initFun()
    glutMainLoop()

【问题讨论】:

    标签: python opengl scaling points


    【解决方案1】:

    您应该将 gluOrtho2D 更改为 gluOrtho2D(minX,maxX,minY,maxY),这将更好地定位相机 - 根据图像,我将尝试将 700 替换为 300

    【讨论】:

      【解决方案2】:

      我发现这是一些简单的数学运算。使用缩放矩阵 [4,0,0,0,4,0,0,0,1]*[x,y,1]。所以在相乘之后我们得到[4x,4y,1]。因此,如果我们将所有点相乘,图像就会被缩放。在学校学习这个。地图也倒过来了。所以我的程序最终看起来是这样的

      from OpenGL.GL import *
      from OpenGL.GLUT import *
      from OpenGL.GLU import *
      
      import math
      
      def initFun():
          glClearColor(1.0,1.0,1.0,0.0)
          glColor3f(0.0,0.0, 0.0)
          glMatrixMode(GL_PROJECTION)
          glLoadIdentity()
          gluOrtho2D(0,700,0,700)
      
      def displayFun():
          glClear(GL_COLOR_BUFFER_BIT)
          glColor3f(0.0,0.0,1.0)
          xpts=[]
          ypts=[]
          N=len(newlist)
          for i in range(0,N):
              xpts.append(700+100-float(newlist[i][4])*20)
              ypts.append(700+1300-float(newlist[i][5])*20)
      
          glBegin(GL_POINTS)
          for j in range(0,N):        
              glVertex2f(xpts[j],ypts[j])
      
          glEnd()
          glFlush()
      
      if __name__ == '__main__':
          glutInit()
          glutInitWindowSize(700,700)
          glutCreateWindow("My Display")
          glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
          glutDisplayFunc(displayFun)
          initFun()
          glutMainLoop()
      

      【讨论】:

      • 所以我得到的最后一个点是 [4x,4y,1] 即 (4x,4y)。抱歉,这里问的太琐碎了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多