Visma3d

Iš wiki.angis.net.
Jump to navigation Jump to search

Visma3d modelis

Visma3d programėlės pavyzdys

Ši programa demonstruoja, kaip galima susikurti savo 3D modelius pasinaudojant grafika ir nurodant reikiamas koordinates.
Žiūrėti Visma3d

Visma3d programėlės kodas

reikalingas žaidimas
import math

layer = žaidimas.duokSluoksnį()
graphics = [žaidimas.Grafika(), žaidimas.Grafika()]
graphics[0].linijosStoris(1.5); graphics[1].linijosStoris(1.5); 

z = 0
ve = [[-0.068367,0.045790,-0.078855],[-0.163153,0.045790,-0.218812],[-0.162837,0.045790,-0.177344],[-0.162837,-0.044345,-0.177344],[-0.163153,-0.044345,-0.218812],[-0.138060,0.045790,-0.250780],[0.168781,0.045790,-0.123251],[0.154217,0.045790,-0.074541],[0.088083,0.045790,-0.225060],[0.138702,0.045790,-0.182405],[0.015577,0.045790,-0.048426],[-0.068367,0.045790,-0.078855],[0.098097,0.045790,-0.046724],[-0.135926,0.045790,-0.131128],[0.072449,0.045790,-0.094801],[-0.041891,0.045790,-0.270013],[0.025115,0.045790,-0.255133],[-0.068367,-0.044345,-0.078855],[0.015577,-0.044345,-0.048426],[0.098097,-0.044345,-0.046724],[0.154217,-0.044345,-0.074541],[0.168781,-0.044345,-0.123251],[0.138702,-0.044345,-0.182405],[0.088083,-0.044345,-0.225060],[0.025115,-0.044345,-0.255133],[-0.041891,-0.044345,-0.270013],[0.072449,-0.044345,-0.094801],[-0.138060,-0.044345,-0.250780],[-0.135926,-0.044345,-0.131128],[0.316897,0.045790,0.129366],[0.351088,0.045790,0.273595],[0.351088,0.045790,0.273595],[0.398111,0.045790,0.273595],[0.282699,0.045790,0.273595],[0.316876,0.045790,0.129366],[0.297661,0.045790,0.051375],[0.236752,0.045790,0.273595],[0.333989,0.045790,0.051375],[0.297661,-0.044345,0.051375],[0.236752,-0.044345,0.273595],[0.282699,-0.044345,0.273595],[0.316876,-0.044345,0.129366],[0.333989,-0.044345,0.051375],[0.316897,-0.044345,0.129366],[0.351088,-0.044345,0.273595],[0.351088,-0.044345,0.273595],[0.398111,-0.044345,0.273595],[-0.235566,0.045790,0.051375],[-0.281511,0.045790,0.051375],[-0.281511,-0.044345,0.051375],[-0.235566,-0.044345,0.051375],[-0.349904,0.045790,0.051375],[-0.314640,0.045790,0.195605],[-0.296475,0.045790,0.273595],[-0.396922,0.045790,0.051375],[-0.332806,0.045790,0.273595],[-0.349904,-0.044345,0.051375],[-0.396922,-0.044345,0.051375],[-0.332806,-0.044345,0.273595],[-0.296475,-0.044345,0.273595],[-0.314640,-0.044345,0.195605],[-0.158623,0.045790,0.051375],[-0.202437,0.045790,0.051375],[-0.158623,-0.044345,0.051375],[-0.202437,-0.044345,0.051375],[-0.158623,0.045790,0.051375],[-0.158623,0.045790,0.273595],[-0.202437,0.045790,0.051375],[-0.202437,0.045790,0.273595],[-0.158623,-0.044345,0.051375],[-0.202437,-0.044345,0.051375],[-0.202437,-0.044345,0.273595],[-0.158623,-0.044345,0.273595],[0.031583,0.045790,0.051375],[0.012347,0.045790,0.273595],[0.095698,0.045790,0.273595],[0.129889,0.045790,0.273595],[0.155538,0.045790,0.113339],[0.166225,0.045790,0.273595],[0.129889,0.045790,0.051375],[0.111729,0.045790,0.182784],[0.089293,0.045790,0.051375],[0.065774,0.045790,0.113339],[0.095698,0.045790,0.273595],[0.031583,0.045790,0.051375],[0.012347,0.045790,0.273595],[0.059362,0.045790,0.273595],[0.188668,0.045790,0.051375],[0.129889,0.045790,0.051375],[0.089293,0.045790,0.051375],[0.211103,0.045790,0.273595],[0.166225,0.045790,0.273595],[0.111729,-0.044345,0.182784],[0.089293,-0.044345,0.051375],[0.012347,-0.044345,0.273595],[0.059362,-0.044345,0.273595],[0.095698,-0.044345,0.273595],[0.129889,-0.044345,0.051375],[0.065774,-0.044345,0.113339],[0.129889,-0.044345,0.273595],[0.155538,-0.044345,0.113339],[0.166225,-0.044345,0.273595],[0.211103,-0.044345,0.273595],[0.095698,-0.044345,0.273595],[0.031583,-0.044345,0.051375],[0.089293,-0.044345,0.051375],[0.012347,-0.044345,0.273595],[0.031583,-0.044345,0.051375],[0.188668,-0.044345,0.051375],[0.129889,-0.044345,0.051375],[0.166225,-0.044345,0.273595],[-0.049631,0.045790,0.051375],[-0.071352,0.045790,0.095025],[-0.026503,0.045790,0.232821],[-0.038943,0.045790,0.273595],[-0.092371,0.045790,0.273595],[-0.071488,0.045790,0.230962],[-0.096380,0.045790,0.162189],[-0.110337,0.045790,0.129906],[-0.101989,0.045790,0.051375],[-0.114914,0.045790,0.093943],[-0.110337,0.045790,0.129906],[-0.096380,0.045790,0.162189],[-0.082203,0.045790,0.190028],[-0.071488,0.045790,0.230962],[-0.026503,0.045790,0.232821],[-0.037901,0.045790,0.186943],[-0.052635,0.045790,0.160083],[-0.066842,0.045790,0.126721],[-0.071352,0.045790,0.095025],[-0.049631,0.045790,0.051375],[-0.071488,-0.044345,0.230962],[-0.082203,-0.044345,0.190028],[-0.092371,-0.044345,0.273595],[-0.038943,-0.044345,0.273595],[-0.071352,-0.044345,0.095025],[-0.049631,-0.044345,0.051375],[-0.110337,-0.044345,0.129906],[-0.114914,-0.044345,0.093943],[-0.071488,-0.044345,0.230962],[-0.110337,-0.044345,0.129906],[-0.096380,-0.044345,0.162189],[-0.052635,-0.044345,0.160083],[-0.037901,-0.044345,0.186943],[-0.101989,-0.044345,0.051375],[-0.071352,-0.044345,0.095025],[-0.066842,-0.044345,0.126721],[-0.026503,-0.044345,0.232821],[-0.049631,-0.044345,0.051375],[-0.096380,-0.044345,0.162189],[-0.026503,-0.044345,0.232821]]
me = [[1,4,3,2],[12,19,20,7],[2,3,28,13],[10,18,19,12],[6,21,22,9],[15,25,26,14],[16,24,25,15],[14,26,27,5],[8,23,24,16],[13,28,17,11],[5,27,4,1],[7,20,21,6],[9,22,23,8],[11,17,18,10],[36,39,38,35],[33,40,39,36],[34,41,40,33],[35,38,42,37],[30,44,43,29],[32,46,45,31],[37,42,46,32],[47,50,49,48],[54,57,58,55],[52,60,56,51],[53,59,50,47],[51,56,57,54],[55,58,59,53],[48,49,60,52],[62,64,63,61],[68,71,72,66],[67,70,71,68],[66,72,69,65],[84,104,105,89],[73,107,106,74],[81,93,92,80],[80,92,97,79],[88,109,108,87],[87,108,102,90],[90,102,101,91],[78,110,100,77],[77,100,99,76],[75,96,99,76],[83,103,98,82],[82,98,95,86],[86,95,94,85],[123,132,131,124],[114,134,133,115],[111,136,135,112],[120,138,137,121],[115,133,139,116],[117,141,140,118],[126,143,142,127],[119,144,138,120],[128,146,145,129],[113,147,134,114],[130,148,144,119],[127,142,146,128],[125,150,143,126],[122,149,132,123]]
rx = [[1.0,0.0,0.0,0.0],[0.0,math.cos(4.5),math.sin(4.5),0.0],[0.0,-math.sin(4.5),math.cos(4.5),0.0],[0.0,0.0,0.0,1.0]]
pr = [[7.0,0.0,0.0,0.0],[0.0,7.0,0.0,0.0],[0.0,0.0,0.0,-3.0],[0.0,0.0,-1.0,1.9]]
vr = [None] * len(ve)

def mu(i, m):
    w = i[0]*m[0][3]+i[1]*m[1][3]+i[2]*m[2][3]+m[3][3]
    return [(i[0]*m[0][0]+i[1]*m[1][0]+i[2]*m[2][0]+m[3][0])/w,(i[0]*m[0][1]+i[1]*m[1][1]+i[2]*m[2][1]+m[3][1])/w,(i[0]*m[0][2]+i[1]*m[1][2]+i[2]*m[2][2]+m[3][2])/w]

def d(az):
    rz = [[math.cos(az/100),math.sin(az/100),0.0,0.0],[-math.sin(az/100),math.cos(az/100),0.0,0.0],[0.0,0.0,1.0,0.0],[0.0,0.0,0.0,1.0]]

    for i in range(len(ve)):
        vr[i] = mu(mu(mu(ve[i],rz),rx),pr)
        vr[i] = [(vr[i][0]+2)*200,(vr[i][1]+1.2)*200]

    graphics[az%2].išNaujo(); graphics[z%2].linijosSpalva(0xE70743);

    for m in range(len(me)):
        if (m == 14): graphics[z%2].linijosSpalva(0xFFFFFF)
        for i in range(len(me[m])):
            graphics[z%2].pieškLiniją(vr[me[m][i]][0],vr[me[m][i]][1],vr[me[m][(i+1)%len(me[m])]][0],vr[me[m][(i+1)%len(me[m])]][1])

    layer.naudokGrafiką(graphics[z%2])

while 1 > 0: z += 3; d(z);