"ABSOLUTE BEGINNER"
Finalité :
"Le moteur FrameWork3D.Net Affiche un rectangle"
Thème :
"Viewport3D/ModelVisual3D"
Objet :
- Traduction du rectangle de Petzold en Basic
- Sauvegarde des mailles du rectangle sur le bureau
Rubriques :
.Content
/Model3DGroup/AmbientLight
/Model3DGroup/GeometryModel3D.Geometry/MeshGeometry3D
/Model3DGroup/GeometryModel3D.Material
/Model3DGroup/GeometryModel3D.BackMaterial
Application :
Implémentation d'une structure de classes imbriquées en Visual Basic
Développements :
Chorégraphiques & Animation vectorielle sur un rythme de Nicolaïev.
(Shaffle step hop step toe)
Lorsque le générateur d'enveloppes est sorti de mon clavier brûlant, j'ai réalisé que je ne savait pas afficher de rectangle ni de fenêtre. Quand l'information est l'objet principal d'une application, il est préférable de se reposer sur la qualité des données au moment de vérifier le bon fonctionnement des manipulations.
Cette étude simple et courte, nous servira d'exemple pour enregistrer des "filets de mailles" au format du "moteur triD" du net qui affiche directement l'image quand on clique sur l'icône du script. Le fichier généré portera une extension .xalm qui permettra à Windows de le signaler au moteur d'affichage du Net. Nous générerons le fichier d'essai .xalm de flux de type texte sur le bureau par exemple.
Cet essai s'accompagne d'un effort sémantique pour élaborer une structure de mots Français qui feront redondance aux expressions Anglo-Saxonnes pas trop difficiles à oublier. Ceux qui travaillent avec un clavier AZERTY seront obligés de raisonner de droite à gauche car c'est plus facile de frapper "0 < variable" quand la variable est plus grande que zéro.
Comme le moteur 3D de Windows sert Fondamentalement à présenter des fenêtres en perspective, on l'appelle tout simplement Windows Présentation Fondation par ses initiales: WPF. Ses fichiers de codes sont fait pour internet et bien balisés: Le code s'apelle xalm. C'est un code inspiré de Htlm, mais si les fichiers de données sont séparées des codes de traitement, et donc plus facile à lire dans le texte. Ils conservent leur structure hièrarchique à l'intèrieur des balises.
Le rectangle de Petzold est un programme xalm très simple, et quand on l'aura généré en basic, je parie qu'on pourra faire plus compliqué sans le consulter. Il faudra faire un didacticiel pour les animations, mais c'est pas du niveau "Absolute beginner". Il faudrait préalablement connaitre la structure des objets immobiles que nous étudions ici.
Une application xalm 3D, c'est comme de regarder une scène de spectacle par une brèche de la salle de cinéma: On reconstruit pas toujours le relief.
Beaucoup de code et peu de commentaires: Le résultat c'est qu'il faut le refaire.
Un fichier xaml commence toujours avec une référence qui ressemble à une adresse internet, mais fonctionne localement. C'est un autre aspect de la logique Microsoft. on peut l'encapsuler facilemant dans un objet Basic, et on en profitera pour écrire le titre qu'une seule fois.
Tout d'abord, la Page est soigneusement encapsulée.
Class xaml . 'Une application xalm c'est comme un film
Puis vient le tour de la bordure
Class Application
Class Grand_Angle 'Perspective
La Classe Grand Angle va gérer les effets de perspective.
Class triPot 'Point3D
Le Rectangle de Petzold est un beau quadrilatère Plat dont les quatre coins A,B,C et D ont pour coordonnées: A(0,1,-4), B(0,0,-4), C(0,1,0) et D(0,0,0).
soit un beau rectangle perpendiculaire à l'abscisse
Ce qui donne, en Basic:
' Dim A As New triPot(0, 1, -4) Dim B As New triPot(0, 0, -4) Dim C As New triPot(0, 1, 0) Dim D As New triPot(0, 0, 0)
Class Filet 'GeometryModel3D
Class Maille 'GeometryModel3D.Geometry
Comme chaque point d'un objet plat est fatalement lié à deux autres au moins, et comme la surface est le minimum que nous voyons, et comme c'est si simple de développer des algorithmes pour relier chaque nouveau point aux deux précédents pour automatiser la génération des filets de mailles de points, fatalement, on a construit toute la tri-D autour de ce concept. Il est évident que les paires d'équations planes liées par un paramètres généreront les points de l'avenir, mais en attendant, nous construirons des volumes fastidieux en déformant des enveloppes numériques de base.
Class Brin 'GeometryModel3D.Material
Class Corde 'GeometryModel3D.BackMaterial
On aura remarqué la petite fonction texte qui qui va générer d'objet en objet le fichier objet de la démonstration. En poursuivant l'analyse croissante du fichier, on voit que les enveloppes de points sont intégrées dans un canevas dont les couleurs du brin et de la trame sont déterminés par "Cyan" et "red". Le simple fait que ces paramètres mobilisent des bornes laisse entrevoir d'innombrable possibilités de développement de ces éléments auquel je dédie des objets, même si , pour le moment, nous nous contentons de faire transiter nos paramètres: C'est plus facile d'analyser une grande structure vide qu'une petite grosse bien remplie.
Class Sommet
Le Moteur d'affichage va récupérer chacun des trois sommets de chacun des triangles qui enveloppent le volume dans une liste de triolets d'index des triangles. J'explique: Le rectangle est coupé en 2 sur une diagonale pour faire deux triangles de part et d'autre. Petzold redistribue les index 0 1 2 et 1 2 3, qui ont un et deux en commun, ce qui fait deux diagonales 1,2 et 0,3 soit AD et BC, On voit bien que l'ordonnée est la même pour A et C, où B et D.
' Dim T1 As New Sommet(0, 1, 2) Dim T2 As New Sommet(1, 3, 2)
Class Trinode 'MeshGeometry3D
Les points sont regroupés dans les listes de l'objet trinode
Les sommets sont enregistrés dans une liste de la même manière que les points.
Class Spectacle 'Model3DGroup
Class Ambiance 'AmbientLight
Enfin, la trame et la lumière d'ambiance sont réunis comme la scène et l'éclairage d'un spectacle dans un paramètre: "Model3DGroup". Cette encapsulation marque le passage de la modélisation, où profilage, C'est sans doute à ce niveau que l'animation s'intéressera à la chorégraphie et aux mouvements des décors alors que les objets précédents règleront le jeu des acteurs, isolations des danseurs, le style individuel, et les mouvements particuliers de chaque objet où personnage.
Class Sequence 'ModelVisual3D
Enfin l'analyse descendante réunira les éléments de la pièce dans un scénario pour faire le film :
Class Ouverture ' ViewPort
La séquence déplace l'action du plateau du tournage dans la salle. Il faut donner beaucoup de lumière au spectacle. Les objets élaborés dans ce didacticiel ne sont qu'une image de la structure du Net qui gère des liste et pas des structures individuelles, mais quand on possède la structure, c'est comme pour les bases de données: le reste n'est que déclarations laborieuses.
NOTE : Le programme principal ne devrait pas changer beaucoup, mais les objets sous-jacents ne sont pas encore compatibles avec mon générateur.
' Public Class Form1 Dim Rectangle As New xaml Dim A As New triPot(0, 1, -4) Dim B As New triPot(0, 0, -4) Dim C As New triPot(0, 1, 0) Dim D As New triPot(0, 0, 0) Dim T1 As New Sommet(0, 1, 2) Dim T2 As New Sommet(1, 3, 2) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load With Rectangle.Main.Regard.Salle.Plateau.Piece.Scene.Trame.Canevas .Points.Add(A) .Points.Add(B) .Points.Add(C) .Points.Add(D) .Triangles.Add(T1) .Triangles.Add(T2) End With Dim S = My.Computer.FileSystem.SpecialDirectories.Desktop _ & "/Essai.xaml" Rectangle.Print(S) End Sub End Class
Le résultat n'est pas très beau, mais ça marche. (extension.xaml)
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" WindowTitle="Rectangle" Title = "Rectangle" > <Border BorderBrush="Black" BorderThickness="1"> <Viewport3D> <ModelVisual3D> <ModelVisual3D.Content> <Model3DGroup> <GeometryModel3D> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="0 1 -4, 0 0 -4, 0 1 0, 0 0 0" TriangleIndices="0 1 2, 1 3 2" /> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <DiffuseMaterial Brush="Cyan" /> </GeometryModel3D.Material> <GeometryModel3D.BackMaterial> <DiffuseMaterial Brush="Red" /> </GeometryModel3D.BackMaterial> </GeometryModel3D> <AmbientLight Color="White" /> </Model3DGroup> </ModelVisual3D.Content> </ModelVisual3D> <Viewport3D.Camera> <PerspectiveCamera Position="-1 0 4" LookDirection="0 0 -1" UpDirection="0 1 0" FieldOfView="45" /> </Viewport3D.Camera> </Viewport3D> </Border> </Page>