mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 09:57:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			168 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #! /usr/bin/env python
 | |
| 
 | |
| #   zrgb  (Requires Z buffer.)
 | |
| #
 | |
| # This program demostrates zbuffering 3 intersecting RGB polygons while
 | |
| # in doublebuffer mode where, movement of the mouse with the LEFTMOUSE 
 | |
| # button depressed will, rotate the 3 polygons. This is done by compound
 | |
| # rotations allowing continuous screen-oriented rotations. 
 | |
| #
 | |
| #    Press the "Esc" key to exit.  
 | |
| 
 | |
| from gl import *
 | |
| from GL import *
 | |
| from DEVICE import *
 | |
| 
 | |
| 
 | |
| idmat=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]
 | |
| 
 | |
| def main() :
 | |
| 	#
 | |
| 	# old and new mouse position
 | |
| 	#
 | |
| 	#
 | |
| 	mode = 0
 | |
| 	omx = 0
 | |
| 	mx = 0
 | |
| 	omy = 0
 | |
| 	my = 0
 | |
| 	#
 | |
| 	objmat=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]
 | |
| 	#
 | |
| 	initialize ()
 | |
| 	#
 | |
| 	draw_scene (objmat)
 | |
| 	#
 | |
| 	while (1) :
 | |
| 		#
 | |
| 		dev, val = qread()
 | |
| 		#
 | |
| 		if dev == ESCKEY :
 | |
| 			if val :
 | |
| 				break	
 | |
| 			# exit when key is going up, not down
 | |
| 			# this avoids the scenario where a window 
 | |
| 			# underneath this program's window
 | |
| 			# would otherwise "eat up" the up-
 | |
| 			# event of the Esc key being released
 | |
| 			return        
 | |
| 			#
 | |
| 		elif dev == REDRAW :
 | |
| 			reshapeviewport()
 | |
| 			draw_scene(objmat)
 | |
| 			#
 | |
| 		elif dev == LEFTMOUSE:
 | |
| 			omx = mx
 | |
| 			omy = my
 | |
| 			if val :
 | |
| 				mode = 1
 | |
| 			else :
 | |
| 				mode = 0
 | |
| 		elif dev == MOUSEX :
 | |
| 			omx = mx
 | |
| 			mx = val
 | |
| 			#print omx, mx
 | |
| 			objmat = update_scene(objmat,mx,my,omx,omy,mode)
 | |
| 			#
 | |
| 		elif dev == MOUSEY :
 | |
| 			omy = my
 | |
| 			my = val
 | |
| 			#print omy, my
 | |
| 			objmat = update_scene(objmat,mx,my,omx,omy,mode)
 | |
| 			#
 | |
| 
 | |
| 
 | |
| def initialize () :
 | |
| 	#
 | |
| 	foreground ()
 | |
| 	keepaspect(5, 4)
 | |
| 	w = winopen('Zbuffered RGB')
 | |
| 	#
 | |
| 	doublebuffer()
 | |
| 	RGBmode()
 | |
| 	gconfig()
 | |
| 	zbuffer(1)
 | |
| 	lsetdepth(0x0, 0x7FFFFF)
 | |
| 	#
 | |
| 	qdevice(ESCKEY)
 | |
| 	qdevice(LEFTMOUSE)
 | |
| 	qdevice(MOUSEX)
 | |
| 	qdevice(MOUSEY)
 | |
| 
 | |
| def update_scene (mat, mx, my, omx, omy, mode) :
 | |
| 	#
 | |
| 	if mode == 1 :
 | |
| 		mat = orient(mat, mx, my, omx, omy)
 | |
| 		draw_scene(mat)
 | |
| 	return mat
 | |
| 
 | |
| def orient (mat, mx, my, omx, omy) :
 | |
| 	#
 | |
| 	#
 | |
| 	pushmatrix()
 | |
| 	loadmatrix(idmat)
 | |
| 	#
 | |
| 	if mx - omx : rot (float (mx - omx), 'y')
 | |
| 	if omy - my : rot (float (omy - my), 'x')
 | |
| 	#
 | |
| 	multmatrix(mat)
 | |
| 	mat = getmatrix()
 | |
| 	#
 | |
| 	popmatrix()
 | |
| 	#
 | |
| 	return mat
 | |
| 
 | |
| def draw_scene (mat) :
 | |
| 	RGBcolor(40, 100, 200)
 | |
| 	clear()
 | |
| 	zclear()
 | |
| 	#
 | |
| 	perspective(400, 1.25, 30.0, 60.0)
 | |
| 	translate(0.0, 0.0, -40.0)
 | |
| 	multmatrix(mat)
 | |
| 	#
 | |
| 	# skews original view to show all polygons
 | |
| 	#
 | |
| 	rotate(-580, 'y')
 | |
| 	draw_polys()
 | |
| 	#
 | |
| 	swapbuffers()
 | |
| 
 | |
| polygon1 = [(-10.0,-10.0,0.0),(10.0,-10.0,0.0),(-10.0,10.0,0.0)]
 | |
| 
 | |
| polygon2 = [(0.0,-10.0,-10.0),(0.0,-10.0,10.0),(0.0,5.0,-10.0)]
 | |
| 
 | |
| polygon3 = [(-10.0,6.0,4.0),(-10.0,3.0,4.0),(4.0,-9.0,-10.0),(4.0,-6.0,-10.0)]
 | |
| 
 | |
| def draw_polys():
 | |
| 	bgnpolygon()
 | |
| 	cpack(0x0)
 | |
| 	v3f(polygon1[0])
 | |
| 	cpack(0x007F7F7F)
 | |
| 	v3f(polygon1[1])
 | |
| 	cpack(0x00FFFFFF)
 | |
| 	v3f(polygon1[2])
 | |
| 	endpolygon()
 | |
| 	#
 | |
| 	bgnpolygon()
 | |
| 	cpack(0x0000FFFF)
 | |
| 	v3f(polygon2[0])
 | |
| 	cpack(0x007FFF00)
 | |
| 	v3f(polygon2[1])
 | |
| 	cpack(0x00FF0000)
 | |
| 	v3f(polygon2[2])
 | |
| 	endpolygon()
 | |
| 	#
 | |
| 	bgnpolygon()
 | |
| 	cpack(0x0000FFFF)
 | |
| 	v3f(polygon3[0])
 | |
| 	cpack(0x00FF00FF)
 | |
| 	v3f(polygon3[1])
 | |
| 	cpack(0x00FF0000)
 | |
| 	v3f(polygon3[2])
 | |
| 	cpack(0x00FF00FF)
 | |
| 	v3f(polygon3[3])
 | |
| 	endpolygon()
 | |
| 
 | |
| 
 | |
| main ()
 | 
