Bonjour

J'ai créé une classe en VB 2008 permettant de créer rapidement des applications tirant profit de OGRE et Newton.

Elle en est à ses début et intègre les fonctions de bases : rendu, déplacement de la caméra avec ou sans détection de collisions.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# Exemple d'utilisation :
#
# Il vous faudra créer une form avec les différents contrôles requis. De même, il vous faudra une scène exportée par oFusion. Si vous désirez que je vous fournisse le code souce complet, écrivez moi je ne vais pas le déposer ici.
#
# Public Class frmclOgre
#
# 'Example d'application pour l'utilisation de la classe clOgre
# 'Cette form implémente l'utilisation de la classe et quelques manipulations possibles.
#
# Private myOgre As New clOgre.clOgre 'Instanciation de la classe
#
# Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
#
# 'Pour charger des ressources supplémentaires :
#
# 'Dim tabRessourses(1) As String
# 'tabRessourses(0) = "M:\DevMOGRE\Scenes\Gymnase\GymnaseMaps.zip|Zip" 'Même définition que le ressource manager (Zip, FileSystem...)
# 'tabRessourses(1) = "M:\DevMOGRE\Scenes\Gymnase\GymnaseMeshes.zip|Zip"
# 'tabRessourses(1) = "M:\DevMOGRE\Scenes\Gymnase|FileSystem"
# 'myOgre.RessourcesToLoad = tabRessourses
#
# 'Les affectations suivantes permmettent de gérer l'annulation du keypress dans les différents contrôles de la form
# AddHandler trkCameraHeight.KeyDown, AddressOf AnnuleKeyPress
# AddHandler trkMoveFactor.KeyDown, AddressOf AnnuleKeyPress
# AddHandler trkTimeFactor.KeyDown, AddressOf AnnuleKeyPress
# AddHandler cboCameras.KeyDown, AddressOf AnnuleKeyPress
# AddHandler chkDebugOnOff.KeyDown, AddressOf AnnuleKeyPress
# AddHandler chkSphereOnOff.KeyDown, AddressOf AnnuleKeyPress
#
#
# myOgre.Init = True 'Nécessaire pour signaler le début d'initialisation à la classe
# myOgre.TopWindowHandle = Me.Handle 'Le handle de la TopWindow pour le InputHandler OIS (cf. DirectX)
# myOgre.RenderWindowHandle = panRender.Handle 'Le contrôle dans lequel se fera le rendu
# myOgre.osmSceneName = "M:\DevMOGRE\Scenes\Kites\Kites.osm" 'Le nom de la scène à charger...
# myOgre.MoveFactor = 300 'Le facteur de déplacement
#
# myOgre.ShowInfo = True 'On montre la form d'attente
# 'myOgre.CollisionDetection = False 'Pour ne pa gérer les collisions
# 'myOgre.GravityOn = False 'Pour ne pas gérer la pesanteur
#
# myOgre.CameraSize = New Mogre.Vector3(10, 70, 10) 'La taille du body de la caméra
# myOgre.RotateFactor = 1.5F 'le facteur de rotations
# myOgre.Application = My.Application 'On passe l'objet My.application pour le doEvents
# myOgre.StartupPath = Application.StartupPath 'Le chemin de l'appli pour le chargement des axes
# myOgre.NewtonUpdateFps = 60 'Newton sera updaté toutes les 60 images
# If myOgre.InitOgre() Then 'On peut initialiser Ogre
# If myOgre.InitScene() Then 'Et la scène
# Else
# 'Aï, un truc ne va pas
# MsgBox("Erreur d'initialisation de la scène", MsgBoxStyle.Critical, "Erreur critique")
# Exit Sub
# End If
# Else
# 'Pareil
# MsgBox("Erreur d'initialisation OGRE", MsgBoxStyle.Critical, "Erreur critique")
# Exit Sub
# End If
# 'On applique des ombres
# myOgre.OgreSceneManager.ShadowTechnique = Mogre.ShadowTechnique.SHADOWTYPE_STENCIL_MODULATIVE
# myOgre.OgreSceneManager.ShadowColour = New Mogre.ColourValue(0.8, 0.8, 0.8, 1.0)
#
# 'Parcourt du RootSceneNode pour détecter les caméras de la scène et les ajouter à la comboBox
# Dim Fils As Mogre.SceneNode = Nothing
# For i As UShort = 0 To myOgre.OgreSceneManager.RootSceneNode.NumChildren - 1
# Try
# Fils = myOgre.OgreSceneManager.RootSceneNode.GetChild(i)
#
# If Fils.GetAttachedObject(CType(0, UShort)).MovableType = "Camera" Then
# cboCameras.Items.Add(Fils.Name)
# End If
# Catch ex As Exception
# 'En erreur si le MovableType ne peut être déterminé
# End Try
# Next
# Fils.Dispose()
# myOgre.Init = False 'On a fini l'init
# Me.Show() 'on montre la form
#
# myOgre.OgreGo() 'et on lance la boucle de rendu
#
# End Sub
#
# Private Sub trkMoveFactor_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles trkMoveFactor.Scroll
#
# 'Change la vitesse de déplacement
#
# myOgre.MoveFactor = trkMoveFactor.Value
#
# End Sub
#
# Private Sub trkTimeFactor_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles trkTimeFactor.Scroll
#
# 'Change le Time Factor
#
# myOgre.NewtonTimeFactor = trkTimeFactor.Value
# End Sub
#
# Private Sub trkCameraHeight_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles trkCameraHeight.Scroll
# 'Change la hauteur de la caméra active
#
# myOgre.CameraSize = New Mogre.Vector3(10, trkCameraHeight.Value, 10)
# End Sub
#
# Private Sub cboCameras_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboCameras.SelectedIndexChanged
#
# 'Permet de sélectionner une caméra de la scène (s'il y en a plusieurs)
#
# myOgre.SelectCamera(cboCameras.SelectedItem, True)
# End Sub
#
# Private Sub AnnuleKeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
# 'Cette procédure permet d'annuler la détection d'appui sur une touche dans un contrôle
# 'Elle est utile lors du déplacement de la caméra afin que le contôle ayant le focus ne
# 'soit pas modifié par la touche de déplacement pressée
#
# e.SuppressKeyPress = True
# End Sub
#
#
# Private Sub panRender_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles panRender.MouseUp
#
# 'On termine le déplacement
#
# myOgre.Moving = False
# End Sub
#
# Private Sub panRender_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles panRender.Resize
#
# 'Le pannel change de taille, la fenêtre de rendu Ogre aussi...
#
# myOgre.ReSize()
# End Sub
#
# Private Sub panRender_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles panRender.MouseDown
#
# 'On commence le déplacement, Moving passe à true
#
# myOgre.Moving = True
#
# End Sub
#
# Private Sub chkDebugOnOff_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDebugOnOff.CheckedChanged
#
# 'Montre ou cache les infos de debug Newton
#
# If chkDebugOnOff.Checked Then
# myOgre.DebugOnOff = True
# Else
# myOgre.DebugOnOff = False
# End If
# End Sub
#
# Private Sub chkSphereOnOff_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSphereOnOff.CheckedChanged
# 'Montre ou cache la sphère
#
# If chkSphereOnOff.Checked Then
# myOgre.OgreSceneManager.GetSceneNode("SphereCV").GetAttachedObject("SphereCV").Visible = False
# Else
# myOgre.OgreSceneManager.GetSceneNode("SphereCV").GetAttachedObject("SphereCV").Visible = True
# End If
#
# End Sub
# End Class
Comme c'est une dll, elle peut-être utiliser sous un autre langage.

Je tiens à disposition un source montrant par l'exemple comment s'en servir.

Si elle peut rendre service à certain, profitez en bien.