|
@ -0,0 +1,587 @@
|
|||
# 3ds Max Wavefront OBJ Exporter v0.94b - (c)2007 guruware
|
||||
# File Created: 12.09.2010 01:40:48
|
||||
|
||||
newmtl awning
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd awning.png
|
||||
|
||||
newmtl bark
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd bark.png
|
||||
|
||||
newmtl bridge
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd bridge.png
|
||||
|
||||
newmtl bush
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd bush.png
|
||||
|
||||
newmtl bushside
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd bushside.png
|
||||
|
||||
newmtl curtain
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd curtain.png
|
||||
|
||||
newmtl cut
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd cut.png
|
||||
|
||||
newmtl dead
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd dead.png
|
||||
|
||||
newmtl doodd
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd doodd.png
|
||||
|
||||
newmtl doodh
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd doodh.png
|
||||
|
||||
newmtl doods
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd doods.png
|
||||
|
||||
newmtl edge
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd edge.png
|
||||
|
||||
newmtl enter
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd enter.png
|
||||
|
||||
newmtl exit
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd exit.png
|
||||
|
||||
newmtl fade
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd fade.png
|
||||
|
||||
newmtl fence
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd fence.png
|
||||
|
||||
newmtl fencew
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd fencew.png
|
||||
|
||||
newmtl grass
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd grass.png
|
||||
|
||||
newmtl grassmix
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd grassmix.png
|
||||
|
||||
newmtl house
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd house.png
|
||||
|
||||
newmtl ladder
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd ladder.png
|
||||
|
||||
newmtl leaf
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd leaf.png
|
||||
|
||||
newmtl ledge
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd ledge.png
|
||||
|
||||
newmtl mido
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd mido.png
|
||||
|
||||
newmtl patch
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd patch.png
|
||||
|
||||
newmtl path
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd path.png
|
||||
|
||||
newmtl pathe
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd pathe.png
|
||||
|
||||
newmtl patht
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd patht.png
|
||||
|
||||
newmtl porch
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd porch.png
|
||||
|
||||
newmtl rail
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd rail.png
|
||||
|
||||
newmtl saria
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd saria.png
|
||||
|
||||
newmtl shop
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd shop.png
|
||||
|
||||
newmtl shroom
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd shroom.png
|
||||
|
||||
newmtl step
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd step.png
|
||||
|
||||
newmtl steptop
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd steptop.png
|
||||
|
||||
newmtl tower
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd tower.png
|
||||
|
||||
newmtl trees
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd trees.png
|
||||
|
||||
newmtl treetop
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd treetop.png
|
||||
|
||||
newmtl trunks
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd trunks.png
|
||||
|
||||
newmtl vine
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd vine.png
|
||||
|
||||
newmtl vineh
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd vineh.png
|
||||
|
||||
newmtl vinew
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd vinew.png
|
||||
|
||||
newmtl wall
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd wall.png
|
||||
|
||||
newmtl walls
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd walls.png
|
||||
|
||||
newmtl water
|
||||
Ns 10.0830
|
||||
Ni 1.5000
|
||||
d 1.0000
|
||||
Tr 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0000 0.0000 0.0000
|
||||
Kd 1.0000 1.0000 1.0000
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Kd water.png
|
After Width: | Height: | Size: 481 B |
After Width: | Height: | Size: 978 B |
After Width: | Height: | Size: 876 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 902 B |
After Width: | Height: | Size: 1018 B |
After Width: | Height: | Size: 543 B |
After Width: | Height: | Size: 233 B |
After Width: | Height: | Size: 158 B |
After Width: | Height: | Size: 467 B |
After Width: | Height: | Size: 674 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 145 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 922 B |
After Width: | Height: | Size: 815 B |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 744 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 358 B |
After Width: | Height: | Size: 420 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 779 B |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 579 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1017 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 889 B |
After Width: | Height: | Size: 305 B |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 632 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 965 B |
After Width: | Height: | Size: 737 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 462 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 481 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 975 B |
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,457 @@
|
|||
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
|
||||
# File Created: 31.05.2016 01:43:58
|
||||
|
||||
newmtl VMtl034
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.8477 0.8477 0.8477
|
||||
Kd 0.8477 0.8477 0.8477
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 3024F421_c.png
|
||||
map_Kd 3024F421_c.png
|
||||
|
||||
newmtl VMtl031
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.3633 0.3633 0.3633
|
||||
Kd 0.3633 0.3633 0.3633
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 64674252_c.png
|
||||
map_Kd 64674252_c.png
|
||||
|
||||
newmtl VMtl001
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.3984 0.3984 0.3984
|
||||
Kd 0.3984 0.3984 0.3984
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 196C0925_c.png
|
||||
map_Kd 196C0925_c.png
|
||||
|
||||
newmtl VMtl006
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.1992 0.1992 0.1992
|
||||
Kd 0.1992 0.1992 0.1992
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 37DD4E64_c.png
|
||||
map_Kd 37DD4E64_c.png
|
||||
|
||||
newmtl VMtl007
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.8945 0.8945 0.8945
|
||||
Kd 0.8945 0.8945 0.8945
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 39B4C203_c.png
|
||||
map_Kd 39B4C203_c.png
|
||||
|
||||
newmtl VMtl028
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.0977 0.0977 0.0977
|
||||
Kd 0.0977 0.0977 0.0977
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 2C312C37_c.png
|
||||
map_Kd 2C312C37_c.png
|
||||
|
||||
newmtl VMtl009
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.8945 0.8945 0.8945
|
||||
Kd 0.8945 0.8945 0.8945
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 2CCE0C4A_c.png
|
||||
map_Kd 2CCE0C4A_c.png
|
||||
|
||||
newmtl Material__126
|
||||
Ns 10.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.5880 0.5880 0.5880
|
||||
Kd 0.5880 0.5880 0.5880
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka black.png
|
||||
map_Kd black.png
|
||||
|
||||
newmtl VMtl016
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.2461 0.2461 0.2461
|
||||
Kd 0.2461 0.2461 0.2461
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 4B2B76B_c.png
|
||||
map_Kd 4B2B76B_c.png
|
||||
|
||||
newmtl VMtl018
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.3477 0.3477 0.3477
|
||||
Kd 0.3477 0.3477 0.3477
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 8AA76A5_c.png
|
||||
map_Kd 8AA76A5_c.png
|
||||
|
||||
newmtl VMtl024
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 3C72B2A_c.png
|
||||
map_Kd 3C72B2A_c.png
|
||||
|
||||
newmtl VMtl025
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 212D3C4E_c.png
|
||||
map_Kd 212D3C4E_c.png
|
||||
|
||||
newmtl VMtl029
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.4453 0.4453 0.4453
|
||||
Kd 0.4453 0.4453 0.4453
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 3FADD34B_c.png
|
||||
map_Kd 3FADD34B_c.png
|
||||
|
||||
newmtl VMtl092
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.2070 0.2070 0.2070
|
||||
Kd 0.2070 0.2070 0.2070
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 4C32C130_c.png
|
||||
map_Kd 4C32C130_c.png
|
||||
|
||||
newmtl VMtl079
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 636C5E89_c.png
|
||||
map_Kd 636C5E89_c.png
|
||||
|
||||
newmtl VMtl080
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 26D56437_c.png
|
||||
map_Kd 26D56437_c.png
|
||||
|
||||
newmtl VMtl083
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 7003A16E_c.png
|
||||
map_Kd 7003A16E_c.png
|
||||
|
||||
newmtl VMtl010
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.8945 0.8945 0.8945
|
||||
Kd 0.8945 0.8945 0.8945
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 7DBBF446_c.png
|
||||
map_Kd 7DBBF446_c.png
|
||||
|
||||
newmtl VMtl021
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 4E87E087_c.png
|
||||
map_Kd 4E87E087_c.png
|
||||
|
||||
newmtl VMtl101
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.2070 0.2070 0.2070
|
||||
Kd 0.2070 0.2070 0.2070
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 434C33B4_c.png
|
||||
map_Kd 434C33B4_c.png
|
||||
|
||||
newmtl VMtl100
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.2070 0.2070 0.2070
|
||||
Kd 0.2070 0.2070 0.2070
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 6E0371FC_c.png
|
||||
map_Kd 6E0371FC_c.png
|
||||
|
||||
newmtl VMtl102
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.2070 0.2070 0.2070
|
||||
Kd 0.2070 0.2070 0.2070
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 377F628B_c.png
|
||||
map_Kd 377F628B_c.png
|
||||
|
||||
newmtl VMtl103
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.2070 0.2070 0.2070
|
||||
Kd 0.2070 0.2070 0.2070
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 494BEA05_c.png
|
||||
map_Kd 494BEA05_c.png
|
||||
|
||||
newmtl VMtl033
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 7C539D9A_c.png
|
||||
map_Kd 7C539D9A_c.png
|
||||
|
||||
newmtl VMtl104
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.2070 0.2070 0.2070
|
||||
Kd 0.2070 0.2070 0.2070
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 481A1D93_c.png
|
||||
map_Kd 481A1D93_c.png
|
||||
|
||||
newmtl VMtl035
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 382B7295_c.png
|
||||
map_Kd 382B7295_c.png
|
||||
|
||||
newmtl VMtl036
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 4598980_c.png
|
||||
map_Kd 4598980_c.png
|
||||
|
||||
newmtl VMtl037
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 73181CBF_c.png
|
||||
map_Kd 73181CBF_c.png
|
||||
|
||||
newmtl VMtl038
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 3718093C_c.png
|
||||
map_Kd 3718093C_c.png
|
||||
|
||||
newmtl VMtl039
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 64FFE518_c.png
|
||||
map_Kd 64FFE518_c.png
|
||||
|
||||
newmtl VMtl040
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.9961 0.9961 0.9961
|
||||
Kd 0.9961 0.9961 0.9961
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 4FD46FF6_c.png
|
||||
map_Kd 4FD46FF6_c.png
|
||||
|
||||
newmtl VMtl088
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.2773 0.2773 0.2773
|
||||
Kd 0.2773 0.2773 0.2773
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 69F2958_c.png
|
||||
map_Kd 69F2958_c.png
|
||||
|
||||
newmtl VMtl090
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.3125 0.3125 0.3125
|
||||
Kd 0.3125 0.3125 0.3125
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 5F40F14E_c.png
|
||||
map_Kd 5F40F14E_c.png
|
||||
|
||||
newmtl VMtl091
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.2070 0.2070 0.2070
|
||||
Kd 0.2070 0.2070 0.2070
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 779FAD4E_c.png
|
||||
map_Kd 779FAD4E_c.png
|
||||
|
||||
newmtl VMtl032
|
||||
Ns 20.0000
|
||||
Ni 0.0250
|
||||
d 1.0000
|
||||
Tf 1.0000 1.0000 1.0000
|
||||
illum 2
|
||||
Ka 0.8477 0.8477 0.8477
|
||||
Kd 0.8477 0.8477 0.8477
|
||||
Ks 0.0000 0.0000 0.0000
|
||||
Ke 0.0000 0.0000 0.0000
|
||||
map_Ka 1E3F706A_c.png
|
||||
map_Kd 1E3F706A_c.png
|
After Width: | Height: | Size: 73 B |
|
@ -21,7 +21,7 @@ Kd 0.972549 0.972549 0.972549
|
|||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
d 0.000000
|
||||
illum 2
|
||||
map_Kd kuribo_eye.png
|
||||
map_Ka kuribo_eye.png
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 833 B After Width: | Height: | Size: 833 B |
|
@ -0,0 +1,28 @@
|
|||
# Blender MTL File: 'None'
|
||||
# Material Count: 2
|
||||
|
||||
newmtl kuribo_all
|
||||
Ns 96.078431
|
||||
Ka 0.501961 0.501961 0.501961
|
||||
Kd 0.972549 0.972549 0.972549
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
map_Kd kuribo_all.png
|
||||
map_Ka kuribo_all.png
|
||||
map_d kuribo_all.png
|
||||
|
||||
newmtl kuribo_eye
|
||||
Ns 96.078431
|
||||
Ka 0.501961 0.501961 0.501961
|
||||
Kd 0.972549 0.972549 0.972549
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 0.000000
|
||||
illum 2
|
||||
map_Kd kuribo_dead.png
|
||||
map_Ka kuribo_dead.png
|
||||
map_d kuribo_dead.png
|
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
|
@ -0,0 +1,15 @@
|
|||
# Blender MTL File: 'goomba_dead.blend'
|
||||
# Material Count: 1
|
||||
|
||||
newmtl kuribo_eye
|
||||
Ns 96.078431
|
||||
Ka 0.501961 0.501961 0.501961
|
||||
Kd 0.972549 0.972549 0.972549
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
map_Kd kuribo_eye.png
|
||||
map_Ka kuribo_eye.png
|
||||
map_d kuribo_eye.png
|
After Width: | Height: | Size: 833 B |
470
src/RUN.py
|
@ -7,34 +7,44 @@ import avatars
|
|||
import maps
|
||||
import building
|
||||
import objects
|
||||
import inputs
|
||||
import os
|
||||
|
||||
#import sys
|
||||
from serial_data import Serial_data
|
||||
#from serial_data import Serial_data
|
||||
#sys.path.insert(0, "../python-vrzero")
|
||||
from vrzero import engine
|
||||
|
||||
###### Select the mode here
|
||||
USE_SERIAL = False # try the app without a serial connection, keyboard still work
|
||||
|
||||
################ Select the mode here ###########
|
||||
USE_SERIAL = True # try the app without a serial connection, keyboard still work
|
||||
USE_STEREO = False # Mode Stereoscopic
|
||||
USE_TUNNEL = True # If mode stereo is on, use Tunnel effect
|
||||
|
||||
############ Use a more simple sensor movement like on the Wii remote ########
|
||||
SIMPLE_MOVE = True
|
||||
|
||||
################ Select your map : moon or forest ##########
|
||||
MAP = 'temple'
|
||||
|
||||
################ Select your Avatars here (you can manualy add more) #########
|
||||
AVATAR_1 = 'Link'
|
||||
AVATAR_2 = 'Goomba'
|
||||
AVATAR_3 = 'Goku'
|
||||
|
||||
################ Show stat on terminal #############
|
||||
SHOW_STAT = False # Show FPS stat (Calibrated for Raspberry Pi)
|
||||
|
||||
# Change screen size to adapt your config
|
||||
DEFAULT_SCREEN_WIDTH=1200
|
||||
DEFAULT_SCREEN_HEIGHT=600
|
||||
################ Change screen size to adapt your config ################
|
||||
DEFAULT_SCREEN_WIDTH=600 # 0 for full screen
|
||||
DEFAULT_SCREEN_HEIGHT=400 # 0 for full screen
|
||||
DEFAULT_EYE_SEPERATION=0.65
|
||||
|
||||
# height of the camera
|
||||
DEFAULT_AVATAR_EYE_HEIGHT = 4.0
|
||||
DEFAULT_AVATAR_MOVEMENT_SPEED = 0.6
|
||||
|
||||
# Select your map moon or forest
|
||||
MAP = 'forest'
|
||||
|
||||
# Select your Avatars here (you can manualy add more)
|
||||
AVATAR_1 = 'Link'
|
||||
AVATAR_2 = 'Goku'
|
||||
DEFAULT_AVATAR_MOVEMENT_SPEED = 1.2
|
||||
|
||||
#os.system('xset r off')
|
||||
os.putenv('SDL_FBDEV', '/dev/fb0')
|
||||
os.putenv('SDL_VIDEODRIVER', 'fbcon')
|
||||
|
||||
|
@ -48,13 +58,21 @@ if(USE_STEREO):
|
|||
shader_name = "barrel" if USE_TUNNEL else "uv_flat"
|
||||
CAMERA = pi3d.StereoCam(separation=DEFAULT_EYE_SEPERATION, interlace=0, shader=shader_name)
|
||||
else:
|
||||
CAMERA = pi3d.Camera(absolute=False)
|
||||
CAMERA = pi3d.Camera(absolute=True)
|
||||
|
||||
# initialize inputs
|
||||
handler = inputs.handlers()
|
||||
|
||||
# Implement Threading to read Serial
|
||||
if(USE_SERIAL):
|
||||
handler.serial()
|
||||
#========================================
|
||||
|
||||
# Create Hero & map, Select your avatars here
|
||||
if AVATAR_1 == 'Link':
|
||||
avatar = avatars.link()
|
||||
avatarstereo = avatars.linkstereo()
|
||||
avatar1_3 = avatars.goombaD()
|
||||
elif AVATAR_1 == 'Cloud':
|
||||
avatar = avatars.cloud()
|
||||
elif AVATAR_1 == 'Lego':
|
||||
|
@ -76,266 +94,238 @@ elif AVATAR_2 == 'Roshi':
|
|||
avatar2 = avatars.roshi()
|
||||
elif AVATAR_2 == 'Goku':
|
||||
avatar2 = avatars.goku()
|
||||
avatar2_3 = avatars.goombaD()
|
||||
elif AVATAR_2 == 'Goomba':
|
||||
avatar2 = avatars.goomba()
|
||||
avatar2_3 = avatars.goombaD()
|
||||
|
||||
if AVATAR_3 == 'Link':
|
||||
avatar3 = avatars.link()
|
||||
elif AVATAR_3 == 'Goomba':
|
||||
avatar3 = avatars.goomba()
|
||||
avatar3_3 = avatars.goombaD()
|
||||
elif AVATAR_3 == 'Goku':
|
||||
avatar3 = avatars.goku()
|
||||
avatar3_3 = avatars.goombaD()
|
||||
|
||||
if MAP == 'forest':
|
||||
map1 = maps.forest()
|
||||
elif MAP == 'moon':
|
||||
map1 = maps.moon()
|
||||
|
||||
elif MAP == 'temple':
|
||||
map1 = maps.templeoftime()
|
||||
bulle = objects.object()
|
||||
|
||||
#avatar
|
||||
#step = [0.0, 0.0, 0.0]
|
||||
xm = 0.0
|
||||
zm = 0.0
|
||||
ym = map1.mymap.calcHeight(xm, zm) + 9 + DEFAULT_AVATAR_EYE_HEIGHT
|
||||
xc = 0.0
|
||||
yc = 0.0
|
||||
zc = 0.0
|
||||
|
||||
# variables
|
||||
synchro_serial=0
|
||||
camera_distance = -20
|
||||
keep_running = True
|
||||
|
||||
# camera position
|
||||
rot = 0.0
|
||||
tilt = -0.0
|
||||
norm = None
|
||||
crab = False
|
||||
roll = 0.0
|
||||
|
||||
stereo_rot = 0.0
|
||||
stereo_tilt = 0.0
|
||||
stereo_roll = 0.0
|
||||
|
||||
# variables
|
||||
synchro_serial=0
|
||||
movement = 0
|
||||
mv_tmp = 0
|
||||
mv_run = 0
|
||||
mv_run_diff = 0
|
||||
avatar_speed = DEFAULT_AVATAR_MOVEMENT_SPEED
|
||||
orientation = 0
|
||||
camera_distance = -20
|
||||
|
||||
# Fetch key presses
|
||||
mykeys = pi3d.Keyboard()
|
||||
mymouse = pi3d.Mouse(restrict = False)
|
||||
mymouse.start()
|
||||
|
||||
pos_armR = [0, 0, 0]
|
||||
pos_forarmR = [0, 0, 0]
|
||||
pos_armL = [0, 0, 0]
|
||||
pos_forarmL = [0, 0, 0]
|
||||
body_orientation = 0
|
||||
flag_jump = 0
|
||||
flag_view = True
|
||||
jump_height = 28
|
||||
timer =0
|
||||
keep_running = True
|
||||
|
||||
|
||||
def roger_handler(sensor, Euler0, Euler1, Euler2):
|
||||
global pos_armR, pos_forarmR, pos_armL, pos_forarmL, timer, body_orientation, mv_run, mv_run_diff, xm, zm
|
||||
timer += 1
|
||||
print("Sensor:", sensor)
|
||||
if timer == 13:
|
||||
timer = 0
|
||||
if sensor == 'A':
|
||||
avatar.armL.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.armL.rotateToX(math.degrees(-Euler2))
|
||||
avatar.armL.rotateToY(math.degrees(-Euler0))
|
||||
#pos_armL = [Euler0, Euler1, Euler2]
|
||||
#print("Bras : E0 = ", math.degrees(Euler0), " E1 = ", math.degrees(Euler1), " E2 = ", math.degrees(Euler2))
|
||||
|
||||
elif sensor == 'C':
|
||||
avatar.armR.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.armR.rotateToX(math.degrees(-Euler2))
|
||||
avatar.armR.rotateToY(math.degrees(-Euler0))
|
||||
#pos_forarmR = [-Euler0 - pos_armL[0], -Euler0 - pos_armL[1], -Euler0 - pos_armL[2]]
|
||||
|
||||
elif sensor == 'D':
|
||||
avatar.head.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.head.rotateToX(math.degrees(-Euler2))
|
||||
avatar.head.rotateToY(math.degrees(-Euler0))
|
||||
|
||||
#if timer == 1:
|
||||
# print(" Avant : E0 = ", math.degrees(Euler0), " E1 = ", math.degrees(Euler1), " E2 = ", math.degrees(Euler2))
|
||||
elif sensor == 'J':
|
||||
#print("JOY {:03.2f} {:03.2f}".format(Euler0, Euler1))
|
||||
if Euler0 <= 128 and Euler1 <= 128:
|
||||
body_orientation = 270 - Euler1 #
|
||||
elif Euler0 >= 128 and Euler1 <= 128:
|
||||
body_orientation = 90 + Euler1
|
||||
elif Euler0 >= 128 and Euler1 >= 128:
|
||||
body_orientation = -157 + Euler1
|
||||
elif Euler0 <= 128 and Euler1 >= 128:
|
||||
body_orientation = 360 - Euler0
|
||||
|
||||
#print(body_orientation)
|
||||
|
||||
if Euler0 >= 128:
|
||||
Euler0 -= 255
|
||||
if Euler1 >= 128:
|
||||
Euler1 -= 255
|
||||
joystick_v_axis_pos = Euler0/128
|
||||
joystick_h_axis_pos = Euler1/128
|
||||
|
||||
#camera_tilt, camera_orientation= CAMERA.point_at()
|
||||
#print("ORIENTATION : ", camera_orientation)
|
||||
|
||||
camera_orientation = 0
|
||||
|
||||
if math.fabs(joystick_v_axis_pos) > 0.1:
|
||||
xm -= math.sin(math.pi/2+camera_orientation*20)*-joystick_v_axis_pos*avatar_speed
|
||||
zm += math.cos(-math.pi/2+camera_orientation*20)*-joystick_v_axis_pos*avatar_speed
|
||||
mv_run += math.fabs(joystick_v_axis_pos*avatar_speed*2/3)
|
||||
|
||||
if math.fabs(joystick_h_axis_pos) > 0.1:
|
||||
xm -= math.cos(math.pi/2+(-camera_orientation*20))*-joystick_h_axis_pos*avatar_speed
|
||||
zm += math.sin(-math.pi/2+(-camera_orientation*20))*-joystick_h_axis_pos*avatar_speed
|
||||
mv_run += math.fabs(joystick_h_axis_pos*avatar_speed*2/3)
|
||||
mv_run_diff = math.fabs(joystick_v_axis_pos*avatar_speed*2/3) + math.fabs(joystick_h_axis_pos*avatar_speed*2/3)
|
||||
|
||||
#print(xm, ym, zm, "Euler : ",joystick_v_axis_pos, joystick_h_axis_pos )
|
||||
|
||||
else:
|
||||
print("unhandled sensor:", sensor)
|
||||
|
||||
|
||||
# Implement Threading to read Serial
|
||||
if(USE_SERIAL):
|
||||
ser = Serial_data('ABCDEFJ', roger_handler)
|
||||
ser.start()
|
||||
|
||||
# Other Avatar
|
||||
xm_av2 = 0.0
|
||||
zm_av2 = 80.0
|
||||
xm_av3 = 0.0
|
||||
zm_av3 = 100.0
|
||||
flag_choc_av = 0
|
||||
flag_choc_av2 = 0
|
||||
flag_choc_av3 = 0
|
||||
mv_avatar2 = 0.0
|
||||
mv_avatar2_diff = 0.0
|
||||
mv_avatar3 = 0.0
|
||||
mv_avatar3_diff = 0.0
|
||||
life_av = 5
|
||||
life_av2 = 2
|
||||
life_av3 = 2
|
||||
#============================================================================================================
|
||||
|
||||
def update_position():
|
||||
global xm, ym, zm, xc, yc, zc
|
||||
global xm_av2, zm_av2, xm_av3, zm_av3
|
||||
#print( xm, zm, map1.height(xm, zm))
|
||||
jump, cut = handler.actionRead()
|
||||
xm, zm, body_orientation, mv, mv_diff, flag_view = handler.position()
|
||||
if flag_view:
|
||||
avatar.center.position(xm, map1.height(xm, zm) + 2*math.sin(jump/8), zm)
|
||||
avatar.center.rotateToY(body_orientation)
|
||||
else:
|
||||
avatarstereo.center.position(xm, map1.height(xm, zm) + 2*math.sin(jump/8), zm)
|
||||
avatarstereo.center.rotateToY(body_orientation)
|
||||
|
||||
ym = map1.mymap.calcHeight(xm, zm)
|
||||
avatar2.center.position(xm_av2, map1.height(xm_av2, zm_av2), zm_av2)
|
||||
avatar2_3.center.position(xm_av2, map1.height(xm_av2, zm_av2), zm_av2)
|
||||
|
||||
avatar.center.position(xm, ym, zm)
|
||||
avatar2.center.position(-10, map1.mymap.calcHeight(-10, 15), 15)
|
||||
#avatar2.center.position(-5, map1.mymap.calcHeight(-5, 5), 5)
|
||||
bulle.myplane.position(-10, map1.mymap.calcHeight(-10, 15)+11, 15.2)
|
||||
avatar3.center.position(xm_av3, map1.height(xm_av3, zm_av3), zm_av3)
|
||||
avatar3_3.center.position(xm_av3, map1.height(xm_av3, zm_av3), zm_av3)
|
||||
|
||||
bulle.myplane.position(xm, map1.height(xm, zm)+12, zm)
|
||||
map1.update_pos(xm, zm)
|
||||
|
||||
map1.myecube.position(xm, ym, zm)
|
||||
|
||||
def update_avatar():
|
||||
global xm, ym, zm, mv_run, mv_run_diff, body_orientation, synchro_serial, flag_jump
|
||||
global xm_av2, zm_av2, xm_av3, zm_av3, synchro_serial, mv_avatar2, mv_avatar3, flag_choc_av, flag_choc_av2, flag_choc_av3, life_av, life_av2, life_av3
|
||||
|
||||
xm, zm, body_orientation, mv_run, mv_run_diff, flag_view = handler.position()
|
||||
jump, cut = handler.action_update()
|
||||
# if we are moving
|
||||
if(mv_run_diff > 0):
|
||||
if mv_run_diff:
|
||||
avatar.run(mv_run, mv_run_diff)
|
||||
|
||||
# if we are jumping
|
||||
#if(flag_jump > 0):
|
||||
# avatar.jump(flag_jump, xm, ym, zm, body_orientation)
|
||||
# avatar.jump(flag_jump, xm, zm, body_orientation)
|
||||
# flag_jump -=1
|
||||
synchro_serial=10
|
||||
|
||||
if cut >= 1:
|
||||
avatar.cut(cut)
|
||||
avatarstereo.cut(cut)
|
||||
|
||||
if jump:
|
||||
pass#jump -= 1
|
||||
|
||||
# if we are standing
|
||||
if(synchro_serial == 1):
|
||||
avatar.stand()
|
||||
|
||||
#avatar.pose()
|
||||
|
||||
avatar.center.rotateToY(body_orientation)
|
||||
|
||||
if (synchro_serial > 0):
|
||||
synchro_serial -=1
|
||||
mv_run_diff=0
|
||||
|
||||
def update_scenario():
|
||||
global xm, ym, zm
|
||||
#print(xm, ym, zm)
|
||||
if -15 <= xm and xm <= -5 and 10 <= zm and zm <= 19:
|
||||
if -13 <= xm and xm <= -10:
|
||||
xm = -13
|
||||
elif -10 <= xm and xm <= -7:
|
||||
xm = -7
|
||||
if 13 <= zm and zm <= 14.5:
|
||||
zm = 13
|
||||
elif 14.5 <= zm and zm <= 16:
|
||||
zm = 16
|
||||
bulle.myplane.draw()
|
||||
if life_av2 > 0:
|
||||
mv_avatar2 += 0.04
|
||||
xm_av2_tmp = xm_av2 - (0.4*math.sin(mv_avatar2))
|
||||
xm_av2 = xm_av2_tmp
|
||||
#print(xm_av2)
|
||||
avatar2.run(mv_avatar2*3, 1)
|
||||
#avatar2_2.run(mv_avatar2)
|
||||
if math.cos(mv_avatar2) <= math.cos(mv_avatar2 - 0.02):
|
||||
avatar2.center.rotateToY(90)
|
||||
#avatar2_2.center.rotateToY(90)
|
||||
else:
|
||||
avatar2.center.rotateToY(270)
|
||||
#avatar2_2.center.rotateToY(270)
|
||||
if life_av3 > 0:
|
||||
mv_avatar3 += 0.04
|
||||
zm_av3_tmp = zm_av3 - (0.4*math.sin(mv_avatar3))
|
||||
zm_av3 = zm_av3_tmp
|
||||
#print(xm_av2)
|
||||
avatar3.run(mv_avatar3, 1)
|
||||
if math.cos(mv_avatar3) <= math.cos(mv_avatar3 - 0.02):
|
||||
avatar3.center.rotateToY(0)
|
||||
else:
|
||||
avatar3.center.rotateToY(180)
|
||||
|
||||
#print(xm, zm, xm_av2, zm_av2)
|
||||
if flag_choc_av:
|
||||
flag_choc_av -= 1
|
||||
if flag_choc_av2:
|
||||
flag_choc_av2 -= 1
|
||||
if flag_choc_av3:
|
||||
flag_choc_av3 -= 1
|
||||
distance_choc_av = 5
|
||||
distance_choc_av2 = 2
|
||||
distance_choc_av3 = 2
|
||||
|
||||
if xm_av2 - distance_choc_av <= xm and xm <= xm_av2 + distance_choc_av and zm_av2 - distance_choc_av <= zm and zm <= zm_av2 + distance_choc_av:
|
||||
#bulle.myplane.draw()
|
||||
|
||||
if cut and not flag_choc_av2 and life_av2 > 0:
|
||||
life_av2 -= 1
|
||||
flag_choc_av2 = 19
|
||||
|
||||
if xm_av2 - distance_choc_av2 <= xm and xm <= xm_av2 + distance_choc_av2 and zm_av2 - distance_choc_av2 <= zm and zm <= zm_av2 + distance_choc_av2:
|
||||
life_av -= 1
|
||||
flag_choc_av = 19
|
||||
if xm_av2 - distance_choc_av2 <= xm and xm <= xm_av2:
|
||||
handler.position_upd(-5,0)
|
||||
elif xm_av2 <= xm and xm <= xm_av2 + distance_choc_av2:
|
||||
handler.position_upd(5,0)
|
||||
if zm_av2 - distance_choc_av2 <= zm and zm <= zm_av2:
|
||||
handler.position_upd(0,-5)
|
||||
elif zm_av2 <= zm and zm <= zm_av2 + distance_choc_av2:
|
||||
handler.position_upd(0,5)
|
||||
|
||||
if xm_av3 - distance_choc_av <= xm and xm <= xm_av3 + distance_choc_av and zm_av3 - distance_choc_av <= zm and zm <= zm_av3 + distance_choc_av:
|
||||
#bulle.myplane.draw()
|
||||
|
||||
if cut and not flag_choc_av3 and life_av3 > 0:
|
||||
life_av3 -= 1
|
||||
flag_choc_av3 = 19
|
||||
|
||||
if xm_av3 - distance_choc_av3 <= xm and xm <= xm_av3 + distance_choc_av3 and zm_av3 - distance_choc_av3 <= zm and zm <= zm_av3 + distance_choc_av3:
|
||||
life_av -= 1
|
||||
flag_choc_av = 19
|
||||
|
||||
if xm_av3 - distance_choc_av3 <= xm and xm <= xm_av3:
|
||||
handler.position_upd(-5,0)
|
||||
elif xm_av3 <= xm and xm <= xm_av3 + distance_choc_av3:
|
||||
handler.position_upd(5,0)
|
||||
if zm_av3 - distance_choc_av3 <= zm and zm <= zm_av3:
|
||||
handler.position_upd(0,-5)
|
||||
elif zm_av3 <= zm and zm <= zm_av3 + distance_choc_av3:
|
||||
handler.position_upd(0,5)
|
||||
#print(life_av2+life_av3)
|
||||
|
||||
def draw():
|
||||
#global body_rotation
|
||||
#avatar.center.rotateToY(180)
|
||||
#avatar.center.position(-5, 74.5, 1)
|
||||
#global mv_tmp
|
||||
#mv_tmp += 0.2
|
||||
#avatar.pose()
|
||||
#avatar2.pose()
|
||||
avatar2.center.draw()
|
||||
avatar.center.draw()
|
||||
map1.building()
|
||||
map1.mymap.draw()
|
||||
map1.myecube.draw()
|
||||
|
||||
global flag_choc_av, life_av,flag_choc_av2, life_av2,flag_choc_av3, life_av3
|
||||
#print(life_av)
|
||||
flag_view = handler.view()
|
||||
|
||||
def read_inputs():
|
||||
global mymouse, my, mx, rot, tilt, keep_running, xm, zm, mv_run, mv_run_diff, body_orientation, flag_jump, flag_view
|
||||
if life_av > 0:
|
||||
if not (flag_choc_av % 2):
|
||||
if flag_view:
|
||||
avatar.center.draw()
|
||||
else:
|
||||
pass
|
||||
avatarstereo.center.draw()
|
||||
else:
|
||||
pass
|
||||
#avatar1_3.center.draw()
|
||||
|
||||
k = mykeys.read() # Read Keyboard inputs
|
||||
|
||||
if k >-1:
|
||||
if k == 119: #key w forward
|
||||
zm+=1
|
||||
mv_run += math.fabs(avatar_speed*2/3)
|
||||
mv_run_diff = 1
|
||||
body_orientation = 180
|
||||
elif k == 115: #kry s back
|
||||
zm+= -1
|
||||
mv_run += math.fabs(avatar_speed*2/3)
|
||||
mv_run_diff = 1
|
||||
body_orientation = 0
|
||||
elif k == 97: #key a left
|
||||
xm+= -1
|
||||
mv_run += math.fabs(avatar_speed*2/3)
|
||||
mv_run_diff = 1
|
||||
body_orientation = 90
|
||||
elif k == 100: #key d right
|
||||
xm+=1
|
||||
mv_run += math.fabs(avatar_speed*2/3)
|
||||
mv_run_diff = 1
|
||||
body_orientation = 270
|
||||
elif k == 99: #key c jump
|
||||
flag_jump = 28
|
||||
elif k == 111: #key c jump
|
||||
view = flag_view
|
||||
flag_view = not view
|
||||
elif k == 112: #key p picture
|
||||
pi3d.screenshot("forestWalk" + str(scshots) + ".jpg")
|
||||
scshots += 1
|
||||
elif k == 10: #key RETURN
|
||||
mc = 0
|
||||
elif k == 27: #Escape key to exit
|
||||
print("***** EXIT *****")
|
||||
DISPLAY.destroy()
|
||||
keep_running = False
|
||||
mykeys.close()
|
||||
if USE_SERIAL:
|
||||
ser.stop()
|
||||
mymouse.stop()
|
||||
DISPLAY.stop()
|
||||
if life_av2 > 0:
|
||||
if not (flag_choc_av2 % 2):
|
||||
avatar2.center.draw()
|
||||
else:
|
||||
avatar2_3.center.draw()
|
||||
|
||||
elif k == ord('f'):
|
||||
roll = 1.0
|
||||
if life_av3 > 0:
|
||||
if not (flag_choc_av3 % 2):
|
||||
avatar3.center.draw()
|
||||
else:
|
||||
avatar3_3.center.draw()
|
||||
|
||||
mx, my = mymouse.velocity() #change to position() if Camera switched to absolute=True (default)
|
||||
buttons = mymouse.button_status()
|
||||
if not (life_av2+life_av3):
|
||||
bulle.myplane.draw()
|
||||
|
||||
map1.draw()
|
||||
|
||||
rot = - mx * 0.8
|
||||
tilt = my * 0.8
|
||||
|
||||
def camera_update():
|
||||
global xm, ym, zm, xc, yc, zc, rot, tilt, norm, flag_view, stereo_rot, stereo_tilt, stereo_roll
|
||||
global stereo_rot, stereo_tilt, stereo_roll
|
||||
|
||||
rot, tilt = handler.rotation()
|
||||
xm, zm, body_orientation, mv, mv_diff, flag_view = handler.position()
|
||||
roll = 0
|
||||
|
||||
if(USE_STEREO):
|
||||
stereo_rot += rot
|
||||
stereo_tilt += tilt
|
||||
stereo_roll += roll
|
||||
CAMERA.move_camera([xm, map1.mymap.calcHeight(xm, zm)+5, zm], stereo_rot, stereo_tilt, - stereo_roll)
|
||||
#print(rot, stereo_rot, tilt, stereo_tilt)
|
||||
#print(body_orientation)
|
||||
#print(flag_view)
|
||||
if flag_view:
|
||||
tilt = 8
|
||||
CAMERA.move_camera([xm, map1.height(xm, zm)+12, zm+camera_distance], rot+stereo_rot, -tilt-stereo_tilt, -stereo_roll)
|
||||
|
||||
else:
|
||||
rot = -body_orientation+180
|
||||
CAMERA.move_camera([xm, map1.height(xm, zm)+5, zm], rot + stereo_rot, -tilt - stereo_tilt, - stereo_roll)
|
||||
|
||||
stereo_rot = rot
|
||||
stereo_tilt = tilt
|
||||
stereo_roll = roll
|
||||
|
||||
for i in range(2):
|
||||
CAMERA.start_capture(i)
|
||||
|
@ -346,26 +336,38 @@ def camera_update():
|
|||
else:
|
||||
if flag_view:
|
||||
camRad = [camera_distance, camera_distance, camera_distance]
|
||||
#rot = -body_orientation+180
|
||||
|
||||
else:
|
||||
camRad = [0, 0, 0]
|
||||
|
||||
#CAMERA.relocate(rot, tilt, point=[-5, 84.5, -0], distance=camRad)
|
||||
xc, yc, zc = CAMERA.relocate(rot, tilt, point=[xm, map1.mymap.calcHeight(xm, zm)+5, zm], distance=camRad)
|
||||
rot = -body_orientation+180
|
||||
#tilt = 15
|
||||
CAMERA.relocate(rot, -tilt, point=[xm, map1.height(xm, zm)+5, zm], distance=camRad)
|
||||
draw()
|
||||
print( xm, ym, zm, " ---- ", xc, yc, zc)
|
||||
|
||||
#if rot:
|
||||
#print(rot, body_orientation, body_orientation_diff)
|
||||
#CAMERA.relocate(rot, tilt, point=[-5, 84.5, -0], distance=camRad)
|
||||
#tt, rrot = CAMERA.point_at()
|
||||
#tt, rrot, rr = CAMERA.get_direction()
|
||||
#print(tt, body_orientation)
|
||||
#rot = 0
|
||||
#body_orientation_diff = body_orientation
|
||||
#CAMERA.rotateZ(roll)
|
||||
|
||||
|
||||
# Main loop
|
||||
while DISPLAY.loop_running() or keep_running:
|
||||
read_inputs()
|
||||
while DISPLAY.loop_running() and keep_running:
|
||||
handler.mykeys.do_input_events()
|
||||
keep_running = handler.read_exit()
|
||||
if not keep_running:
|
||||
DISPLAY.destroy()
|
||||
DISPLAY.stop()
|
||||
update_position()
|
||||
update_avatar()
|
||||
update_scenario()
|
||||
camera_update()
|
||||
#engine.stats()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,368 @@
|
|||
#!/usr/bin/python
|
||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||
|
||||
import math,random
|
||||
import pi3d
|
||||
import avatars
|
||||
import maps
|
||||
import building
|
||||
import objects
|
||||
import os
|
||||
#import sys
|
||||
from serial_data import Serial_data
|
||||
#sys.path.insert(0, "../python-vrzero")
|
||||
from vrzero import engine
|
||||
|
||||
###### Select the mode here
|
||||
USE_SERIAL = False # try the app without a serial connection, keyboard still work
|
||||
USE_STEREO = False # Mode Stereoscopic
|
||||
USE_TUNNEL = True # If mode stereo is on, use Tunnel effect
|
||||
SHOW_STAT = False # Show FPS stat (Calibrated for Raspberry Pi)
|
||||
|
||||
# Change screen size to adapt your config
|
||||
DEFAULT_SCREEN_WIDTH=1200
|
||||
DEFAULT_SCREEN_HEIGHT=600
|
||||
DEFAULT_EYE_SEPERATION=0.65
|
||||
|
||||
# height of the camera
|
||||
DEFAULT_AVATAR_EYE_HEIGHT = 4.0
|
||||
DEFAULT_AVATAR_MOVEMENT_SPEED = 0.6
|
||||
|
||||
# Select your map moon or forest
|
||||
MAP = 'forest'
|
||||
|
||||
# Select your Avatars here (you can manualy add more)
|
||||
AVATAR_1 = 'Link'
|
||||
AVATAR_2 = 'Goku'
|
||||
|
||||
os.putenv('SDL_FBDEV', '/dev/fb0')
|
||||
os.putenv('SDL_VIDEODRIVER', 'fbcon')
|
||||
|
||||
DISPLAY = pi3d.Display.create(w=DEFAULT_SCREEN_WIDTH, h=DEFAULT_SCREEN_HEIGHT, use_pygame=True)
|
||||
DISPLAY.set_background(0.0,0.0,0.0,1)
|
||||
DISPLAY.frames_per_second = 30
|
||||
pi3d.Light(lightpos=(1, -1, -3), lightcol=(1.0, 1.0, 0.8), lightamb=(0.25, 0.2, 0.3))
|
||||
|
||||
# Initialize Camera
|
||||
if(USE_STEREO):
|
||||
shader_name = "barrel" if USE_TUNNEL else "uv_flat"
|
||||
CAMERA = pi3d.StereoCam(separation=DEFAULT_EYE_SEPERATION, interlace=0, shader=shader_name)
|
||||
else:
|
||||
CAMERA = pi3d.Camera(absolute=False)
|
||||
|
||||
#========================================
|
||||
|
||||
# Create Hero & map, Select your avatars here
|
||||
if AVATAR_1 == 'Link':
|
||||
avatar = avatars.link()
|
||||
elif AVATAR_1 == 'Cloud':
|
||||
avatar = avatars.cloud()
|
||||
elif AVATAR_1 == 'Lego':
|
||||
avatar = avatars.lego()
|
||||
elif AVATAR_1 == 'Roshi':
|
||||
avatar = avatars.roshi()
|
||||
elif AVATAR_1 == 'Goku':
|
||||
avatar = avatars.goku()
|
||||
elif AVATAR_1 == 'Goomba':
|
||||
avatar = avatars.goomba()
|
||||
|
||||
if AVATAR_2 == 'Link':
|
||||
avatar2 = avatars.link()
|
||||
elif AVATAR_2 == 'Cloud':
|
||||
avatar2 = avatars.cloud()
|
||||
elif AVATAR_2 == 'Lego':
|
||||
avatar2 = avatars.lego()
|
||||
elif AVATAR_2 == 'Roshi':
|
||||
avatar2 = avatars.roshi()
|
||||
elif AVATAR_2 == 'Goku':
|
||||
avatar2 = avatars.goku()
|
||||
|
||||
if MAP == 'forest':
|
||||
map1 = maps.forest()
|
||||
elif MAP == 'moon':
|
||||
map1 = maps.moon()
|
||||
|
||||
bulle = objects.object()
|
||||
|
||||
#avatar
|
||||
#step = [0.0, 0.0, 0.0]
|
||||
xm = 0.0
|
||||
zm = 0.0
|
||||
ym = map1.mymap.calcHeight(xm, zm) + 9 + DEFAULT_AVATAR_EYE_HEIGHT
|
||||
xc = 0.0
|
||||
yc = 0.0
|
||||
zc = 0.0
|
||||
|
||||
|
||||
# camera position
|
||||
rot = 0.0
|
||||
tilt = -0.0
|
||||
norm = None
|
||||
crab = False
|
||||
roll = 0.0
|
||||
|
||||
stereo_rot = 0.0
|
||||
stereo_tilt = 0.0
|
||||
stereo_roll = 0.0
|
||||
|
||||
# variables
|
||||
synchro_serial=0
|
||||
movement = 0
|
||||
mv_tmp = 0
|
||||
mv_run = 0
|
||||
mv_run_diff = 0
|
||||
avatar_speed = DEFAULT_AVATAR_MOVEMENT_SPEED
|
||||
orientation = 0
|
||||
camera_distance = -20
|
||||
|
||||
# Fetch key presses
|
||||
mykeys = pi3d.Keyboard()
|
||||
mymouse = pi3d.Mouse(restrict = False)
|
||||
mymouse.start()
|
||||
|
||||
pos_armR = [0, 0, 0]
|
||||
pos_forarmR = [0, 0, 0]
|
||||
pos_armL = [0, 0, 0]
|
||||
pos_forarmL = [0, 0, 0]
|
||||
body_orientation = 0
|
||||
flag_jump = 0
|
||||
flag_view = True
|
||||
jump_height = 28
|
||||
timer =0
|
||||
keep_running = True
|
||||
|
||||
|
||||
def roger_handler(sensor, Euler0, Euler1, Euler2):
|
||||
global pos_armR, pos_forarmR, pos_armL, pos_forarmL, timer, body_orientation, mv_run, mv_run_diff, xm, zm
|
||||
timer += 1
|
||||
print("Sensor:", sensor)
|
||||
if timer == 13:
|
||||
timer = 0
|
||||
if sensor == 'A':
|
||||
avatar.armL.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.armL.rotateToX(math.degrees(-Euler2))
|
||||
avatar.armL.rotateToY(math.degrees(-Euler0))
|
||||
#pos_armL = [Euler0, Euler1, Euler2]
|
||||
#print("Bras : E0 = ", math.degrees(Euler0), " E1 = ", math.degrees(Euler1), " E2 = ", math.degrees(Euler2))
|
||||
|
||||
elif sensor == 'C':
|
||||
avatar.armR.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.armR.rotateToX(math.degrees(-Euler2))
|
||||
avatar.armR.rotateToY(math.degrees(-Euler0))
|
||||
#pos_forarmR = [-Euler0 - pos_armL[0], -Euler0 - pos_armL[1], -Euler0 - pos_armL[2]]
|
||||
|
||||
elif sensor == 'D':
|
||||
avatar.head.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.head.rotateToX(math.degrees(-Euler2))
|
||||
avatar.head.rotateToY(math.degrees(-Euler0))
|
||||
|
||||
#if timer == 1:
|
||||
# print(" Avant : E0 = ", math.degrees(Euler0), " E1 = ", math.degrees(Euler1), " E2 = ", math.degrees(Euler2))
|
||||
elif sensor == 'J':
|
||||
#print("JOY {:03.2f} {:03.2f}".format(Euler0, Euler1))
|
||||
if Euler0 <= 128 and Euler1 <= 128:
|
||||
body_orientation = 270 - Euler1 #
|
||||
elif Euler0 >= 128 and Euler1 <= 128:
|
||||
body_orientation = 90 + Euler1
|
||||
elif Euler0 >= 128 and Euler1 >= 128:
|
||||
body_orientation = -157 + Euler1
|
||||
elif Euler0 <= 128 and Euler1 >= 128:
|
||||
body_orientation = 360 - Euler0
|
||||
|
||||
#print(body_orientation)
|
||||
|
||||
if Euler0 >= 128:
|
||||
Euler0 -= 255
|
||||
if Euler1 >= 128:
|
||||
Euler1 -= 255
|
||||
joystick_v_axis_pos = Euler0/128
|
||||
joystick_h_axis_pos = Euler1/128
|
||||
|
||||
#camera_tilt, camera_orientation= CAMERA.point_at()
|
||||
#print("ORIENTATION : ", camera_orientation)
|
||||
|
||||
camera_orientation = 0
|
||||
|
||||
if math.fabs(joystick_v_axis_pos) > 0.1:
|
||||
xm -= math.sin(math.pi/2+camera_orientation*20)*-joystick_v_axis_pos*avatar_speed
|
||||
zm += math.cos(-math.pi/2+camera_orientation*20)*-joystick_v_axis_pos*avatar_speed
|
||||
mv_run += math.fabs(joystick_v_axis_pos*avatar_speed*2/3)
|
||||
|
||||
if math.fabs(joystick_h_axis_pos) > 0.1:
|
||||
xm -= math.cos(math.pi/2+(-camera_orientation*20))*-joystick_h_axis_pos*avatar_speed
|
||||
zm += math.sin(-math.pi/2+(-camera_orientation*20))*-joystick_h_axis_pos*avatar_speed
|
||||
mv_run += math.fabs(joystick_h_axis_pos*avatar_speed*2/3)
|
||||
mv_run_diff = math.fabs(joystick_v_axis_pos*avatar_speed*2/3) + math.fabs(joystick_h_axis_pos*avatar_speed*2/3)
|
||||
|
||||
#print(xm, ym, zm, "Euler : ",joystick_v_axis_pos, joystick_h_axis_pos )
|
||||
|
||||
else:
|
||||
print("unhandled sensor:", sensor)
|
||||
|
||||
|
||||
# Implement Threading to read Serial
|
||||
if(USE_SERIAL):
|
||||
ser = Serial_data('ABCDEFJ', roger_handler)
|
||||
ser.start()
|
||||
|
||||
#============================================================================================================
|
||||
|
||||
def update_position():
|
||||
global xm, ym, zm, xc, yc, zc
|
||||
|
||||
ym = map1.mymap.calcHeight(xm, zm)
|
||||
|
||||
avatar.center.position(xm, ym, zm)
|
||||
avatar2.center.position(-10, map1.mymap.calcHeight(-10, 15), 15)
|
||||
#avatar2.center.position(-5, map1.mymap.calcHeight(-5, 5), 5)
|
||||
bulle.myplane.position(-10, map1.mymap.calcHeight(-10, 15)+11, 15.2)
|
||||
|
||||
map1.myecube.position(xm, ym, zm)
|
||||
|
||||
def update_avatar():
|
||||
global xm, ym, zm, mv_run, mv_run_diff, body_orientation, synchro_serial, flag_jump
|
||||
|
||||
# if we are moving
|
||||
if(mv_run_diff > 0):
|
||||
avatar.run(mv_run, mv_run_diff)
|
||||
|
||||
# if we are jumping
|
||||
#if(flag_jump > 0):
|
||||
# avatar.jump(flag_jump, xm, ym, zm, body_orientation)
|
||||
# flag_jump -=1
|
||||
synchro_serial=10
|
||||
|
||||
# if we are standing
|
||||
if(synchro_serial == 1):
|
||||
avatar.stand()
|
||||
|
||||
#avatar.pose()
|
||||
|
||||
avatar.center.rotateToY(body_orientation)
|
||||
|
||||
if (synchro_serial > 0):
|
||||
synchro_serial -=1
|
||||
mv_run_diff=0
|
||||
|
||||
def update_scenario():
|
||||
global xm, ym, zm
|
||||
#print(xm, ym, zm)
|
||||
if -15 <= xm and xm <= -5 and 10 <= zm and zm <= 19:
|
||||
if -13 <= xm and xm <= -10:
|
||||
xm = -13
|
||||
elif -10 <= xm and xm <= -7:
|
||||
xm = -7
|
||||
if 13 <= zm and zm <= 14.5:
|
||||
zm = 13
|
||||
elif 14.5 <= zm and zm <= 16:
|
||||
zm = 16
|
||||
bulle.myplane.draw()
|
||||
|
||||
def draw():
|
||||
#global body_rotation
|
||||
#avatar.center.rotateToY(180)
|
||||
#avatar.center.position(-5, 74.5, 1)
|
||||
#global mv_tmp
|
||||
#mv_tmp += 0.2
|
||||
#avatar.pose()
|
||||
#avatar2.pose()
|
||||
avatar2.center.draw()
|
||||
avatar.center.draw()
|
||||
map1.building()
|
||||
map1.mymap.draw()
|
||||
map1.myecube.draw()
|
||||
|
||||
|
||||
def read_inputs():
|
||||
global mymouse, my, mx, rot, tilt, keep_running, xm, zm, mv_run, mv_run_diff, body_orientation, flag_jump, flag_view
|
||||
|
||||
k = mykeys.read() # Read Keyboard inputs
|
||||
|
||||
if k >-1:
|
||||
if k == 119: #key w forward
|
||||
zm+=1
|
||||
mv_run += math.fabs(avatar_speed*2/3)
|
||||
mv_run_diff = 1
|
||||
body_orientation = 180
|
||||
elif k == 115: #kry s back
|
||||
zm+= -1
|
||||
mv_run += math.fabs(avatar_speed*2/3)
|
||||
mv_run_diff = 1
|
||||
body_orientation = 0
|
||||
elif k == 97: #key a left
|
||||
xm+= -1
|
||||
mv_run += math.fabs(avatar_speed*2/3)
|
||||
mv_run_diff = 1
|
||||
body_orientation = 90
|
||||
elif k == 100: #key d right
|
||||
xm+=1
|
||||
mv_run += math.fabs(avatar_speed*2/3)
|
||||
mv_run_diff = 1
|
||||
body_orientation = 270
|
||||
elif k == 99: #key c jump
|
||||
flag_jump = 28
|
||||
elif k == 111: #key c jump
|
||||
view = flag_view
|
||||
flag_view = not view
|
||||
elif k == 112: #key p picture
|
||||
pi3d.screenshot("forestWalk" + str(scshots) + ".jpg")
|
||||
scshots += 1
|
||||
elif k == 10: #key RETURN
|
||||
mc = 0
|
||||
elif k == 27: #Escape key to exit
|
||||
print("***** EXIT *****")
|
||||
DISPLAY.destroy()
|
||||
keep_running = False
|
||||
mykeys.close()
|
||||
if USE_SERIAL:
|
||||
ser.stop()
|
||||
mymouse.stop()
|
||||
DISPLAY.stop()
|
||||
|
||||
elif k == ord('f'):
|
||||
roll = 1.0
|
||||
|
||||
mx, my = mymouse.velocity() #change to position() if Camera switched to absolute=True (default)
|
||||
buttons = mymouse.button_status()
|
||||
|
||||
rot = - mx * 0.8
|
||||
tilt = my * 0.8
|
||||
|
||||
def camera_update():
|
||||
global xm, ym, zm, xc, yc, zc, rot, tilt, norm, flag_view, stereo_rot, stereo_tilt, stereo_roll
|
||||
|
||||
if(USE_STEREO):
|
||||
stereo_rot += rot
|
||||
stereo_tilt += tilt
|
||||
stereo_roll += roll
|
||||
CAMERA.move_camera([xm, map1.mymap.calcHeight(xm, zm)+5, zm], stereo_rot, stereo_tilt, - stereo_roll)
|
||||
|
||||
for i in range(2):
|
||||
CAMERA.start_capture(i)
|
||||
draw()
|
||||
CAMERA.end_capture(i)
|
||||
CAMERA.draw()
|
||||
|
||||
else:
|
||||
if flag_view:
|
||||
camRad = [camera_distance, camera_distance, camera_distance]
|
||||
else:
|
||||
camRad = [0, 0, 0]
|
||||
|
||||
#CAMERA.relocate(rot, tilt, point=[-5, 84.5, -0], distance=camRad)
|
||||
xc, yc, zc = CAMERA.relocate(rot, tilt, point=[xm, map1.mymap.calcHeight(xm, zm)+5, zm], distance=camRad)
|
||||
draw()
|
||||
print( xm, ym, zm, " ---- ", xc, yc, zc)
|
||||
#CAMERA.rotateZ(roll)
|
||||
|
||||
|
||||
# Main loop
|
||||
while DISPLAY.loop_running() or keep_running:
|
||||
read_inputs()
|
||||
update_position()
|
||||
update_avatar()
|
||||
update_scenario()
|
||||
camera_update()
|
||||
#engine.stats()
|
||||
|
||||
|
194
src/avatars.py
|
@ -192,17 +192,43 @@ class goomba(BaseAvatar):
|
|||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.center = pi3d.Model(file_string="../Blender/goomba/goomba.obj")
|
||||
self.center = pi3d.Model(file_string="../Blender/goomba/goomba/goomba.obj")
|
||||
shader = pi3d.Shader("uv_flat")
|
||||
self.center.set_shader(shader)
|
||||
self.center.scale(0.1,0.1,0.1)
|
||||
#self.center.scale(0.1,0.1,0.1)
|
||||
self.center.scale(0.3,0.3,0.3)
|
||||
def run(self, position, diff):
|
||||
self.center.rotateToX(8.0 * math.sin(position))
|
||||
self.center.rotateToZ(8.0 * math.sin(position))
|
||||
self.center.rotateToX(12.0 * math.sin(position*2))
|
||||
self.center.rotateToZ(12.0 * math.sin(position*3))
|
||||
def stand(self):
|
||||
self.body.rotateToX(0)
|
||||
self.body.rotateToZ(0)
|
||||
|
||||
class goombaB(BaseAvatar):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.center = pi3d.Model(file_string="../Blender/goomba/goomba_blood/goomba.obj")
|
||||
shader = pi3d.Shader("uv_bump")
|
||||
self.center.set_shader(shader)
|
||||
#self.center.scale(0.1,0.1,0.1)
|
||||
self.center.scale(0.3,0.3,0.3)
|
||||
def run(self, position, diff):
|
||||
self.center.rotateToX(12.0 * math.sin(position*2))
|
||||
self.center.rotateToZ(12.0 * math.sin(position*3))
|
||||
def stand(self):
|
||||
self.body.rotateToX(0)
|
||||
self.body.rotateToZ(0)
|
||||
|
||||
class goombaD(BaseAvatar):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.center = pi3d.Model(file_string="../Blender/goomba/goomba_dead/goomba.obj")
|
||||
shader = pi3d.Shader("uv_bump")
|
||||
self.center.set_shader(shader)
|
||||
self.center.scale(0.4,0.4,0.4)
|
||||
|
||||
class link(BaseAvatar):
|
||||
|
||||
def __init__(self):
|
||||
|
@ -329,30 +355,134 @@ class link(BaseAvatar):
|
|||
self.head.rotateToY(0)
|
||||
self.head.rotateToX(0)
|
||||
|
||||
def jump(self, position, x, y, z, orientation):
|
||||
positionJump = position
|
||||
positionRun = 70
|
||||
if orientation == 0:
|
||||
z += - (14 -position/2)
|
||||
elif orientation == 90:
|
||||
x += -(14 -position/2)
|
||||
elif orientation == 180:
|
||||
z += (14 -position/2)
|
||||
elif orientation == 270:
|
||||
x += (14 -position/2)
|
||||
if positionJump >= 14:
|
||||
self.center.position(x, y + (7 - positionJump/4), z)
|
||||
else :
|
||||
self.center.position(x, y + (positionJump/4), z)
|
||||
self.legR.rotateToX(25 * math.sin(positionRun))
|
||||
self.legL.rotateToX(-25 * math.sin(positionRun))
|
||||
self.footR.rotateToX(-20+ 20 * math.sin(positionRun))
|
||||
self.footL.rotateToX(-20 -20 * math.sin(positionRun))
|
||||
|
||||
self.armL.rotateToZ(300)
|
||||
self.armR.rotateToZ(60)
|
||||
self.armR.rotateToY(35.0 * math.sin(positionRun))
|
||||
self.armL.rotateToY(35.0 * math.sin(positionRun))
|
||||
def jump(self, position):
|
||||
|
||||
self.armL.rotateToZ(60)
|
||||
#self.armR.rotateToZ(300)
|
||||
#self.armR.rotateToY(35.0 * math.sin(positionRun))
|
||||
#self.armL.rotateToY(35.0 * math.sin(positionRun))
|
||||
|
||||
def cut(self, position):
|
||||
#self.armL.rotateToZ(300)
|
||||
self.armL.rotateToZ(300+30.0 * math.sin(position/4)) # half a move
|
||||
self.armL.rotateToY(0+70.0 * math.sin(position/4)) # half a move
|
||||
self.forarmL.rotateToY(0+70.0 * math.sin(position/4))
|
||||
|
||||
class linkstereo(BaseAvatar):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.center = pi3d.Model(file_string="../Blender/Zelda/Custom_Link/Link_full_butt.obj")
|
||||
shader = pi3d.Shader("uv_flat")
|
||||
self.center.set_shader(shader)
|
||||
self.center.scale(0.6, 0.6, 0.6)
|
||||
|
||||
self.armR = pi3d.Model(file_string="../Blender/Zelda/Custom_Link/Link_armR.obj", cy=-8.6, cx=1, cz=-0.7)
|
||||
self.armR.set_shader(shader)
|
||||
self.forarmR = pi3d.Model(file_string="../Blender/Zelda/Custom_Link/Link_forarmR.obj", cy=-8.8, cx=2.8, cz=-0.7)
|
||||
self.forarmR.set_shader(shader)
|
||||
self.handR = pi3d.Model(file_string="../Blender/Zelda/Custom_Link/Link_handR.obj", cy=-8.8, cx=4.4, cz=-0.7)
|
||||
self.handR.set_shader(shader)
|
||||
|
||||
self.armL = pi3d.Model(file_string="../Blender/Zelda/Custom_Link/Link_armL.obj", cy=-8.6, cx=-1, cz=-0.7)
|
||||
self.armL.set_shader(shader)
|
||||
self.forarmL = pi3d.Model(file_string="../Blender/Zelda/Custom_Link/Link_forarmL.obj", cy=-8.8, cx=-2.8, cz=-0.7)
|
||||
self.forarmL.set_shader(shader)
|
||||
self.handL = pi3d.Model(file_string="../Blender/Zelda/Custom_Link/Link_handL.obj", cy=-8.8, cx=-4.4, cz=-0.7)
|
||||
self.handL.set_shader(shader)
|
||||
|
||||
self.center.add_child(self.armR)
|
||||
self.armR.add_child(self.forarmR)
|
||||
self.forarmR.add_child(self.handR)
|
||||
|
||||
self.center.add_child(self.armL)
|
||||
self.armL.add_child(self.forarmL)
|
||||
self.forarmL.add_child(self.handL)
|
||||
|
||||
def run(self, position, diff):
|
||||
#compute motion
|
||||
if diff <= 0.25:
|
||||
self.legR.rotateToX(15 * math.sin(position))
|
||||
self.legL.rotateToX(-15 * math.sin(position))
|
||||
self.footR.rotateToX(-15+ 15 * math.sin(position))
|
||||
self.footL.rotateToX(-15 -15 * math.sin(position))
|
||||
|
||||
self.armL.rotateToZ(280)
|
||||
self.armR.rotateToZ(80)
|
||||
self.armR.rotateToY(25.0 * math.sin(position))
|
||||
self.armL.rotateToY(25.0 * math.sin(position))
|
||||
|
||||
self.body.rotateToY(10.0 * math.sin(position))
|
||||
self.head.rotateToY(-8.0 * math.sin(position))
|
||||
|
||||
else:
|
||||
positionRun = position
|
||||
self.legR.rotateToX(25 * math.sin(positionRun))
|
||||
self.legL.rotateToX(-25 * math.sin(positionRun))
|
||||
self.footR.rotateToX(-20+ 20 * math.sin(positionRun))
|
||||
self.footL.rotateToX(-20 -20 * math.sin(positionRun))
|
||||
|
||||
self.armL.rotateToZ(300)
|
||||
self.armR.rotateToZ(60)
|
||||
self.armR.rotateToY(35.0 * math.sin(positionRun))
|
||||
self.armL.rotateToY(35.0 * math.sin(positionRun))
|
||||
|
||||
self.body.rotateToY(10.0 * math.sin(positionRun))
|
||||
self.body.rotateToX(-15.0)
|
||||
self.head.rotateToY(-8.0 * math.sin(positionRun))
|
||||
self.head.rotateToX(10.0)
|
||||
|
||||
def stand(self):
|
||||
|
||||
self.legR.rotateToX(0)
|
||||
self.legL.rotateToX(0)
|
||||
self.footR.rotateToX(0)
|
||||
self.footL.rotateToX(0)
|
||||
|
||||
self.armL.rotateToZ(280)
|
||||
self.armR.rotateToZ(80)
|
||||
self.armR.rotateToY(0)
|
||||
self.armL.rotateToY(0)
|
||||
|
||||
self.body.rotateToY(0)
|
||||
self.body.rotateToX(0)
|
||||
self.head.rotateToY(0)
|
||||
self.head.rotateToX(0)
|
||||
|
||||
def pose(self):
|
||||
|
||||
self.legR.rotateToX(15)
|
||||
self.legL.rotateToX(-15)
|
||||
self.footR.rotateToX(-10)
|
||||
self.footL.rotateToX(0)
|
||||
|
||||
#self.armL.rotateToZ(280)
|
||||
self.armL.rotateToZ(40)
|
||||
self.forarmL.rotateToY(10)
|
||||
|
||||
self.armR.rotateToX(30)
|
||||
self.armR.rotateToY(280)
|
||||
#self.armR.rotateToZ(280)
|
||||
self.forarmR.rotateToZ(90)
|
||||
self.forarmR.rotateToY(300)
|
||||
|
||||
self.body.rotateToY(0)
|
||||
self.body.rotateToX(0)
|
||||
self.head.rotateToY(0)
|
||||
self.head.rotateToX(0)
|
||||
|
||||
def jump(self, position):
|
||||
|
||||
self.armL.rotateToZ(60)
|
||||
#self.armR.rotateToZ(300)
|
||||
#self.armR.rotateToY(35.0 * math.sin(positionRun))
|
||||
#self.armL.rotateToY(35.0 * math.sin(positionRun))
|
||||
|
||||
def cut(self, position):
|
||||
#self.armL.rotateToZ(300)
|
||||
self.armL.rotateToZ(300+30.0 * math.sin(position/4)) # half a move
|
||||
self.armL.rotateToY(0+70.0 * math.sin(position/4)) # half a move
|
||||
self.forarmL.rotateToY(0+70.0 * math.sin(position/4))
|
||||
|
||||
class goku(BaseAvatar):
|
||||
|
||||
|
@ -489,7 +619,13 @@ class goku(BaseAvatar):
|
|||
|
||||
def jump(self, position):
|
||||
self.armL.rotateToX(20 * math.sin(position))
|
||||
self.armR.rotateToX(-20 * math.sin(position))
|
||||
#self.armR.rotateToX(-20 * math.sin(position))
|
||||
|
||||
def cut(self, position):
|
||||
#self.armL.rotateToZ(300)
|
||||
self.armL.rotateToZ(300+30.0 * math.sin(position/4)) # half a move
|
||||
self.armL.rotateToY(0+70.0 * math.sin(position/4)) # half a move
|
||||
self.handL.rotateToY(0+70.0 * math.sin(position/4))
|
||||
|
||||
class guy(BaseAvatar):
|
||||
|
||||
|
|
|
@ -0,0 +1,245 @@
|
|||
#!/bin/python
|
||||
|
||||
import math,random
|
||||
import pi3d
|
||||
import inputs
|
||||
from serial_data import Serial_data
|
||||
|
||||
# Serial DOF
|
||||
#pos_armR = [0, 0, 0]
|
||||
#pos_forarmR = [0, 0, 0]
|
||||
#pos_armL = [0, 0, 0]
|
||||
#pos_forarmL = [0, 0, 0]
|
||||
|
||||
class handlers:
|
||||
|
||||
def __init__(self):
|
||||
self.rot = 0
|
||||
self.tilt = 0
|
||||
|
||||
self.x = 0
|
||||
self.z = 0
|
||||
self.body_orientation = 180
|
||||
self.mv_run = 0
|
||||
self.mv_run_diff = 0
|
||||
self.avatar_speed = 2
|
||||
|
||||
self.flag_jump = 0
|
||||
self.flag_cut = 0
|
||||
self.ser = 0
|
||||
self.cpt_view = 0
|
||||
self.flag_view = True
|
||||
#mykeys = pi3d.Keyboard(use_curses=True)
|
||||
self.mykeys = pi3d.InputEvents(self.key_handler_func, self.mouse_handler_func, self.joystick_handler_func)
|
||||
self.keep_running = True
|
||||
|
||||
######### Return the values ##########
|
||||
def rotation(self):
|
||||
return(self.rot, self.tilt)
|
||||
|
||||
def position_upd(self, x, z):
|
||||
self.x += x
|
||||
self.z += z
|
||||
|
||||
def position(self):
|
||||
return(self.x, self.z, self.body_orientation, self.mv_run, self.mv_run_diff, self.flag_view)
|
||||
|
||||
def view(self):
|
||||
return(self.flag_view)
|
||||
|
||||
def action_update(self):
|
||||
cut = self.flag_cut
|
||||
jump = self.flag_jump
|
||||
if self.flag_cut:
|
||||
self.flag_cut-=1
|
||||
if self.flag_jump:
|
||||
self.flag_jump-=1
|
||||
return(jump, cut)
|
||||
|
||||
def actionRead(self):
|
||||
return(self.flag_jump, self.flag_cut)
|
||||
|
||||
######### Fonctions ##########
|
||||
def roger_handler(self, sensor, Euler0, Euler1, Euler2):
|
||||
#timer += 1
|
||||
#print("SENSOR:", sensor)
|
||||
#if timer == 13:
|
||||
# timer = 0
|
||||
|
||||
SIMPLE_MOVE = True
|
||||
if SIMPLE_MOVE:
|
||||
if sensor == 'A':
|
||||
if flag_cut < 4 and math.fabs(Euler1) + math.fabs(Euler2) >= Euler_diff + 0.3:
|
||||
flag_cut = 12
|
||||
#print(" E1 = ", Euler1, " E2 = ", Euler2)
|
||||
#print(math.fabs(Euler1) + math.fabs(Euler2))
|
||||
Euler_diff = math.fabs(Euler1) + math.fabs(Euler2)
|
||||
|
||||
elif sensor == 'C':
|
||||
if flag_cut < 4 and math.fabs(Euler1) + math.fabs(Euler2) >= Euler_diff + 0.3:
|
||||
flag_cut = 12
|
||||
Euler_diff = math.fabs(Euler1) + math.fabs(Euler2)
|
||||
#avatar.armR.rotateToZ(math.degrees(-Euler1))
|
||||
#avatar.armR.rotateToX(math.degrees(-Euler2))
|
||||
#avatar.armR.rotateToY(math.degrees(-Euler0))
|
||||
#pos_forarmR = [-Euler0 - pos_armL[0], -Euler0 - pos_armL[1], -Euler0 - pos_armL[2]]
|
||||
|
||||
elif sensor == 'D':
|
||||
avatar.head.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.head.rotateToX(math.degrees(-Euler2))
|
||||
avatar.head.rotateToY(math.degrees(-Euler0))
|
||||
|
||||
else:
|
||||
if sensor == 'A':
|
||||
avatar.armL.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.armL.rotateToX(math.degrees(-Euler2))
|
||||
avatar.armL.rotateToY(math.degrees(-Euler0))
|
||||
#pos_armL = [Euler0, Euler1, Euler2]
|
||||
#print("Bras : E0 = ", math.degrees(Euler0), " E1 = ", math.degrees(Euler1), " E2 = ", math.degrees(Euler2))
|
||||
|
||||
elif sensor == 'C':
|
||||
avatar.armR.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.armR.rotateToX(math.degrees(-Euler2))
|
||||
avatar.armR.rotateToY(math.degrees(-Euler0))
|
||||
#pos_forarmR = [-Euler0 - pos_armL[0], -Euler0 - pos_armL[1], -Euler0 - pos_armL[2]]
|
||||
|
||||
elif sensor == 'D':
|
||||
avatar.head.rotateToZ(math.degrees(-Euler1))
|
||||
avatar.head.rotateToX(math.degrees(-Euler2))
|
||||
avatar.head.rotateToY(math.degrees(-Euler0))
|
||||
|
||||
#if timer == 1:
|
||||
# print(" Avant : E0 = ", math.degrees(Euler0), " E1 = ", math.degrees(Euler1), " E2 = ", math.degrees(Euler2))
|
||||
|
||||
if sensor == 'J':
|
||||
#print("JOY {:03.2f} {:03.2f}".format(Euler0, Euler1))
|
||||
#print(Euler2)
|
||||
|
||||
if Euler2 == '0':
|
||||
if Euler0 <= 128 and Euler1 <= 128:
|
||||
self.body_orientation = 270 - Euler1
|
||||
elif Euler0 >= 128 and Euler1 <= 128:
|
||||
self.body_orientation = 90 + Euler1
|
||||
elif Euler0 >= 128 and Euler1 >= 128:
|
||||
self.body_orientation = -157 + Euler1
|
||||
elif Euler0 <= 128 and Euler1 >= 128:
|
||||
self.body_orientation = 360 - Euler0
|
||||
|
||||
#print(body_orientation)
|
||||
|
||||
if Euler0 >= 128:
|
||||
Euler0 -= 255
|
||||
if Euler1 >= 128:
|
||||
Euler1 -= 255
|
||||
joystick_v_axis_pos = Euler0/128
|
||||
joystick_h_axis_pos = Euler1/128
|
||||
|
||||
#camera_tilt, camera_orientation= CAMERA.point_at()
|
||||
#print("ORIENTATION : ", camera_orientation)
|
||||
|
||||
camera_orientation = 0
|
||||
|
||||
|
||||
|
||||
if math.fabs(joystick_v_axis_pos) > 0.1:
|
||||
self.x -= math.sin(math.pi/2+camera_orientation*20)*-joystick_v_axis_pos*self.avatar_speed
|
||||
self.z += math.cos(-math.pi/2+camera_orientation*20)*-joystick_v_axis_pos*self.avatar_speed
|
||||
self.mv_run += math.fabs(joystick_v_axis_pos*self.avatar_speed*2/3)
|
||||
|
||||
if math.fabs(joystick_h_axis_pos) > 0.1:
|
||||
self.x -= math.cos(math.pi/2+(-camera_orientation*20))*-joystick_h_axis_pos*self.avatar_speed
|
||||
self.z += math.sin(-math.pi/2+(-camera_orientation*20))*-joystick_h_axis_pos*self.avatar_speed
|
||||
self.mv_run += math.fabs(joystick_h_axis_pos*self.avatar_speed*2/3)
|
||||
self.mv_run_diff = math.fabs(joystick_v_axis_pos*self.avatar_speed*2/3) + math.fabs(joystick_h_axis_pos*self.avatar_speed*2/3)
|
||||
|
||||
#print(xm, ym, zm, "Euler : ",joystick_v_axis_pos, joystick_h_axis_pos )
|
||||
|
||||
else:
|
||||
self.cpt_view += 1
|
||||
if self.cpt_view == 2:
|
||||
view = self.flag_view
|
||||
self.flag_view = not view
|
||||
self.cpt_view = 0
|
||||
|
||||
else:
|
||||
pass
|
||||
#print("sensor:", sensor)
|
||||
|
||||
def serial(self):
|
||||
self.ser = Serial_data('ABCDEFJ', self.roger_handler)
|
||||
self.ser.start()
|
||||
|
||||
def joystick_handler_func(self, sourceType, sourceIndex, x1, y1, z1, x2, y2, z2, hatx, haty):
|
||||
#print(x1, y1)
|
||||
#global rot, tilt
|
||||
#mymouse.velocity() #change to position() if Camera switched to absolute=True (default)
|
||||
#buttons = #mymouse.button_status()
|
||||
self.rot = - x1 * 200
|
||||
self.tilt = y1 * 200
|
||||
|
||||
def mouse_handler_func(self, sourceType, sourceIndex, delta_x, delta_y, v, h):
|
||||
pass
|
||||
#print("ENTER MOUSE")
|
||||
|
||||
def key_handler_func(self, sourceType, sourceIndex, key, value):
|
||||
#k = mykeys.read() # Read Keyboard inputs
|
||||
#print(key)
|
||||
if key >-1:
|
||||
if key == pi3d.event.Event.key_to_code('KEY_W'):#119: #key z forward
|
||||
self.z+=1
|
||||
self.mv_run += math.fabs(self.avatar_speed*1/2)
|
||||
self.mv_run_diff = 1
|
||||
self.body_orientation = 180
|
||||
elif key == pi3d.event.Event.key_to_code('KEY_S'): #115: #kry s back
|
||||
self.z+= -1
|
||||
self.mv_run += math.fabs(self.avatar_speed*1/2)
|
||||
self.mv_run_diff = 1
|
||||
self.body_orientation = 0
|
||||
elif key == pi3d.event.Event.key_to_code('KEY_A'): #97: #key a left
|
||||
self.x+= -1
|
||||
self.mv_run += math.fabs(self.avatar_speed*1/2)
|
||||
self.mv_run_diff = 1
|
||||
self.body_orientation = 90
|
||||
elif key == pi3d.event.Event.key_to_code('KEY_D'):#100: #key d right
|
||||
self.x+=1
|
||||
self.mv_run += math.fabs(self.avatar_speed*1/2)
|
||||
self.mv_run_diff = 1
|
||||
self.body_orientation = 270
|
||||
elif key == pi3d.event.Event.key_to_code('KEY_C'): #99: #key c jump
|
||||
if not self.flag_jump:
|
||||
self.flag_jump = 25
|
||||
elif key == pi3d.event.Event.key_to_code('KEY_V'): #118: #key w cut
|
||||
self.flag_cut = 12
|
||||
#print("eee")
|
||||
elif key == pi3d.event.Event.key_to_code('KEY_O'): #111: #key o
|
||||
view = self.flag_view
|
||||
self.flag_view = not view
|
||||
elif key == pi3d.event.Event.key_to_code('KEY_P'): #112: #key p picture
|
||||
pi3d.screenshot("forestWalk" + str(scshots) + ".jpg")
|
||||
scshots += 1
|
||||
elif key == 10: #key RETURN
|
||||
mc = 0
|
||||
elif key == pi3d.event.Event.key_to_code('KEY_ESC'): #Escape key to exit
|
||||
print("***** EXIT *****")
|
||||
#os.system('xset r on')
|
||||
|
||||
self.keep_running = False
|
||||
|
||||
#mykeys.close()
|
||||
#if USE_SERIAL:
|
||||
self.ser.stop()
|
||||
#mymouse.stop()
|
||||
#DISPLAY.destroy()
|
||||
#DISPLAY.stop()
|
||||
|
||||
elif key == ord('f'):
|
||||
roll = 1.0
|
||||
|
||||
def read_exit(self):
|
||||
return self.keep_running
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
91
src/maps.py
|
@ -4,6 +4,38 @@
|
|||
import pi3d
|
||||
import math,random
|
||||
|
||||
px = -1.0
|
||||
py = 0.0
|
||||
pz = 114.0
|
||||
|
||||
class templeoftime(object):
|
||||
|
||||
def __init__(self):
|
||||
flatsh = pi3d.Shader("uv_flat")
|
||||
self.building = pi3d.Model(file_string="../Blender/Map/Temple_of_Time/TempleofTime.obj", sx=0.2, sy=0.2, sz=0.2)
|
||||
self.building.set_shader(flatsh)
|
||||
|
||||
def draw(self):
|
||||
self.building.draw()
|
||||
|
||||
def height(self, x, z):
|
||||
global px, py, pz
|
||||
if pz + 12 < z and pz + z < 160:
|
||||
if px + -23 < x and x < px + 23 and pz + 77 < z and z < pz + 120:
|
||||
return 6.4
|
||||
else:
|
||||
return 3.2
|
||||
elif px + -11 < x and x < px + 12 and pz + -1 <= z:
|
||||
return 3.2
|
||||
elif px + -7 < x and x < px + 7 and pz + -8 < z and z < pz + -1:
|
||||
return 4
|
||||
elif px + -8 < x and x < px + 8 and pz + -67 < z and z < pz + -53:
|
||||
return 1.6
|
||||
else:
|
||||
return 0
|
||||
|
||||
def update_pos(self, x, z):
|
||||
self.building.position(px, py, pz)
|
||||
|
||||
class forest(object):
|
||||
|
||||
|
@ -11,9 +43,12 @@ class forest(object):
|
|||
|
||||
# load shader
|
||||
shader = pi3d.Shader("uv_bump")
|
||||
shinesh = pi3d.Shader("uv_reflect")
|
||||
#shinesh = pi3d.Shader("uv_reflect")
|
||||
flatsh = pi3d.Shader("uv_flat")
|
||||
|
||||
tree1img = pi3d.Texture("../textures/tree1.png")
|
||||
tree2img = pi3d.Texture("../textures/tree2.png")
|
||||
hb2img = pi3d.Texture("../textures/hornbeam2.png")
|
||||
bumpimg = pi3d.Texture("../textures/grasstile_n.jpg")
|
||||
reflimg = pi3d.Texture("../textures/stars.jpg")
|
||||
floorimg = pi3d.Texture("../textures/floor_nm.jpg")
|
||||
|
@ -21,7 +56,6 @@ class forest(object):
|
|||
FOG = ((0.3, 0.3, 0.4, 0.8), 650.0)
|
||||
TFOG = ((0.2, 0.24, 0.22, 1.0), 150.0)
|
||||
|
||||
#myecube = pi3d.EnvironmentCube(900.0,"HALFCROSS")
|
||||
ectex=pi3d.loadECfiles("../textures/ecubes","sbox")
|
||||
self.myecube = pi3d.EnvironmentCube(size=900.0, maptype="FACES", name="cube")
|
||||
self.myecube.set_draw_details(flatsh, ectex)
|
||||
|
@ -36,13 +70,60 @@ class forest(object):
|
|||
divx=32, divy=32)
|
||||
self.mymap.set_draw_details(shader, [mountimg1, bumpimg, reflimg], 128.0, 0.0)
|
||||
self.mymap.set_fog(*FOG)
|
||||
self.mymap.position(0.0, 0.0, 0.0)
|
||||
|
||||
self.building = pi3d.Model(file_string="../models/ConferenceHall/conferencehall.egg", name="Hall", sx=0.1, sy=0.1, sz=0.1)
|
||||
self.building.set_shader(flatsh)
|
||||
|
||||
#Create tree models
|
||||
treeplane = pi3d.Plane(w=4.0, h=5.0)
|
||||
|
||||
treemodel1 = pi3d.MergeShape(name="baretree")
|
||||
treemodel1.add(treeplane.buf[0], 0,0,0)
|
||||
treemodel1.add(treeplane.buf[0], 0,0,0, 0,90,0)
|
||||
|
||||
treemodel2 = pi3d.MergeShape(name="bushytree")
|
||||
treemodel2.add(treeplane.buf[0], 0,0,0)
|
||||
treemodel2.add(treeplane.buf[0], 0,0,0, 0,60,0)
|
||||
treemodel2.add(treeplane.buf[0], 0,0,0, 0,120,0)
|
||||
|
||||
#Scatter them on map using Merge shape's cluster function
|
||||
self.mytrees1 = pi3d.MergeShape(name="trees1")
|
||||
self.mytrees1.cluster(treemodel1.buf[0], self.mymap,0.0,0.0,200.0,200.0,20,"",8.0,3.0)
|
||||
self.mytrees1.set_draw_details(flatsh, [tree2img], 0.0, 0.0)
|
||||
self.mytrees1.set_fog(*TFOG)
|
||||
|
||||
self.mytrees2 = pi3d.MergeShape(name="trees2")
|
||||
self.mytrees2.cluster(treemodel2.buf[0], self.mymap,0.0,0.0,200.0,200.0,20,"",6.0,3.0)
|
||||
self.mytrees2.set_draw_details(flatsh, [tree1img], 0.0, 0.0)
|
||||
self.mytrees2.set_fog(*TFOG)
|
||||
|
||||
self.mytrees3 = pi3d.MergeShape(name="trees3")
|
||||
self.mytrees3.cluster(treemodel2, self.mymap,0.0,0.0,300.0,300.0,20,"",4.0,2.0)
|
||||
self.mytrees3.set_draw_details(flatsh, [hb2img], 0.0, 0.0)
|
||||
self.mytrees3.set_fog(*TFOG)
|
||||
|
||||
#screenshot number
|
||||
scshots = 1
|
||||
|
||||
def building(self):
|
||||
pass
|
||||
def height(self, x, z):
|
||||
|
||||
if -40 < x and x < 50 and -40 < z and z < 40:
|
||||
return 19
|
||||
else:
|
||||
return self.mymap.calcHeight(x, z)
|
||||
|
||||
def draw(self):
|
||||
self.mymap.draw()
|
||||
self.building.draw()
|
||||
self.myecube.draw()
|
||||
#self.mytrees1.draw()
|
||||
#self.mytrees2.draw()
|
||||
#self.mytrees3.draw()
|
||||
|
||||
def update_pos(self, x, z):
|
||||
self.myecube.position(x, self.height(x, z), z)
|
||||
self.mymap.position(-360.0, 0.0, 180.0)
|
||||
self.building.position(0, 19, 0)
|
||||
|
||||
class moon(object):
|
||||
|
||||
|
|