Python - 3D mapping, without 3D engines -


does know how this? want able map texture 3d cube in python.

here's code far,

from pygame import gfxdraw import pygame, sys, math  def rotate2d(pos,rad): x,y=pos; s,c = math.sin(rad),math.cos(rad); return x*c-y*s,y*c+x*s  class cam:     def __init__(self,pos=(0,0,0),rot=(0,0)):         self.pos=list(pos)         self.rot=list(rot)     def events(self,event):         if event.type == pygame.mousemotion:             x,y = event.rel             x/=200;y/=200             self.rot[0]+=y; self.rot[1]+=x     def update(self,dt,key):         s=dt*10          if key[pygame.k_q]: self.pos[1]+=s         if key[pygame.k_e]: self.pos[1]-=s          x,y = s*math.sin(self.rot[1]),s*math.cos(self.rot[1])          if key[pygame.k_w]: self.pos[0]+=x;self.pos[2]+=y         if key[pygame.k_s]: self.pos[0]-=x;self.pos[2]-=y         if key[pygame.k_a]: self.pos[0]-=y;self.pos[2]+=x         if key[pygame.k_d]: self.pos[0]+=y;self.pos[2]-=x  class cube:     vertices = (-1,-1,-1),(1,-1,-1),(1,1,-1),(-1,1,-1),(-1,-1,1),(1,-1,1),(1,1,1),(-1,1,1)     edges = (0,1),(1,2),(2,3),(3,0),(4,5),(5,6),(6,7),(7,4),(0,4),(1,5),(2,6),(3,7)     faces = (0,1,2,3),(4,5,6,7),(0,1,5,4),(2,3,7,6),(0,3,7,4),(1,2,6,5)     colors = (255,0,0),(0,255,0),(0,0,255),(255,255,0),(255,0,255),(0,255,255)      def __init__(self,pos=(0,0,0)):         x,y,z = pos         self.verts = [(x+x/2,y+y/2,z+z/2) x,y,z in self.vertices]  pygame.init() w,h = 400,400; cx,cy = w//2,h//2; fov = min(w,h) screen = pygame.display.set_mode((w,h)) clock = pygame.time.clock() cam=cam((0,0,-5)) pygame.event.get(); pygame.mouse.get_rel() pygame.mouse.set_visible(0); pygame.event.set_grab(1);  i1 = pygame.image.load("untitled.png")  cubes = [cube((0,0,0)),cube((-2,0,0)),cube((2,0,0))]  while true:     dt = clock.tick()/1000      event = pygame.event.poll()     if event.type == pygame.quit: pygame.quit();sys.exit()     if event.type == pygame.keydown:         if event.key == pygame.k_escape: pygame.quit();sys.exit()     cam.events(event)     screen.fill((0,0,0))     face_list = []; face_color = []; depth = []      obj in cubes:          vert_list = []; screen_coords = []         x,y,z in obj.verts:             x-=cam.pos[0]             y-=cam.pos[1]             z-=cam.pos[2]             x,z = rotate2d((x,z),cam.rot[1])             y,z = rotate2d((y,z),cam.rot[0])             vert_list += [(x,y,z)]             f=fov/z             x,y = x*f,y*f             screen_coords+=[(cx+int(x),cy+int(y))]          f in range(len(obj.faces)):             face = obj.faces[f]              on_screen = false             in face:                 x,y = screen_coords[i]                 if vert_list[i][2]>0 , x>0 , x<w , y>0 , y<h: on_screen = true; break              if on_screen:                  coords = [screen_coords[i] in face]                 face_list += [coords]                 face_color += [obj.colors[f]]                  depth += [sum([sum(vert_list[j][i] j in face)**2 in range(3)])]     order = sorted(range(len(face_list)),key=lambda i: depth[i],reverse=1)      in order:         try:             x-=cam.pos[0]             y-=cam.pos[1]             z-=cam.pos[2]             x,z = rotate2d((x,z),cam.rot[1])             y,z = rotate2d((y,z),cam.rot[0])             vert_list += [(x,y,z)]             f=fov/z             x,y = x*f,y*f             #x2 = str(x)             #x2 = int(x2.split('.')[0])             #{             # here textured polygon part!!!!! vvvvvvvv             pygame.gfxdraw.textured_polygon(screen, face_list[i], i1, 0, 0) # !!!             #}         except:             pass      pygame.display.flip()      key=pygame.key.get_pressed()     cam.update(dt/10,key) 

so far i'm using gfxdraw.textured_polygon, however, that's meant 2d. looks masked , weird. i've tried using x,y values instead of 0,0 in offsetting part.

i followed tutorial this: https://www.youtube.com/watch?v=g4e9iq0bixa

any wanted.

if need else please ask.


Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

python 3.5 - Pyqtgraph string in x tick -