0 Members and 1 Guest are viewing this topic.
Quote from: Loulou 54 on September 24, 2011, 01:59:28 pmQuotebut I have to train with 3Dlol %)Er... What's fun ?
Quotebut I have to train with 3Dlol %)
but I have to train with 3D
How do you use this library? Like, how should you store the data to render a 3D object?
--Lua Tiny3D - By Loic Pujetfunction multiplyMatrix(matrix,vector) local x=matrix[1][1]*vector[1]+matrix[1][2]*vector[2]+matrix[1][3]*vector[3] local y=matrix[2][1]*vector[1]+matrix[2][2]*vector[2]+matrix[2][3]*vector[3] local z=matrix[3][1]*vector[1]+matrix[3][2]*vector[2]+matrix[3][3]*vector[3] return x,y,zendfunction rotate(vertices,angle,x,y,z) local sum=x+y+z x,y,z=x/sum,y/sum,z/sum local c,s=math.cos(angle),math.sin(angle) local matrix={{x*x+(1-x*x)*c,x*y*(1-c)-z*s,x*z*(1-c)+y*s},{x*y*(1-c)+z*s,y*y+(1-y*y)*c,y*z*(1-c)-x*s},{x*z*(1-c)-y*s,y*z*(1-c)+x*s,z*z+(1-z*z)*c}} for i,e in pairs(vertices) do vertices[i]={multiplyMatrix(matrix,e)} endendfunction translate(vertices,x,y,z) for i,e in pairs(vertices) do vertices[i]={e[1]+x,e[2]+y,e[3]+z} endendfunction scale(vertices,x,y,z) for i,e in pairs(vertices) do vertices[i]={e[1]*x,e[2]*y,e[3]*z} endendfunction width() return platform.window:width() endfunction height() return platform.window:height() endfunction reverseTable(tbl) local tbl2={} for i,e in ipairs(tbl) do tbl2[#tbl-i+1]=e end return tbl2endfunction replaceFaces(tbl1,tbl2,faces) local faces2={} for i,e in pairs(tbl1) do for j,e2 in pairs(tbl2) do if e2 then if e==e2 then table.insert(faces2,faces[j]) tbl2[j]=nil end end end end return reverseTable(faces2)endfunction sortFaces(vertices,faces) local faces2,distTbl,facesTbl={},{},{} local middle={} local dist,xsum,ysum,zsum=0,0,0,0 for i,e in pairs(faces) do xsum,ysum,zsum=0,0,0,0 for j,e2 in pairs(e) do xsum,ysum,zsum=xsum+vertices[e2][1],ysum+vertices[e2][2],zsum+vertices[e2][3] end middle={xsum/#e,ysum/#e+5,zsum/#e} dist=math.sqrt(middle[1]*middle[1]+middle[2]*middle[2]+middle[3]*middle[3]) table.insert(distTbl,dist) table.insert(facesTbl,dist) end table.sort(distTbl) return replaceFaces(distTbl,facesTbl,faces)endfunction renderFaces(gc,vertices,faces,pos,mode,color) local polygon={} local faces2=sortFaces(vertices,faces) for i,e in pairs(faces2) do polygon={} drawPoly=true for j,f in pairs(faces2[i]) do if not pos[f] then drawPoly=false else table.insert(polygon,pos[f][1]) table.insert(polygon,pos[f][2]) end end if drawPoly then table.insert(polygon,pos[faces2[i][1]][1]) table.insert(polygon,pos[faces2[i][1]][2]) if mode==4 or mode==5 then gc:setColorRGB(color[1],color[2],color[3]) gc:fillPolygon(polygon) end if mode==2 or mode==3 or mode==4 then gc:setColorRGB(0,0,0) gc:drawPolyLine(polygon) end end endendfunction renderVertices(gc,pos) gc:setColorRGB(0,0,0) for i,e in pairs(pos) do if e then gc:fillRect(e[1]-1,e[2]-1,3,3) end endendfunction render(gc,vertices,faces,mode,color) local yDist,pos=0,{} for i,e in pairs(vertices) do if e[2]>-5 then yDist=5/(e[2]+5) table.insert(pos,{e[1]*yDist*25+width()/2,height()/2-e[3]*yDist*25}) else table.insert(pos,false) end end if mode==1 or mode==2 then renderVertices(gc,pos) end if mode==2 or mode==3 or mode==4 or mode==5 then renderFaces(gc,vertices,faces,pos,mode,color) endend
cubeVertices={{0,0,0},{1,0,0},{1,1,0},{0,1,0},{0,0,1},{1,0,1},{1,1,1},{0,1,1}}cubeFaces={{1,2,3,4},{1,2,6,5},{2,3,7,6},{3,4,8,7},{4,1,5,8},{5,6,7,8}}color={200,200,200}function on.paint(gc) render(gc,cubeVertices,cubeFaces,4,color)end
Quote from: Chockosta on September 24, 2011, 10:09:44 amOn my Clickpad.Which one is the slowest ?The CX =)Computer Software > ClickPad/TouchPad > CX
On my Clickpad.Which one is the slowest ?