Ce programme affiche des cubes applatis sur l'écran. Je l'aurais mis volontier dans les didacticiels pour débuter avec la tri-D, mais je préfère me consacrer à remplir l'espace autrement.
Source / Exemple :
Imports System.Windows.Media.Media3D
Module Main
Dim Toile As New Window
Dim Dock As New DockPanel
Dim test As New EssaiRectangle
Dim Appli As New Application()
Sub Main()
Toile.Content = Dock
Dock.Children.Add(test.Essai)
Appli.Run(Toile)
End Sub
Public Class EssaiRectangle
Public Essai As New Viewport3D
Public Cam As New PerspectiveCamera
Public Lumiere As New AmbientLight(Colors.White)
Public Eclairage As New ModelVisual3D
Public Volume As New ModelVisual3D
Public Rectangle As New GeometryModel3D
Public Color As New DiffuseMaterial(Brushes.Cyan)
Public Colorback As New DiffuseMaterial(Brushes.Red)
'Public Mailles As New MeshGeometry3D
Dim A As New Point3D(0, 1, -4)
Dim B As New Point3D(0, 0, -4)
Dim C As New Point3D(0, 1, 0)
Dim D As New Point3D(0, 0, 0)
Friend Sub New()
Eclairage.Content = Lumiere
With Cam
.Position = New Point3D(-1, 1, 6)
.LookDirection = New Vector3D(0, 0, -4)
.UpDirection = New Vector3D(0, 1, 0)
.FieldOfView = 45
End With
Dim Jeton As New Brique(Auquart)
Rectangle.Geometry = Jeton.Resille
Rectangle.Material = Color
Rectangle.BackMaterial = Colorback
Volume.Content = Rectangle
Essai.Camera = Cam
Essai.Children.Add(Eclairage)
Essai.Children.Add(Volume)
End Sub
End Class
Friend Auquart As New Point3D(-0.5, -0.5, -0.5)
''' <summary>Construction Orthogonale</summary>
Friend Class Brique
Friend Pos As Point3D
Friend Logr As Integer
Friend Haut As Integer
Friend Larg As Integer
Friend Sub New(ByVal Position As Point3D, _
Optional ByVal Longueur As Integer = 1, _
Optional ByVal Largeur As Integer = 1, _
Optional ByVal Hauteur As Integer = 1)
Pos = Auquart : Logr = Longueur : Larg = Largeur : Haut = Hauteur
End Sub
Friend Function Resille() As MeshGeometry3D
'Face inférieure
Dim Pos_1 As New Point3D(Pos.X, Pos.Y, Pos.Z + Larg)
Dim Pos_2 As New Point3D(Pos.X + Logr, Pos.Y, Pos.Z)
Dim Pos_3 As New Point3D(Pos.X + Logr, Pos.Y, Pos.Z + Larg)
'Face supérieure
Dim Pos_4 As New Point3D(Pos.X, Pos.Y + Haut, Pos.Z)
Dim Pos_5 As New Point3D(Pos.X + Logr, Pos.Y + Haut, Pos.Z)
Dim Pos_6 As New Point3D(Pos.X, Pos.Y + Haut, Pos.Z + Larg)
Dim Pos_7 As New Point3D(Pos.X + Logr, Pos.Y + Haut, Pos.Z + Larg)
'et les 4 dernières faces
Dim Triangles() As Integer = {4, 5, 6, 5, 6, 7, 0, 1, 2, 1, 2, _
3, 0, 2, 4, 2, 4, 5, 1, 3, 6, 3, 6, 7, 0, 1, 4, 1, 4, 6, 2, 3, 5, 3, 5, 7}
Dim M As New MeshGeometry3D
M.Positions.Add(Pos)
M.Positions.Add(Pos_1)
M.Positions.Add(Pos_2)
M.Positions.Add(Pos_3)
M.Positions.Add(Pos_4)
M.Positions.Add(Pos_5)
M.Positions.Add(Pos_6)
M.Positions.Add(Pos_7)
For i = 0 To 35
M.TriangleIndices.Add(Triangles(i))
Next i
Return M
End Function
End Class
End Module
Conclusion :
Après le rectangle, c'était trop tentant de passer tout de suite au cube. Je m'engage à amputer toutes les erreurs grotesques de ce programme si ça l'empêche pas d'afficher quelque chose et vous invite à m'envoyer les commentaires. je réléchis à la façon qu'on pourrait imbriquer des volumes à quatre faces triangulaires pour remplir l'espace avec autre chose que des ellipses. C'est comme raisonner en Booléen à trois état.
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.