⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kites.py

📁 reduced python source for embedded apps
💻 PY
字号:
#! /usr/bin/env python# *** This only works correctly on a 24 bit-plane machine. ***## A simple Python program that tests the some parts of the# GL library. It shows the speed that can be obtained when# doing simple graphics.## The bottleneck in this program is NOT Python but the graphics# engine; i.e Python can feed the graphics pipeline fast enough# on the 4D/25G.## This program show 3 kites flying around the screen. It uses## 	* bgnpolygon, endpolygon# 	* v3, n3# 	* lmdef, lmbind## Usage :# # 	ESC 	-> exit program# 	MOUSE3 	-> freeze toggle# 	MOUSE2 	-> one step (use this in freeze state)from GL import *from gl import *import DEVICEfrom math import *## viewobj : sets the rotation, translation and scaling# set appropiate material, call drawobject()#def viewobj (r, s, t, mat) :	pushmatrix()	rot (r * 10.0, 'X')	rot (r * 10.0, 'Y')	rot (r * 10.0, 'Z')	scale (s[0], s[1], s[2])	translate (t[0], t[1], t[2])	lmbind(MATERIAL, mat)	drawobject()	popmatrix()## makeobj : the contructor of the object#def mkobj () :	v0 = (-5.0 ,0.0, 0.0)	v1 = (0.0 ,5.0, 0.0)	v2 = (5.0 ,0.0, 0.0)	v3 = (0.0 ,2.0, 0.0)	n0 = (sqrt(2.0)/2.0, sqrt(2.0)/2.0, 0.0)	vn = ((v0, n0), (v1, n0), (v2, n0), (v3, n0))	#	return vn## the object itself as an array of vertices and normals#kite = mkobj ()## drawobject : draw a triangle. with bgnpolygon#def drawobject () :	#	bgnpolygon()	vnarray (kite)	endpolygon()## identity matrix#idmat=[1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0]## the rgb-value of light-blue #LightBlue = (43,169,255)## the different materials.#m1=[SPECULAR,0.0,0.0,0.6,DIFFUSE,0.0,0.0,0.8,SHININESS,20.0,LMNULL]m2=[SPECULAR,0.8,0.0,0.1,DIFFUSE,0.8,0.0,0.3,SHININESS,120.0,LMNULL]m3=[SPECULAR,0.0,1.0,0.0,DIFFUSE,0.0,0.6,0.0,SHININESS,120.0,LMNULL]## lightsources#light1 = [LCOLOR,1.0,1.0,1.0,POSITION,15.0,15.0,0.0,1.0,LMNULL]light2 = [LCOLOR,1.0,1.0,1.0,POSITION,-15.0,15.0,0.0,1.0,LMNULL]## the lightmodel#model = [AMBIENT,0.2,0.2,0.2,LMNULL]## initgl : opens the window, configures the pipeline to 2buf and zbuf,# sets the viewing, defines and binds the materials#def initgl () :	#	# open window	#	foreground ()	keepaspect (1, 1)	prefposition (100, 500, 100, 500)	w = winopen ('PYTHON lights')	keepaspect (1, 1)	winconstraints()	#	# configure pipeline (zbuf, 2buf, GOURAUD and RGBmode)	#	zbuffer (1)	doublebuffer ()	shademodel (GOURAUD)	RGBmode ()	gconfig ()	#	# define and bind materials (set perspective BEFORE loadmat !)	#	mmode(MVIEWING)	perspective (900, 1.0, 1.0, 20.0)	loadmatrix(idmat)	lmdef(DEFMATERIAL, 1, m1)	lmdef(DEFMATERIAL, 2, m2)	lmdef(DEFMATERIAL, 3, m3)	lmdef(DEFLIGHT, 1, light1)	lmdef(DEFLIGHT, 2, light2)	lmdef(DEFLMODEL, 1, model)	lmbind(LIGHT0,1)	lmbind(LIGHT1,2)	lmbind(LMODEL,1)	#	# set viewing	#	lookat (0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0)	#	# ask for the REDRAW and ESCKEY events	#	qdevice(DEVICE.MOUSE3)	qdevice(DEVICE.MOUSE2)	qdevice(DEVICE.REDRAW)	qdevice(DEVICE.ESCKEY)## GoForIT : use 2buf to redraw the object 2n times. index i is used as # the (smoothly changing) rotation angle#def GoForIt(i) :	freeze = 1	while 1 :		if freeze <> 0 :			i = i + 1		#		# clear z-buffer and clear background to light-blue		#		zclear()		c3i (LightBlue)		clear()		#		# draw the 3 traiangles scaled above each other.		#		viewobj(float(i),[1.0,1.0,1.0],[1.0,1.0,1.0],1)		viewobj(float(i),[0.75,0.75,0.75],[0.0,2.0,2.0],2)		viewobj(float(i),[0.5,0.5,0.5],[0.0,4.0,4.0],3)		#		swapbuffers()		#		if qtest() <> 0 :			dev, val = qread()			if dev == DEVICE.ESCKEY :				break			elif dev == DEVICE.REDRAW :				reshapeviewport ()			elif dev == DEVICE.MOUSE3 and val <> 0 :				freeze = 1 - freeze			elif dev == DEVICE.MOUSE2 and val <> 0 :				i = i + 1# the main program#def main () :	initgl ()	GoForIt (0)## exec main#main  ()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -