Classe pour l'utilisation de ogre et newton

Description

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

Codes Sources

A voir également

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.