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 SubMjaah, 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.