Générateur 3d

Générateur 3d

Description du tutoriel

"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)

Introduction

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.

Présentation

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.

Le code

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>

Ce document intitulé « Générateur 3d » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous