ÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÀ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌÀ¬ÀÀÀ¬ÀÀÀ¬ÀÀÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÌ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌ̬ÀÀÀ¬ÀÀÀ¬ÀÀ¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî >G4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff»fffffffffffffffffff¶»»İ ffffffffffffffffff»»»»İİ ffffffffffffffff¶»»»»»Ûİİ fffffffffffffff»»»»»»»Ûİİİ fffffffffffff¶»»»»»»»»»İİİİ ffffffffffff¶»»»»»»»»»»İİİİİ fffffffffff»»»»»»»»»»»»Ûİİİİİ fffffffff¶»»»»»»»»»»»»»Ûİİİİİİ ffffffff»»»»»»»»»»»»»»»»İİİİİİİ ffffff¶»»»»»»»»»»»»»»»»»İİİİİİİİ fffff»»»»»»»»»»»»»»»»»»»Ûİİİİİİİİ fff¶»»»»»»»»»»»»»»»»»»»»Ûİİİİİİİİİ ff¶»»»»»»»»»»»»»»»»»»»»»»İİİİİİİİİİİf»»»»»»»»»»»»»»»»»»»»»»»»İİİİİİİİİİİİ»»»»»»»»»»»»»»»»»»»»»»»»Ûİİİİİİİİİİİİ™¹»»»»»»»»»»»»»»»»»»»»»Ûİİİİİİİİİİİİİ™™¹»»»»»»»»»»»»»»»»»»»»İİİİİİİİİİİİİİ™™™»»»»»»»»»»»»»»»»»»İİİİİİİİİİİİİİİ™™™™¹»»»»»»»»»»»»»»»İİİİİİİİİİİİİİİİ™™™™™¹»»»»»»»»»»»»»Ûİİİİİİİİİİİİİİİİ™™™™™™™»»»»»»»»»»»Ûİİİİİİİİİİİİİİİİİ™™™™™™™™¹»»»»»»»»»İİİİİİİİİİİİİİİİİİ™™™™™™™™¹»»»»»»»İİİİİİİİİİİİİİİİİİİ™™™™™™™™™™»»»»»Ûİİİİİİİİİİİİİİİİİİİ™™™™™™™™™™™¹»»Ûİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™™™™¹»İİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™™™™™Ùİİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™™™™Øİİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™™™‰ˆİİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™™™‰ˆİİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™™™ˆˆİİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™™ˆˆİİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™‰ˆˆØİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™ˆˆˆØİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™™ˆˆˆØİİİİİİİİİİİİİİİİİİİİ ™™™™™™™™‰ˆˆˆˆİİİİİİİİİİİİİİİİİİİİ ™™™™™™™‰ˆˆˆˆİİİİİİİİİİİİİİİİİİİİİ™™™™™™™ˆˆˆˆˆİİİİİİİİİİİİİİİİİİİİİ™™™™™™‰ˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİ™™™™™™‰ˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİ™™™™™ˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİİİİ™™™™™ˆˆˆˆˆˆˆİİİİİİİİİİİİİİİİİİİİ™™™™‰ˆˆˆˆˆˆˆİİİİİİİİİİİİİİİİİİİİ™™™™ˆˆˆˆˆˆˆˆİİİİİİİİİİİİİİİİİİİ ™™™™ˆˆˆˆˆˆˆˆİİİİİİİİİİİİİİİİİİİ™™‰ˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİ ™™‰ˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİİ™™ˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİİİİ ™‰ˆˆˆˆˆˆˆˆˆˆİİİİİİİİİİİİİİİ݉ˆˆˆˆˆˆˆˆˆˆİİİİİİİİİİİİİİİ ˆˆˆˆˆˆˆˆˆˆˆİİİİİİİİİİİİİİ݈ˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİİ €ˆˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİ݈ˆˆˆˆˆˆˆˆˆØİİİİİİİİİİİİ ˆˆˆˆˆˆˆˆˆˆİİİİİİİİİİİİ€ˆˆˆˆˆˆˆˆˆİİİİİİİİİİİ ˆˆˆˆˆˆˆˆˆİİİİİİİİİİ݈ˆˆˆˆˆˆˆİİİİİİİİİİ €ˆˆˆˆˆˆˆØİİİİİİİİİ€ˆˆˆˆˆˆØİİİİİİİİ ˆˆˆˆˆˆØİİİİİİİİ€ˆˆˆˆˆˆİİİİİİİ €ˆˆˆˆˆİİİİİİ݈ˆˆˆˆİİİİİİ €ˆˆˆˆØİİİİİ€ˆˆˆØİİİİ ˆˆˆØİİİ݈ˆˆİİİ €ˆˆİİ݈ˆİİ ˆİİ€Ø Ğ  -- title: 3d renderer graphics -- author: SONENEIS -- desc: a 3d renderer -- site: empty -- license: MIT License -- version: 0.1 -- script: lua cos=math.cos sin=math.sin min=math.min max=math.max rnd=math.random sqrt=math.sqrt fov=1 verts={} edges={} faces={} function rotate(x,y,z,ang) return x*cos(ang)+y*-sin(ang), x*sin(ang)+y*cos(ang),z end function addVert(x,y,z,fov) fov=fov*(max(240,136)/2) x2d=120+(x/z)*fov y2d=68+(y/z)*fov vert2d={x=x2d,y=y2d,z=z} table.insert(verts,vert2d) return vert2d end function addEdge(v1,v2) edge={a={x=v1.x,y=v1.y},b={x=v2.x,y=v2.y}} table.insert(edges,edge) end function addFace(v1,v2,v3) face={ a={x=v1.x,y=v1.y,z=v1.z}, b={x=v2.x,y=v2.y,z=v2.z}, c={x=v3.x,y=v3.y,z=v3.z} } table.insert(faces,face) end function addVerts(verts,pivot,size,rAxis,angle) p=pivot s=size x=rAxis a=angle res={} for k,v in ipairs(verts)do x0,y0,z0=v[1]*s[1],v[2]*s[2],v[3]*s[3] x0,y0,z0=x0+x[1],y0+x[2],z0+x[3] x1,y1,z1=rotate(x0,y0,z0,a[1]) x2,y2,z2=rotate(y1,z1,x1,a[2]) x3,y3,z3=rotate(z2,y2,x2,a[3]) vx=x3+p[1] vy=y3+p[2] vz=z3+p[3] table.insert(res,addVert(vx,vy,vz,fov)) end return res end function addEdges(verts,edges) for k,v in ipairs(edges)do addEdge(verts[v[1]],verts[v[2]]) end end function addFaces(verts,faces) for k,v in ipairs(faces)do addFace(verts[v[1]],verts[v[2]],verts[v[3]]) end end function TIC() cls() --red pallet for i=0,15 do poke(0x3fc0+(i*3),i*15) poke(0x3fc1+(i*3),i^1.5) poke(0x3fc2+(i*3),i^1.5) end cubeVerts={ {-1,-1,-1}, { 1,-1,-1}, {-1, 1,-1}, { 1, 1,-1}, {-1,-1, 1}, { 1,-1, 1}, {-1, 1, 1}, { 1, 1, 1}, } cube=addVerts( cubeVerts, {0,0,-5}, {1,1,1}, {0,0,0}, {time()/900,time()/700,time()/600} ) addEdges(cube,{ {1,2},{2,4},{4,3}, {3,1},{5,6},{6,8}, {8,7},{7,5},{1,5}, {2,6},{4,8},{3,7}, }) addFaces(cube,{ {1,3,4},{1,4,2}, {2,4,8},{2,8,6}, {6,8,7},{6,7,5}, {5,7,3},{5,3,1}, {3,7,8},{3,8,4}, {6,5,1},{6,1,2} }) colors={ 02,02, 09,09, 02,02, 09,09, 06,06, 06,06, } table.sort(faces,function(t1,t2) local a=(t1.a.z+t1.b.z+t1.c.z)/3 local b=(t2.a.z+t2.b.z+t2.c.z)/3 return a