def __init__(self, camera, light, name, x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz): """ Arguments: *light* Light instance: if None then Light.instance() will be used. *name* Name string for identification. *x, y, z* Location of the origin of the shape, stored in a uniform array. *rx, ry, rz* Rotation of shape in degrees about each axis. *sx, sy, sz* Scale in each direction. *cx, cy, cz* Offset vertices from origin in each direction. """ super(Shape, self).__init__() self.name = name light = light or Light.instance() # uniform variables all in one array (for Shape and one for Buffer) self.unif = (ctypes.c_float * 60)( x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz, 0.5, 0.5, 0.5, 5000.0, 0.8, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, light.lightpos[0], light.lightpos[1], light.lightpos[2], light.lightcol[0], light.lightcol[1], light.lightcol[2], light.lightamb[0], light.lightamb[1], light.lightamb[2]) """ pass to shader array of vec3 uniform variables: ===== ========================================== ==== == vec3 description python ----- ------------------------------------------ ------- index from to ===== ========================================== ==== == 0 location 0 2 1 rotation 3 5 2 scale 6 8 3 offset 9 11 4 fog shade 12 14 5 fog distance, fog alpha, shape alpha 15 17 6 camera position 18 20 7 unused: custom data space 21 23 8 light0 position, direction vector 24 26 9 light0 strength per shade 27 29 10 light0 ambient values 30 32 11 light1 position, direction vector 33 35 12 light1 strength per shade 36 38 13 light1 ambient values 39 41 14 defocus dist, amount (only 2 used) 42 43 15 defocus frame width, height (only 2 used) 45 46 16 custom data space 48 50 17 custom data space 51 53 18 custom data space 54 56 19 custom data space 57 59 ===== ========================================== ==== == """ self.shader = None self.textures = [] self.buf = [] """self.buf contains a buffer for each part of this shape that needs rendering with a different Shader/Texture. self.draw() relies on objects inheriting from this filling buf with at least one element. """ self.children = [] self._camera = camera self.__init_matrices()
from pi3d.event.Event import InputEvents LOGGER = Log.logger(__name__) # Create a Tkinter window winw, winh, bord = 1200, 600, 0 #64MB GPU memory setting # winw,winh,bord = 1920,1200,0 #128MB GPU memory setting DISPLAY = Display.create(tk=True, window_title='Tiger Tank demo in Pi3D', w=winw, h=winh - bord, far=2200.0, background=(0.4, 0.8, 0.8, 1), frames_per_second=16) #inputs = InputEvents() #inputs.get_mouse_movement() Light(lightpos=(-1, -1, 1), lightcol =(0.8, 0.8, 0.8), lightamb=(0.30, 0.30, 0.32)) win = DISPLAY.tkwin shader = Shader('shaders/uv_reflect') flatsh = Shader('shaders/uv_flat') shade2d = Shader('shaders/2d_flat') #======================================== # create splash screen and draw it splash = ImageSprite("textures/tiger_splash.jpg", shade2d, w=10, h=10, z=0.2) splash.draw() DISPLAY.swap_buffers() # create environment cube ectex = EnvironmentCube.loadECfiles('textures/ecubes/Miramar', 'miramar_256',
from pi3d.Texture import Texture from pi3d.Light import Light from pi3d.Camera import Camera from pi3d.Shader import Shader from pi3d.shape.EnvironmentCube import EnvironmentCube from pi3d.shape.EnvironmentCube import loadECfiles from pi3d.shape.Model import Model from pi3d.util.Screenshot import screenshot # Setup display and initialise pi3d DISPLAY = Display.create(x=100, y=100) DISPLAY.set_background(1.0,0.4,0.6,1) # r,g,b,alpha Light((5, -10, -20), (0.6, 0.6, 0.5), (0.3, 0.3, 0.4)) # load shader shader = Shader("shaders/uv_light") flatsh = Shader("shaders/uv_flat") print("==============================================================") print("Instructions:") print("") print("Keys- W - Forward,") print(" A - Left S - Back D - right") print("") print("Move mouse to pan view. Click mouse to exit or press ESCAPE") print("==============================================================") ectex = loadECfiles("textures/ecubes","sbox")
def __init__(self, camera, light, name, x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz): """ Arguments: *light* Light instance: if None then Light.instance() will be used. *name* Name string for identification. *x, y, z* Location of the origin of the shape, stored in a uniform array. *rx, ry, rz* Rotation of shape in degrees about each axis. *sx, sy, sz* Scale in each direction. *cx, cy, cz* Offset vertices from origin in each direction. """ super(Shape, self).__init__() self.name = name light = light or Light.instance() # uniform variables all in one array (for Shape and one for Buffer) self.unif = (ctypes.c_float * 60)( x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz, 0.5, 0.5, 0.5, 5000.0, 0.8, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, light.lightpos[0], light.lightpos[1], light.lightpos[2], light.lightcol[0], light.lightcol[1], light.lightcol[2], light.lightamb[0], light.lightamb[1], light.lightamb[2]) """ pass to shader array of vec3 uniform variables: ===== ========================================== ==== == vec3 description python ----- ------------------------------------------ ------- index from to ===== ========================================== ==== == 0 location 0 2 1 rotation 3 5 2 scale 6 8 3 offset 9 11 4 fog shade 12 14 5 fog distance, fog alpha, shape alpha 15 17 6 camera position 18 20 7 unused: custom data space 21 23 8 light0 position, direction vector 24 26 9 light0 strength per shade 27 29 10 light0 ambient values 30 32 11 light1 position, direction vector 33 35 12 light1 strength per shade 36 38 13 light1 ambient values 39 41 14 defocus dist, amount (only 2 used) 42 43 15 defocus frame width, height (only 2 used) 45 46 16 custom data space 48 50 17 custom data space 51 53 18 custom data space 54 56 19 custom data space 57 59 ===== ========================================== ==== == Shape holds matrices that are updated each time it is moved or rotated this saves time recalculating them each frame as the Shape is drawn """ self.tr1 = array([[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [self.unif[0] - self.unif[9], self.unif[1] - self.unif[10], self.unif[2] - self.unif[11], 1.0]]) """translate to position - offset""" s, c = sin(radians(self.unif[3])), cos(radians(self.unif[3])) self.rox = array([[1.0, 0.0, 0.0, 0.0], [0.0, c, s, 0.0], [0.0, -s, c, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about x axis""" s, c = sin(radians(self.unif[4])), cos(radians(self.unif[4])) self.roy = array([[c, 0.0, -s, 0.0], [0.0, 1.0, 0.0, 0.0], [s, 0.0, c, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about y axis""" s, c = sin(radians(self.unif[5])), cos(radians(self.unif[5])) self.roz = array([[c, s, 0.0, 0.0], [-s, c, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about z axis""" self.scl = array([[self.unif[6], 0.0, 0.0, 0.0], [0.0, self.unif[7], 0.0, 0.0], [0.0, 0.0, self.unif[8], 0.0], [0.0, 0.0, 0.0, 1.0]]) """scale""" self.tr2 = array([[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [self.unif[9], self.unif[10], self.unif[11], 1.0]]) """translate to offset""" self.MFlg = True self.M = (ctypes.c_float * 32)(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) self._camera = camera self.shader = None self.textures = [] self.buf = [] """self.buf contains a buffer for each part of this shape that needs
from pi3d.util.String import String from pi3d.util.Screenshot import screenshot from pi3d.util.Defocus import Defocus #helpful messages print("############################################################") print("Mouse to move left and right and up and down") print("############################################################") print() # Setup display and initialise pi3d DISPLAY = Display.create(x=200, y=200, frames_per_second=20) DISPLAY.set_background(0.4, 0.8, 0.8, 1) # r,g,b,alpha camera = Camera((0, 0, 0), (0, 0, -1), (1, 1000, 30.0, DISPLAY.width / DISPLAY.height)) light = Light((10, -10, 20)) # load shader shader = Shader("shaders/uv_reflect") flatsh = Shader("shaders/uv_flat") defocus = Defocus() #======================================== # Setting 2nd param to True renders 'True' Blending # (this can be changed later to 'False' with 'rockimg2.blend = False') groundimg = Texture("textures/stripwood.jpg") monstimg = Texture("textures/pong3.png") ballimg = Texture("textures/pong2.jpg") # environment cube ectex = Texture("textures/ecubes/skybox_stormydays.jpg") myecube = EnvironmentCube(camera, light, 900.0, "CROSS")
def __init__(self, camera, light, name, x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz): """ Arguments: *light* Light instance: if None then Light.instance() will be used. *name* Name string for identification. *x, y, z* Location of the origin of the shape, stored in a uniform array. *rx, ry, rz* Rotation of shape in degrees about each axis. *sx, sy, sz* Scale in each direction. *cx, cy, cz* Offset vertices from origin in each direction. """ super(Shape, self).__init__() self.name = name light = light or Light.instance() # uniform variables all in one array (for Shape and one for Buffer) self.unif = (ctypes.c_float * 60)( x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz, 0.5, 0.5, 0.5, 5000.0, 0.8, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, light.lightpos[0], light.lightpos[1], light.lightpos[2], light.lightcol[0], light.lightcol[1], light.lightcol[2], light.lightamb[0], light.lightamb[1], light.lightamb[2]) """ pass to shader array of vec3 uniform variables: ===== ========================================== ==== == vec3 description python ----- ------------------------------------------ ------- index from to ===== ========================================== ==== == 0 location 0 2 1 rotation 3 5 2 scale 6 8 3 offset 9 11 4 fog shade 12 14 5 fog distance, fog alpha, shape alpha 15 17 6 camera position 18 20 7 unused: custom data space 21 23 8 light0 position, direction vector 24 26 9 light0 strength per shade 27 29 10 light0 ambient values 30 32 11 light1 position, direction vector 33 35 12 light1 strength per shade 36 38 13 light1 ambient values 39 41 14 defocus dist, amount (only 2 used) 42 43 15 defocus frame width, height (only 2 used) 45 46 16 custom data space 48 50 17 custom data space 51 53 18 custom data space 54 56 19 custom data space 57 59 ===== ========================================== ==== == Shape holds matrices that are updated each time it is moved or rotated this saves time recalculating them each frame as the Shape is drawn """ self.tr1 = array([[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [ self.unif[0] - self.unif[9], self.unif[1] - self.unif[10], self.unif[2] - self.unif[11], 1.0 ]]) """translate to position - offset""" s, c = sin(radians(self.unif[3])), cos(radians(self.unif[3])) self.rox = array([[1.0, 0.0, 0.0, 0.0], [0.0, c, s, 0.0], [0.0, -s, c, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about x axis""" s, c = sin(radians(self.unif[4])), cos(radians(self.unif[4])) self.roy = array([[c, 0.0, -s, 0.0], [0.0, 1.0, 0.0, 0.0], [s, 0.0, c, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about y axis""" s, c = sin(radians(self.unif[5])), cos(radians(self.unif[5])) self.roz = array([[c, s, 0.0, 0.0], [-s, c, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about z axis""" self.scl = array([[self.unif[6], 0.0, 0.0, 0.0], [0.0, self.unif[7], 0.0, 0.0], [0.0, 0.0, self.unif[8], 0.0], [0.0, 0.0, 0.0, 1.0]]) """scale""" self.tr2 = array([[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [self.unif[9], self.unif[10], self.unif[11], 1.0]]) """translate to offset""" self.MFlg = True self.M = (ctypes.c_float * 32)(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) self._camera = camera self.shader = None self.textures = [] self.buf = [] """self.buf contains a buffer for each part of this shape that needs
from pi3d.util.Ttffont import Ttffont from pi3d.shape.MergeShape import MergeShape from pi3d.shape.Plane import Plane from pi3d.util.Screenshot import screenshot print("=====================================================") print("press escape to escape") print("move this terminal window to top of screen to see FPS") print("=====================================================") # Setup display and initialise pi3d DISPLAY = Display.create(x=200, y=150, frames_per_second=25.0) DISPLAY.set_background(0.4, 0.6, 0.8, 0.5) # r,g,b,alpha #setup textures, light position and initial model position Light((5, -5, 8)) #create shaders shader = Shader("shaders/uv_reflect") matsh = Shader("shaders/mat_reflect") flatsh = Shader("shaders/uv_flat") #Create textures shapeimg = Texture("textures/straw1.jpg") shapebump = Texture("textures/mudnormal.jpg") waterbump = [] iFiles = glob.glob("textures/water/n_norm???.png") iFiles.sort() # order is vital to animation! for f in iFiles: waterbump.append(Texture(f)) num_n = len(waterbump) shapeshine = Texture("textures/stars.jpg")
from pi3d.shape.ElevationMap import ElevationMap from pi3d.shape.EnvironmentCube import EnvironmentCube from pi3d.shape.EnvironmentCube import loadECfiles from pi3d.shape.MergeShape import MergeShape from pi3d.shape.Plane import Plane from pi3d.shape.Sphere import Sphere from pi3d.util.Screenshot import screenshot from pi3d.util.Clashtest import Clashtest # Setup display and initialise pi3d DISPLAY = Display.create(x=100, y=100) DISPLAY.set_background(0.4, 0.8, 0.8, 1) # r,g,b,alpha # yellowish directional light blueish ambient light Light(lightpos=(1, -1, -3), lightcol=(1.0, 1.0, 0.7), lightamb=(0.15, 0.1, 0.3)) #======================================== # load shader shader = Shader("shaders/uv_reflect") flatsh = Shader("shaders/uv_flat") tree2img = Texture("textures/tree2.png") tree1img = Texture("textures/tree1.png") hb2img = Texture("textures/hornbeam2.png") bumpimg = Texture("textures/grasstile_n.jpg") reflimg = Texture("textures/stars.jpg") rockimg = Texture("textures/rock1.jpg")
from pi3d.shape.ElevationMap import ElevationMap from pi3d.shape.EnvironmentCube import EnvironmentCube from pi3d.shape.EnvironmentCube import loadECfiles from pi3d.shape.MergeShape import MergeShape from pi3d.shape.Plane import Plane from pi3d.shape.Sphere import Sphere from pi3d.util.Screenshot import screenshot # Setup display and initialise pi3d DISPLAY = Display.create(x=200, y=200) DISPLAY.set_background(0.4, 0.8, 0.8, 1) # r,g,b,alpha # yellowish directional light blueish ambient light Light(lightpos=(1, -1, -3), lightcol=(1.0, 1.0, 0.8), lightamb=(0.25, 0.2, 0.3)) #======================================== # load shader shader = Shader("shaders/uv_reflect") flatsh = Shader("shaders/uv_flat") tree2img = Texture("textures/tree2.png") tree1img = Texture("textures/tree1.png") hb2img = Texture("textures/hornbeam2.png") bumpimg = Texture("textures/grasstile_n.jpg") reflimg = Texture("textures/stars.jpg") rockimg = Texture("textures/rock1.jpg")
import demo from pi3d import Display from pi3d.Keyboard import Keyboard from pi3d.Texture import Texture from pi3d.Shader import Shader from pi3d.Light import Light from pi3d.shape.Model import Model from pi3d.util.Screenshot import screenshot # Setup display and initialise pi3d DISPLAY = Display.create(x=100, y=100, background=(0.2, 0.4, 0.6, 1)) Light((1, 1, 1)) shader = Shader("shaders/mat_reflect") #======================================== # load bump and reflection textures bumptex = Texture("textures/floor_nm.jpg") shinetex = Texture("textures/stars.jpg") # load model_loadmodel mymodel = Model(file_string='models/teapot.egg', name='teapot', x=0, y=0, z=10) mymodel.set_shader(shader) # material is set in the file mymodel.set_normal_shine(bumptex, 4.0, shinetex, 0.2, is_uv = False) # Fetch key presses mykeys = Keyboard()
from pi3d.util.Ttffont import Ttffont from pi3d.util.Defocus import Defocus from pi3d.util.Screenshot import screenshot from pi3d.shape.MergeShape import MergeShape from pi3d.shape.Sphere import Sphere from pi3d.shape.Sprite import Sprite # Setup display and initialise pi3d DISPLAY = Display.create(x=10, y=10, w=900, h=600, frames_per_second=25) DISPLAY.set_background(0.4, 0.6, 0.8, 1.0) # r,g,b,alpha persp_cam = Camera.instance() # default instance camera perspecive view ortho_cam = Camera(is_3d=False) # 2d orthographic view camera #setup textures, light position and initial model position Light((0, 5, 0)) #create shaders shader = Shader("shaders/uv_reflect") flatsh = Shader("shaders/uv_flat") defocus = Defocus() #Create textures shapeimg = Texture("textures/straw1.jpg") shapebump = Texture("textures/floor_nm.jpg", True) shapeshine = Texture("textures/pong3.png") #Create shape myshape = MergeShape(camera=persp_cam) #specify perspective view asphere = Sphere(sides=16, slices=16) myshape.radialCopy(asphere, step=72) myshape.position(0.0, 0.0, 5.0)
myecube = EnvironmentCube(900.0,"CROSS") #monster radius = 1 ball = Sphere(radius,12,12,0.0,"sphere",-4,2,-7) # Create elevation map mapwidth=50.0 mapdepth=50.0 maphalf=23.0 mapheight=8 #set smooth to give proper normals mymap = ElevationMap("textures/Piom1b.jpg",mapwidth,mapdepth,mapheight,64,64,128,"sub",0,0,0, smooth=True) ################### increased tiles to 32 # lighting. The default light is a point light but I have made the position method capable of creating # a directional light and this is what I do inside the loop. If you want a torch you don't need to move it about light = Light(0, 2, 2, 1, "", 1,2,3, 0.1,0.1,0.2) #yellowish 'torch' or 'sun' with low level blueish ambient light.position(1,2,3,0) # set to directional light by settin position with 0 fourth parameter light.on() ########## need to create instances of these before using them in the loop! ################# camera = Matrix() #################### mykeys = Key() #################### mymouse = Mouse() #################### mymouse.start() #################### omx=mymouse.x #################### omy=mymouse.y #################### xm, zm = 0, 0 #################### avhgt = 2.0 #################### ym = -(mymap.calcHeight(xm,zm)+avhgt) ####################
(2,0,"edge"):[["W",0], ["CE", 3]], # white cell on the edge next to a black cell has a wall and ceiling edge (2,2,"edge"):[["CE", 3]], # white cell on the edge next to a white cell a ceiling edge (2,0):[["W", 0]], # white cell next to a black cell has a wall (1,0):[["W", 1], ["CE", 3]], # grey cell next to a black cell has a wall and ceiling edge (1,2):[["CE", 3]] } # grey cell next to a white cell has a ceiling edge # details is an array of the same size as models array (defined above as part of the dict {"#models":4,..} ) # contains information corresponding with Buffer.set_draw_details() details = [[shader, [blockimg, blockimg], 1.0, 0.0, 4.0, 12.0], [shader, [greenimg, greenimg], 1.0, 0.0, 4.0, 4.0], [shader, [roofimg, blockimg], 1.0, 0.0, 4.0, 4.0], [shader, [roofedgeimg], 0.0, 0.0, 4.0, 4.0]] building = Building("textures/silo_map.png", 0, 0, mymap, width=15.0, depth=15.0, height=70.0, name="", draw_details=details, yoff=-15, scheme=openSectionSchemeMultimodel) outLight = Light(lightpos=(10, -10, 20), lightcol =(1.0, 1.0, 0.7), lightamb=(0.35, 0.35, 0.4)) inLight = Light(lightpos=(10, -10, 20), lightcol =(0.1, 0.1, 0.15), lightamb=(0.05, 0.15, 0.1)) for b in building.model: b.set_light(inLight, 0) mymap.set_light(inLight, 0) inFlag = True #screenshot number scshots = 1 #avatar camera rot=0.0 tilt=0.0 avhgt = 5.0 aveyelevel = 4.0