IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

VB.NET et CsGL


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut VB.NET et CsGL
    Bonjour,

    j'essaye laborieusement d'utiliser Open GL avec VB.NET

    Après des essais infructueux avec OpenTK et Sharpgl je me suis tourné vers CsGL ; ça tombe bien ils montrent un exemple en VB.NET : http://www.windowsdevcenter.com/pub/...gl.html?page=1

    Mais je n'y arrive pas ; j'ai deux erreurs :

    Me.view.Dock = DockStyle.Fill => L'exeption System.TypeInitializationException s'est produite - Une exception a été levée par l'initialiseur de type pour 'CsGL.OSLib'.
    et

    Me.view.Refresh() => Opération inter-threads non valide : le contrôle '' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
    C'est très frustrant... des tas d'appli utilisent OpenGL, y compris en VB.NET, mais quand les sources sont disponibles je n'arrive pas à les ouvrir ou l’exécution sur mon PC (en VB.NET 2010 ou .NET 2015) plante

    Étonnant sur le net on trouve beaucoup de sources montrant comment utiliser OpenGL en VB6.

    Merci pour votre aide.

    Voici le code de la form :

    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
    Imports CsGL.OpenGL
    Public Class Visu3D
        Inherits System.Windows.Forms.Form
     
        Private view As myOpenGL.myView
        Private thrOpenGL As Threading.Thread
     
        Public Sub New()
            InitializeComponent()
     
            Me.view = New myOpenGL.myView()
            Me.view.Parent = Me
            'Me.view.Dock = DockStyle.Fill 'DECLENCHE UNE ERREUR :
            '                               L'exeption System.TypeInitializationException s'est produite - Une exception a été levée par l'initialiseur de type pour 'CsGL.OSLib'.
            Me.thrOpenGL = New Threading.Thread(AddressOf Me.OpenGL_Start)
            Me.thrOpenGL.Start()
        End Sub
     
        Private Sub OpenGL_Start()
            While 1 = 1
                Me.view.Refresh() 'Opération inter-threads non valide : le contrôle '' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
            End While
        End Sub
    End Class
     
    Namespace myOpenGL
        Public Class myView
            Inherits OpenGLControl
            Private Enum GLConstants
                GL_COLOR_BUFFER_BIT = &H4000
                GL_DEPTH_BUFFER_BIT = &H100
                GL_SMOOTH = &H1D01
                GL_DEPTH_TEST = &HB71
                GL_LEQUAL = &H203
                GL_PERSPECTIVE_CORRECTION_HINT = &HC50
                GL_NICEST = &H1102
                GL_PROJECTION = &H1701
                GL_MODELVIEW = &H1701
                GL_POLYGON = &H9
            End Enum
     
            Public Overrides Sub glDraw()
                GL.glClearColor(0.0, 0.0, 0.0, 0.0)
                GL.glClear( _
                  Convert.ToUInt32( _
                  GLConstants.GL_COLOR_BUFFER_BIT Or _
                  GLConstants.GL_DEPTH_BUFFER_BIT))
                GL.glLoadIdentity()
                '
                ' Fun begins
                '
                GL.glColor3f(1.0, 1.0, 1.0)
                GL.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0)
                GL.glBegin(Convert.ToUInt32(GLConstants.GL_POLYGON))
                GL.glVertex3f(0.25, 0.25, 0.0)
                GL.glVertex3f(0.75, 0.25, 0.0)
                GL.glVertex3f(0.75, 0.75, 0.0)
                GL.glVertex3f(0.25, 0.75, 0.0)
                GL.glEnd()
                GL.glFlush()
                '
            End Sub
     
            Protected Overrides Sub InitGLContext()
                GL.glShadeModel(Convert.ToUInt32(GLConstants.GL_SMOOTH))
                GL.glClearColor(0.0, 0.0, 0.0, 0.5)
                GL.glClearDepth(1.0)
                GL.glEnable(Convert.ToUInt32(GLConstants.GL_DEPTH_TEST))
                GL.glDepthFunc(Convert.ToUInt32(GLConstants.GL_LEQUAL))
                GL.glHint( _
                  Convert.ToUInt32( _
                    GLConstants.GL_PERSPECTIVE_CORRECTION_HINT), _
                    Convert.ToUInt32(GLConstants.GL_NICEST))
     
            End Sub
     
            Protected Overloads Sub OnSizeChanged(ByVal e As Object)
                Me.OnSizeChanged(e)
                Dim s As Size
                Dim aspect_ratio As Double
                s = Me.Size
                aspect_ratio = s.Width / s.Height
                GL.glMatrixMode(Convert.ToUInt32(GLConstants.GL_PROJECTION))
                GL.glLoadIdentity()
                GL.gluPerspective(45.0, aspect_ratio, 0.1, 100.0)
                GL.glMatrixMode(Convert.ToUInt32(GLConstants.GL_MODELVIEW))
                GL.glLoadIdentity()
            End Sub
     
            Protected Sub myView_OnKeyDown(ByVal Sender As Object, _
                       ByVal kea As System.Windows.Forms.KeyEventArgs) _
                       Handles MyBase.KeyDown
                If (kea.KeyCode = Keys.Escape) Then
                    Application.Exit()
                End If
            End Sub
        End Class
    End Namespace
    et celui de son designer (j'ai modifié une ligne marquée par '***)

    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
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Visu3D
        Inherits System.Windows.Forms.Form
     
        'Form remplace la méthode Dispose pour nettoyer la liste des composants.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
                Me.thrOpenGL.Abort() '***
            End Try
        End Sub
     
        'Requise par le Concepteur Windows Form
        Private components As System.ComponentModel.IContainer
     
        'REMARQUE*: la procédure suivante est requise par le Concepteur Windows Form
        'Elle peut être modifiée à l'aide du Concepteur Windows Form.  
        'Ne la modifiez pas à l'aide de l'éditeur de code.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.SuspendLayout()
            '
            'Visu3D
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(627, 519)
            Me.Name = "Visu3D"
            Me.Text = "Visu3D"
            Me.ResumeLayout(False)
     
        End Sub
    End Class

  2. #2
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Alors j'ai finalement réussit à faire fonctionner OpenTK avec VB.NET 2010

    Malheureusement je n'ai qu'un exemple très basique qui est loin de montrer toutes les fonctionnalités, et le site www.OpenTK.com est mort ; certes les fichiers sont disponibles sur GitHub mais malheureusement la doc et tous les messages des forums qui étaient sur les forums de discutions sur www.OpenTK.com ont disparus

    Pour ceux d'entre vous qui utilisent OpenTK : avez-vous encore la doc ?

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Pourquoi la lib CsGL alors que tu as SharpGL avec un control- OpenGLControl- à dropper (au lieu d'un custom control à mettre au point)....

    Pour installer SharpGL dans le concepteur VS tu télécharge SharpGL (voir Outils->Gestionnaire des extensions ->Extensions en ligne et rechercher SharpGL)
    Il est téléchargé par défaut dans ce dossier: C:\Users\electroremy\AppData\Local\Microsoft\VisualStudio\10.0\Extensions
    Redemarrer VisualStudio
    2 projets templates sont disponibles : Winform CSharp et Wpf...

    1/Tu crée un projet un projet Winform CSharp
    Tu génères et exécute .il affiche une pyramide en rotation comme exemple...


    2/ Tu ajoutes un projet Winform VB
    - tu glisses le dossier Dependencies du projet Winform CSharp vers ton projet VB.Ce dossier contient les dll nécessaires de SharpGL
    - tu ajoutes une référence aux 3 dll du dossier Dependencies (la copie VB) dans ton projet VB

    - pour avoir le control OpenGLControl dans la boite à outils du projet VB,tu fais
    Boites Outils ->Choisir les elements ->Parcourir ...& tu piques la dll SharpGL.dll dans ton dossier Dependencies (la copie VB)

    3/ tu droppes le control OpenGLControl sur ton form VB

    code exemple versus VB de la pyramide :

    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
     
    Imports SharpGL
     
    Public Class Form1
        Public Sub New()
            InitializeComponent()
     
            Me.OpenGLControl1.Dock = DockStyle.Fill
            Me.OpenGLControl1.BorderStyle = BorderStyle.FixedSingle
        End Sub
     
     
        Private Sub OpenGLControl1_OpenGLDraw(ByVal sender As System.Object, ByVal args As SharpGL.RenderEventArgs) Handles OpenGLControl1.OpenGLDraw
            'Get the OpenGL object.
            Dim gl As OpenGL = OpenGLControl1.OpenGL
     
            'Clear the color and depth buffer.
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT Or OpenGL.GL_DEPTH_BUFFER_BIT)
     
            'Load the identity matrix.
            gl.LoadIdentity()
     
            'Rotate around the Y axis.
            gl.Rotate(rotation, 0.0F, 1.0F, 0.0F)
     
            'Draw a coloured pyramid.
            gl.Begin(OpenGL.GL_TRIANGLES)
            gl.Color(1.0F, 0.0F, 0.0F)
            gl.Vertex(0.0F, 1.0F, 0.0F)
            gl.Color(0.0F, 1.0F, 0.0F)
            gl.Vertex(-1.0F, -1.0F, 1.0F)
            gl.Color(0.0F, 0.0F, 1.0F)
            gl.Vertex(1.0F, -1.0F, 1.0F)
            gl.Color(1.0F, 0.0F, 0.0F)
            gl.Vertex(0.0F, 1.0F, 0.0F)
            gl.Color(0.0F, 0.0F, 1.0F)
            gl.Vertex(1.0F, -1.0F, 1.0F)
            gl.Color(0.0F, 1.0F, 0.0F)
            gl.Vertex(1.0F, -1.0F, -1.0F)
            gl.Color(1.0F, 0.0F, 0.0F)
            gl.Vertex(0.0F, 1.0F, 0.0F)
            gl.Color(0.0F, 1.0F, 0.0F)
            gl.Vertex(1.0F, -1.0F, -1.0F)
            gl.Color(0.0F, 0.0F, 1.0F)
            gl.Vertex(-1.0F, -1.0F, -1.0F)
            gl.Color(1.0F, 0.0F, 0.0F)
            gl.Vertex(0.0F, 1.0F, 0.0F)
            gl.Color(0.0F, 0.0F, 1.0F)
            gl.Vertex(-1.0F, -1.0F, -1.0F)
            gl.Color(0.0F, 1.0F, 0.0F)
            gl.Vertex(-1.0F, -1.0F, 1.0F)
            gl.End()
     
            'Nudge the rotation.
            rotation += 3.0F
        End Sub
     
        Private Sub OpenGLControl1_OpenGLInitialized(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenGLControl1.OpenGLInitialized
            'Get the OpenGL object.
            Dim gl As OpenGL = OpenGLControl1.OpenGL
     
            'Set the clear color.
            gl.ClearColor(0, 0, 0, 0)
     
        End Sub
     
        Private Sub OpenGLControl1_Resized(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenGLControl1.Resized
            'Get the OpenGL object.
            Dim gl As OpenGL = OpenGLControl1.OpenGL
     
            'Set the projection matrix.
            gl.MatrixMode(OpenGL.GL_PROJECTION)
     
            'Load the identity.
            gl.LoadIdentity()
     
            'Create a perspective transformation.
            gl.Perspective(60.0F, CType(Width, Double) / CType(Height, Double), 0.01, 100.0)
     
            'Use the 'look at' helper function to position and aim the camera.
            gl.LookAt(-5, 5, -5, 0, 0, 0, 0, 1, 0)
     
            'Set the modelview matrix.
            gl.MatrixMode(OpenGL.GL_MODELVIEW)
        End Sub
        'The current rotation.
        Private rotation As Single = 0.0F
     
    End Class
    ton code VB revu :

    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
     
    Imports SharpGL
     
    Public Class Visu3D
     
        Private Sub OpenGLControl1_OpenGLDraw(ByVal sender As System.Object, ByVal args As SharpGL.RenderEventArgs) Handles OpenGLControl1.OpenGLDraw
            Dim GL As OpenGL = OpenGLControl1.OpenGL
            GL.ClearColor(0.0, 0.0, 0.0, 0.0)
            GL.Clear(OpenGL.GL_COLOR_BUFFER_BIT Or OpenGL.GL_DEPTH_BUFFER_BIT)
            GL.LoadIdentity()
            '
            ' Fun begins
            '
            GL.Begin(OpenGL.GL_POLYGON)
     
     
            GL.Color(1.0F, 1.0F, 1.0F)
            GL.Begin(OpenGL.GL_POLYGON)
     
            GL.Vertex(0.25, 0.25, 0.0)
            GL.Vertex(0.75, 0.25, 0.0)
            GL.Vertex(0.75, 0.75, 0.0)
            GL.Vertex(0.25, 0.75, 0.0)
     
     
            GL.End()
        End Sub
     
        Private Sub OpenGLControl1_OpenGLInitialized(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenGLControl1.OpenGLInitialized
            'Get the OpenGL object.
            Dim gl As OpenGL = OpenGLControl1.OpenGL
     
            gl.ShadeModel(OpenGL.GL_SMOOTH)
     
            'Set the clear color.
            gl.ClearColor(0.0, 0.0, 0.0, 0.5)
     
            gl.ClearDepth(1.0)
            gl.Enable(OpenGL.GL_DEPTH_TEST)
            gl.DepthFunc(OpenGL.GL_LEQUAL)
            gl.Hint(OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, OpenGL.GL_NICEST)
     
        End Sub
     
        Private Sub OpenGLControl1_Resized(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenGLControl1.Resized
            Dim gl As OpenGL = OpenGLControl1.OpenGL
            Dim s As Size = OpenGLControl1.Size
            Dim aspect_ratio As Double = CType(s.Width, Double) / CType(s.Height, Double)
            gl.MatrixMode(OpenGL.GL_PROJECTION)
            gl.LoadIdentity()
            gl.Perspective(45.0, aspect_ratio, 0.01, 100.0)
            gl.LookAt(-5, 5, -5, 0, 0, 0, 0, 1, 0)
            gl.MatrixMode(OpenGL.GL_MODELVIEW)
            gl.LoadIdentity()
        End Sub
    End Class
    La doc sommaire de SharpGL se trouve sur le site -github- ou le site -CodePlex...
    Le forum "NeHe Productions - Everything OpenGL" de gamedev.net
    contient de nombreux tutos.
    lien :

    http://www.google.fr/url?sa=t&rct=j&...33178914,d.d24

  4. #4
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Merci pour ta réponse détaillée

    Si j'ai bien compris :

    Je dois créer un projet C#.NET qui sera lié avec mon projet VB.NET ?

    Ou bien j'ai seulement besoin de C#.NET pour générer les bons fichiers et les mettre dans mon projet VB.NET ?

    J'ai VB Express 2010 et Visual Studi 2015 Community ; mon projet est en VB Express 2010 faut-il que je passe sous 2015 ?

    A bientôt

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour


    Ou bien j'ai seulement besoin de C#.NET pour générer les bons fichiers et les mettre dans mon projet VB.NET ?
    C'est bien ca ...et espionner le projet CSharp au moins une fois!!!....
    Apres sur ta machine ,tu peux copier le dossier ailleurs pour l'avoir sous la main pour d'autres projets VB.NET ....


    J'ai VB Express 2010 et Visual Studio 2015 Community ; mon projet est en VB Express 2010 faut-il que je passe sous 2015 ?
    Pour VS 2010 Express ,si le téléchargement de SharpGL échoue (à partir de
    l'interface de VS-via Gestionnaire des Extensions) ,il faut télécharger directement les binaires(les 3 dll ) de site CodePlex ou mieux du site github
    Le site github est le site officiel mis à jour par l'auteur et d'où est téléchargé le SharpGL du Gestionnaire des Extensions)..



    Les fichiers d'installation des extension Visual Studio (les fameux générateurs de Projet Templates Winform et WPF) sont disponibles uniquement pour Visual Studio 2012/2013 aux sites: github,codeplex et gallery msdn
    Pour VS 2015( Community, & Pro etc.) j'ignore ...
    Le problème est qu'on ne sait pas quelle version du Net Framework Framework il faut référencer dans un projet VS 2015....

    C'est à essayer .
    bon code...

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    VB 2010 Express n'accepte aucune extension,

    VB 2012 Express et VB2013 Express acceptent probablement NuGet et quelques autres.

    VB 2013 Community et VB2015 Community acceptent les extensions et surtout VSTO OTVS

Discussions similaires

  1. [Débat] Technologie .NET vs JAVA
    Par neo.51 dans le forum Débats sur le développement - Le Best Of
    Réponses: 1047
    Dernier message: 14/01/2019, 16h15
  2. [Débat] Expériences au sujet de .NET
    Par DevX dans le forum Débats sur le développement - Le Best Of
    Réponses: 46
    Dernier message: 25/05/2014, 11h16
  3. A ceux qui ont migré de VB6 vers VB.Net
    Par Fox dans le forum VB 6 et antérieur
    Réponses: 81
    Dernier message: 21/05/2008, 14h56
  4. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  5. Fichier PDOXUSRS.NET
    Par yannick dans le forum Paradox
    Réponses: 5
    Dernier message: 05/04/2002, 09h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo