Comme promis dans mon source précédent, voici la classe permettant de réutiliser de manière simple la gestion de la 3D et de la physique sous .NET
Merci de me laisser vos commentaires et apréciation et n'hésitez pas à me contacter si vous voulez en discuter.
Le ZIP contient un fichier d'aide.
Source / Exemple :
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
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.