voila un éxemple : on crée des boules de façon très mathématique, sans utiliser les Meshes.
Le probléme c'est que les calculs sont affreusement long à faire, mais ne bloque pas le code, ni n'augmenter l'utilisation de la mémoire Ram (sauf au chargement .. et encore !)
Source / Exemple :
Public d As Single, e As Single, f As Single, z As Single, g As Single
Dim Mat(300, 2, 12), Mat2(300, 2, 12), Mat3(300, 2, 12), Mat4(300, 2, 12), Mat5(300, 2, 12)
Dim OrBiTes(1000, 2, 4), OComPte(4), OCompTe2(4)
Dim Pos(2, 5)
Public CentreX As Single, CentreZ As Single, CentreY As Single
Public CentreX1 As Single, CentreZ1 As Single, CentreY1 As Single
Public CentreX2 As Single, CentreZ2 As Single, CentreY2 As Single
Public CentreX3 As Single, CentreZ3 As Single, CentreY3 As Single
Public CentreX4 As Single, CentreZ4 As Single, CentreY4 As Single
Public PosPa, PosPb, PosPc, PosPd, PosA As Single
Private Sub Command1_Click()
If Not Init3D() Then Exit Sub
bActif = True
Rendu
End Sub
Private Sub Command3_Click()
Timer1.Enabled = False
End Sub
Private Sub Form_Load()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''le form load'''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''
d = -2756
e = 180.24
f = 639
g = 500
angle = 37.64
CentreX = Rnd * 1600
l = Int(Rnd)
If l = 0 Then CentreX = CentreX * -1
CentreZ = Rnd * 1600
l = Int(Rnd)
If l = 0 Then CentreZ = CentreZ * -1
CentreX1 = Rnd * 1600
l = Int(Rnd)
If l = 0 Then CentreX1 = CentreX1 * -1
CentreZ1 = Rnd * 1600
l = Int(Rnd)
If l = 0 Then CentreZ1 = CentreZ1 * -1
CentreX2 = Rnd * 1600
l = Int(Rnd)
If l = 0 Then CentreX2 = CentreX2 * -1
CentreZ2 = Rnd * 1600
l = Int(Rnd)
If l = 0 Then CentreZ2 = CentreZ2 * -1
CentreY = Rnd * 800: CentreY1 = Rnd * 800: CentreY2 = Rnd * 800
Pos(0, 0) = CentreX: Pos(0, 1) = CentreZ
Pos(1, 0) = CentreX1: Pos(1, 1) = CentreZ1
Pos(2, 0) = CentreX2: Pos(2, 1) = CentreZ2
Pos(0, 2) = Int(Rnd * 120): Pos(1, 2) = Int(Rnd * 120): Pos(2, 2) = Int(Rnd * 120) 'distance au choix
Pos(0, 3) = Int(Rnd * 360): Pos(1, 3) = Int(Rnd * 360): Pos(2, 3) = Int(Rnd * 360) 'angle au choix
Pos(0, 4) = Int(Rnd * 4): Pos(1, 4) = Int(Rnd * 4): Pos(2, 4) = Int(Rnd * 4) 'position au choix
Pos(0, 5) = Int(Rnd * 10): Pos(1, 5) = Int(Rnd * 10): Pos(2, 5) = Int(Rnd * 10) 'orientation
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 38 Then
d = d + Cos(angle) * 10
e = e + Sin(angle) * 10
End If
If KeyCode = 40 Then
d = d - Cos(angle) * 10
e = e - Sin(angle) * 10
End If
If KeyCode = 39 Then
angle = angle - 0.02
If angle <= 0 Then angle = angle + 360
End If
If KeyCode = 37 Then
angle = angle + 0.02
If angle >= 360 Then angle = angle - 360
End If
If KeyCode = 33 Then
f = f + 5
End If
If KeyCode = 34 Then
f = f - 5
End If
Label1.Caption = "d : " & d & "e : " & e & " f : " & f & "angle : " & angle
MatrIces d, f, e, angle
End Sub
Private Sub Form_Unload(Cancel As Integer)
Debug.Print "Fermeture en cours"
bActif = False
Rendu
End Sub
Private Sub Command2_Click()
d = -2756
e = 180.24
f = 639
g = 500
angle = 37.64
MatrIces d, f, e, angle
Call OrBite
Timer1.Enabled = True
CadreMat = False
End Sub
Private Sub OrBite()
Dim Rayon, Hauteur As Single, RayonG As Single, HauteurTotal As Single
Dim ComPte, angleR, Pi As Single, AnGleR2 As Single
Dim x As Single, y As Single, z As Single
Dim TaCc As Single, Nc As Single
Pi = 3.14159265
AnGleR2 = 0.05
angleR = 0
OComPte(0) = 0
Rayon = 700
y = 250
Do While angleR < 2 * Pi
x = Cos(angleR) * Rayon + 0
z = Sin(angleR) * Rayon + 0
angleR = angleR + AnGleR2
OrBiTes(OComPte(0), 0, 0) = x
OrBiTes(OComPte(0), 1, 0) = y
OrBiTes(OComPte(0), 2, 0) = z
MatriXligneS2 x, y, z, 0
OComPte(0) = OComPte(0) + 1
Loop
OComPte(0) = OComPte(0) - 1
AnGleR2 = 0.04
angleR = 0
OComPte(1) = 0
Rayon = 1200
y = 250
Do While angleR < 2 * Pi
x = Cos(angleR) * Rayon + 0
z = Sin(angleR) * Rayon + 0
angleR = angleR + AnGleR2
etc ..
Conclusion :
Le reste est dans le Zip
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.