Less capable than blender but easier to learn, (subject to needing some maths), is Visual Python. The results are not as photo-realistic as for blender but for your usage it may well suffice.
- Free, Gratis & Open Source
- Cross Platform
- Easy installation:
- First download and install Python 2.7 32 or 64 bit depending on your machine & OS note not Python 3 at the moment - best to accept the defaults but do select "Add to path".
- Second download and install the matching version of vPython.
- Then start with the examples - on a windows machine if you accepted the defaults these will be in the C:\Python27\Lib\site-packages\visual\examples directory.
The
texture_and_lighting.py
example is 72 lines and produces and animated picture such as:
Where the striped ball is rolling from side to side and the light swinging from front to back. You can navigate around the image with the right mouse button and into it with the middle.
With a little playing about with the demo I was able to produce:
"""
Steve Barnes 07/12/2015
Based on Bruce Sherwood, August 2006
Demonstration of transparency (opacity), materials, and local lights in Visual 5
"""
from __future__ import division
from visual import *
scene.width = scene.height = 1000
scene.forward = (-0.2,-0.2,-1)
width = 10 # of wood table
thick = 0.5 # thickness of wood
depth = 7 # of wood table
height = 2 # of side bars of table
R = 2 # radius of components
H = 10 # height of underside of ceiling above floor
L = 5 # length of pendulum to center of hanging lamp
# top of floor is at y=0 for convenience
floor = box(pos=(0,-thick/2,0), size=(width,thick,depth),
shininess=0, color=color.orange, material=materials.wood)
left = box(pos=(-(width/2+thick/2),height/2-thick,0), size=(thick,height,depth),
shininess=0, color=color.orange, material=materials.wood)
right = box(pos=(width/2+thick/2,height/2-thick,0), size=(thick,height,depth),
shininess=0, color=color.orange, material=materials.wood)
back = box(pos=(0,height/2-thick,-(depth/2+thick/2)), size=(width+2*thick,height,thick),
shininess=0, color=color.orange, material=materials.wood)
# Block at the top and the pendulum light
ceiling = box(pos=(0,H+thick/2,0), size=(width/10,thick,width/10), color=color.orange, material=materials.wood)
pendulum = frame(pos=(0,H,0), axis=(0,-1,0))
wire = curve(frame=pendulum, pos=[(0,0,0),(L,0,0)])
lamp = sphere(frame=pendulum, pos=(L,0,0), radius=0.03*L, color=color.white, material=materials.emissive)
# Cubic Planet
box(pos=(-0.3*width,R/4,-0.25*depth), size=(R, R, R), material=materials.earth)
# Make the Pipe
C1 = shapes.circle(pos=(0.15*width,R/4,0.3*depth), radius=R/3)#, axis=(0,H/4,0), visible=0)
C2 = shapes.circle(pos=(0.15*width,R/4,0.3*depth), radius=R/2)#, axis=(0,H/4,0), visible=0)
Ring = C2-C1
pipe = extrusion(pos=paths.line((0.15*width,0,0.2*depth), (0.15*width,R,0.2*depth)), shape=Ring, material=materials.bricks)
# Cone
cone(pos=(0.1*width,0,-0.15*depth), radius=R/2, axis=(0,2,0), color=color.cyan, material=materials.marble)
# Ball for good measure
sphere(pos=(0.15*width,R/4,-0.3*depth), radius=R/4, color=color.green, material=materials.marble)
# Ambiant Lighting
scene.lights = []
scene.ambient = color.gray(0.25)
l1 = distant_light(direction=(6,2,4), color=color.gray(0.3))
l2 = distant_light(direction=(-10,2,4), color=color.gray(0.2))
lamplight = local_light(frame=pendulum, pos=(L,0,0), color=color.gray(0.5))
scene.center = (0,0.4*H,0)
dt = 0.03
t = 0
while True:
rate(40)
angle = 0.02*cos(t)
pendulum.rotate(axis=(1,0,0), angle=angle)
t += dt
Which gave: