天天看点

python中如何移动图形_图形学作业(一)基于OpenGL图形的移动和缩放(python)

一、首先,你得先了解OpenGL,要不然很难看懂代码。传送门https://blog.csdn.net/xufive/article/details/86565130。下载好PyOpenGL的包,准备好对应的whl文件,传送门https://www.lfd.uci.edu/~gohlke/pythonlibs/,放入你的python文件下的scripts里,cmd pip install 包名。1.如果显示already satisfied已经下载好了但是用不了,说明你有多个python或pip,这个时候在cmd pip前加上具体的路径名就可以。2.显示缺少glut什么的,自行百度找glut文件,一般是放在c:/windows/systems32下。这个错误的传送门https://www.cnblogs.com/0901-hcx/p/11561393.html

二、本文实现图形几何变换,实现键盘控制上下左右移动,鼠标控制大小

三、代码

#coding=utf-8

from OpenGL.GL import *

from OpenGL.GLU import *

from OpenGL.GLUT import *

import math

def init():

glClearColor(1.0, 1.0, 6.0, 1.0) # 背景颜色

glMatrixMode(GL_PROJECTION) # 投影

gluOrtho2D(0.0, 600.0, 0.0, 600.0) # 参数分别代表(左下角x坐标,右上角x坐标,左下角y坐标,右上角y坐标)

#图形围绕定点(width,highth)做变换

width=70

highth=70

#画所要处理的图像

def display():

glClear(GL_COLOR_BUFFER_BIT)

glColor3f(1.0, 0.0, 1.0) #三角形颜色

GLfloat

PointA = (50+width, 50+highth)

PointB = (100+width, 100+highth)

PointC = (150+width, 50+highth)

glLineWidth(5.0)

glBegin(GL_LINE_LOOP) # 闭合折线 开始绘制线段

glVertex2fv(PointA)

glVertex2fv(PointB)

glVertex2fv(PointC)

glEnd() #结束绘制线段

glFlush() #清空缓冲区

#用键盘将图像平移

def mykeyboard(key, x, y):

global width, highth

if (key == GLUT_KEY_RIGHT):

width += 1.0

if (key == GLUT_KEY_LEFT):

width -= 1.0

if (key == GLUT_KEY_UP):

highth += 1.0

if (key == GLUT_KEY_DOWN):

highth -= 1.0

glutPostRedisplay()

#用鼠标图形缩放

def mymouse(button,state,x,y):

if (state == GLUT_DOWN):

if (button == GLUT_LEFT_BUTTON):

glScalef(0.5, 0.5, 0.0)

display()

elif(button == GLUT_RIGHT_BUTTON):

glScalef(1.5, 1.5, 0.0)

display()

glutPostRedisplay() #重新调用绘制函数

return

if __name__=="__main__":

glutInit() #窗口初始化

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)

glutInitWindowSize(600,600)

glutCreateWindow("slide and scale")

init()

glutDisplayFunc(display)

glutSpecialFunc(mykeyboard)#特殊按键

glutMouseFunc(mymouse)

glutMainLoop() #运行主函数

四、结果

这个博客上传图片太麻烦了,老是失败,你自己运行试试吧