määä aattelin olla hassu lammas (:D) ja säädin hienon 3D moottori roottorin joka ei osaa näyttää ku ääriviivat. Osaaks joku auttaa että se näyttäis vaan ne tahkokset mitkä on edessä eikä niitä takana näkyviä viivoja ja että täyttäis vaikka jollain värillä ne? antti ainakin on säätänyt sen yhen coodivinkin missä on tätäki upeempaa rotaatiota varmaa osaa. en tykkää käytellä sitä ku siitä ei tajuu mitää ja ite tehty on aina paras :P ohessa esimerkki soodi 3dstä vähän riisuttu versio. helppo soveltaa... juu mää voisin säätää tästä joskus koodivinkin... tää o nii hieno :P
'Joo, kolmedeetä... Private Type Crdnt X As Long Y As Long Z As Long End Type Private Type CrdLine StartP As Crdnt EndP As Crdnt End Type Const pi = 3.14159265368979 Private c(100) As CrdLine, crds As Integer Private rx, ry, rz Private Sub Rot(RotX, RotY, RotZ, d, vx, vy, vz) Caption = "ROT X" & RotX & " Y" & RotY & " Z" & RotZ Cls For i = 0 To crds - 1 s1x = Calc(c(i).StartP, RotX, RotY, RotZ, vx, vy, vz, d, 0) s1y = Calc(c(i).StartP, RotX, RotY, RotZ, vx, vy, vz, d, 1) s2x = Calc(c(i).EndP, RotX, RotY, RotZ, vx, vy, vz, d, 0) s2y = Calc(c(i).EndP, RotX, RotY, RotZ, vx, vy, vz, d, 1) If i < 0 Then clr = RGB(0, 255, 0) Else clr = 255 Line (s1x, s1y)-(s2x, s2y), clr DoEvents Next End Sub Private Function Calc(pt As Crdnt, rtx, rty, rtz, vx, vy, vz, d, xvaiy) k = 10 WA = rtx * pi / 180 CA = Cos(WA): SA = Sin(WA) WB = rtz * pi / 180 CB = Cos(WB): SB = Sin(WB) WC = rty * pi / 180 CC = Cos(WC): SC = Sin(WC) ' x-akseli rotaatio X1 = pt.X Y1 = CA * pt.Y - SA * pt.Z Z1 = SA * pt.Y + CA * pt.Z ' y-akseli rotaatio X2 = CB * X1 - SB * Z1 Y2 = Y1 Z2 = SB * X1 + CB * Z1 ' z-akseli rotaatio X3 = CC * X2 - SC * Y2 Y3 = SC * X2 + CC * Y2 Z3 = Z2 ' shiftit X4 = X3 + vx Y4 = Y3 + vz Z4 = Z3 + vy ' ihme lasku jutska U = -X4 / (Y4 + 1) * d V = -Z4 / (Y4 + 1) * d ' screeni coordeiks xap = k * U + ScaleWidth / 2 yap = k * V + ScaleHeight / 2 If xvaiy Then Calc = yap Else Calc = xap End Function Private Sub AddLn(sx, sy, sz, ex, ey, ez) c(crds).StartP.X = sx c(crds).StartP.Y = sy c(crds).StartP.Z = sz c(crds).EndP.X = ex c(crds).EndP.Y = ey c(crds).EndP.Z = ez crds = crds + 1 End Sub Private Sub AddCube(sx, sy, sz, ex, ey, ez) AddLn sx, sy, sz, sx, sy, ez AddLn sx, sy, sz, sx, ey, sz AddLn sx, sy, sz, ex, sy, sz AddLn ex, ey, ez, ex, ey, sz AddLn ex, ey, ez, ex, sy, ez AddLn ex, ey, ez, sx, ey, ez AddLn sx, ey, sz, ex, ey, sz AddLn ex, ey, sz, ex, sy, sz AddLn ex, sy, sz, ex, sy, ez AddLn sx, sy, ez, ex, sy, ez AddLn sx, ey, sz, sz, ey, ez AddLn sx, sy, ez, sx, ey, ez End Sub Private Sub Form_activate() AddCube -250, -250, -250, 250, 250, 250 End Sub Private Sub Timer1_Timer() rx = rx + 1 ry = ry + 2 rz = rz + 3 Rot rx, ry, rz, 1000, 0, 0, -1500 End Sub
Mjaah, jos fillattua systeemiä meinaa värkätä niin kannattanee ainakin tallennella objektit mieluummin läjänä polygoneja. Takana näkyvät viivatkin taitavat sitten poistua samalla kun joko sorttaa ne polyt tai pistää backface-cullingia.
njääh, liian monimutkaista mulle...
Aihe on jo aika vanha, joten et voi enää vastata siihen.