|
'World-Koordinaten der Boxen verändern
For i = 0 To UBound(BOXEN())
BOXEN(i).Rotate = BOXEN(i).Rotate + BOXEN(i).RotateStep
If BOXEN(i).Rotate > 360 Then BOXEN(i).Rotate = 0
Select Case BOXEN(i).Direction
Case 0:
BOXEN(i).WorldPos.y = BOXEN(i).WorldPos.y + 1
If BOXEN(i).WorldPos.y > 300 Then BOXEN(i).Direction = 1
Case 1:
BOXEN(i).WorldPos.y = BOXEN(i).WorldPos.y - 1
If BOXEN(i).WorldPos.y < -300 Then BOXEN(i).Direction = 0
End Select
DX7.IdentityMatrix BOXEN(i).WorldMatrix
TranslateMatrix BOXEN(i).WorldMatrix, BOXEN(i).WorldPos
Next
Public Sub Render3D()
Dim helpMatrix(1) As D3DMATRIX
Dim i As Integer, j As Integer
'Hilfsmatrix initialisieren
For i = 0 To 1
DX7.IdentityMatrix helpMatrix(i)
Next
Device.Clear 1, ClearRec(), _
D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, _
DX7.CreateColorRGBA(0#, 0#, 0#, 1), 1, 0
Device.BeginScene
'Restliche Welt "normal" rendern
Device.SetTransform D3DTRANSFORMSTATE_WORLD, helpMatrix(0)
Call Device.SetTexture(0, texTextur(0))
'TexturKoordinaten ausserhalb der Textur werden nicht gespiegelt
Call Device.SetTextureStageState( _
0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)
'Bilinearen Texturfilter verwenden, damit die Textur nicht
' so grob gerastert wird
Call Device.SetTextureStageState( _
0, D3DTSS_MAGFILTER, D3DTFG_LINEAR)
Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
vxSkyBox(0), 36, D3DDP_WAIT)
For j = 0 To UBound(BOXEN())
'Textur für Box setzen
Call Device.SetTexture(0, texTextur(BOXEN(j).Textur))
'Objekt-Koordinaten in der WorldMatrix setzen
For i = 0 To 1
DX7.IdentityMatrix helpMatrix(i)
Next i
'Die World-Matrix der Box transformieren
Device.SetTransform _
D3DTRANSFORMSTATE_WORLD, BOXEN(j).WorldMatrix
'HilfsMatrix in den Mittelpunkt der Box schieben
TranslateMatrix helpMatrix(1), BOXEN(j).Mittelpunkt
'Boxen entsprechend drehen
Select Case BOXEN(j).Achse
Case "X"
RotateXMatrix helpMatrix(0), BOXEN(j).Rotate * PI / 180
Case "Y"
RotateYMatrix helpMatrix(0), BOXEN(j).Rotate * PI / 180
Case "Z"
RotateZMatrix helpMatrix(0), BOXEN(j).Rotate * PI / 180
End Select
'Hilfsmatrizen miteinander multiplizieren
helpMatrix(1) = RetMatrixMult(helpMatrix(1), helpMatrix(0))
'Änderungen der World-Matrix der Box durchführen
Device.MultiplyTransform D3DTRANSFORMSTATE_WORLD, helpMatrix(1)
'Box rendern
Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, _
D3DFVF_LVERTEX, BOXEN(j).vxBox(0), 36, D3DDP_WAIT)
Next j
Device.EndScene
End Sub
|
|