On 6 Dec 2006 at 11:01, Kris Schnee wrote: > On a whim, since we're talking about graphics engines and I hear someone > else is doing one, I put together a super-simple raycasting engine > during class this morning. I call it "Tachikoma," having just rented > "Ghost In the Shell: Stand-Alone Complex." For your amusement: > > http://kschnee.xepher.net/code/raycaster.py.txt > > It works in that you can view some "walls" in a 3D perspective in the > style of "Wolfenstein 3D," but there's some weird fisheye distortion I > haven't figured out how to correct for. > > (To use: Just run it, and use the arrow keys to move and Esc to quit. > Requires just Python and Pygame, no graphics files.) > Interesting. The distortion is because apparent size is inversely proportional to distance; the program simply subtracts the distance. Here are some code changes that give better perspective. Inserted code is marked with #**: def DrawWorld(self): fov_size = (100,100) half_wall_height = 20 #** ... leftmost_line_x = 100 # Calculate distance at which top of wall #** # touches top of image. #** # viewing angle: 100 degrees #** vertical_limit_distance = ( half_wall_height / math.tan(math.radians(50)) #** ... for n in range(len(angles_to_scan)): ... for dist in range(0,max_draw_distance): ... if whats_here[0] == 255: ## print "Angle "+str(angle)+": Wall @ distance "+str(dist) half_apparent_wall_height = ( half_wall_height * vertical_limit_distance) / dist #** ## Correct for fisheye distortion. For comparison I rendered your model with POV-Ray (see attachment) using a perspetive camera with 1:1 aspect ratio and 100 degree viewing angle. Lighting is fully ambient and the wall height is 20. Lenard Lindstrom <len-l@xxxxxxxxx>
The following section of this message contains a file attachment prepared for transmission using the Internet MIME message format. If you are using Pegasus Mail, or any other MIME-compliant system, you should be able to save it or view it from within your mailer. If you cannot, please ask your system administrator for assistance. ---- File information ----------- File: perspective.png Date: 6 Dec 2006, 12:21 Size: 645 bytes. Type: Binary
Attachment:
perspective.png
Description: Binary data