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

OpenGL Discussion :

OpenGL sans fenetre OpenGl


Sujet :

OpenGL

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 4
    Points
    4
    Par défaut OpenGL sans fenetre OpenGl
    J'ai effectué, il y a quelque temps, un systeme OpenGL pour visualiser les zones de visibilité de différentes caméras mobiles sur un modèle numérique de terrain assez grand. Le résultat était obtenu par une technique de shadow volumes et était affiché à l'écran.

    Désormais je travaille sur un autre projet dans lequel le masque des zones de visibilité me serait fort utile pour effectuer mes calculs. Cependant je ne veux pas ouvrir de fenêtre openGL car je ne fait pas de l'affichage mais juste du calcul de données.

    Je voulais savoir comment je peux faire de l'openGL sans fenêtre OpenGL.
    Est-ce que je peut faire des calcul dans un buffer de stencil de facon transparente pour l'utilisateur ? (si il y a creation de fenêtre OpenGL il faut que l'utilisateur n'en sache rien)

    Si je ne peux pas feinter l'utilisateur et que je veux quand meme utiliser la puissance de la carte video (le modèle numérique est assez grand), est-ce que le calcul sur GPU est entièrement propriétaire ou y a-t-il des fonctions (même très basique) communes aux differentes cartes (ATI et NVIDIA)?

    Si vous avez des idées merci de répondre.

  2. #2
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    c est bete mais pourquoi tu ne cré par une fenetre sans l afficher, si t es sous windows :

    ShowWindow(SW_HIDE)

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    J'ai un peu le meme probleme que ihuop, je crée une scene Opengl et je transfere le back buffer à mon application de traitement d'image. En fait la DLL que je réalise avec opengl me permet de générer des images synthétiques pour tester mes algos de vision dessus.

    Le probleme de ShowWindow(SW_HIDE) c'est qu'il cache la fenètre et donc le DC de celle-ci. Du coup Opengl ne fonctionne plus. Pareil si on fait déborder la fenetre hors de l'écran, la partie clippé n'est pas travaillée par OpenGL.

    Si quelqu'un sait comment utilisé opengl sans afficher la fenetre contenant le DC associé à Opengl, ça m'enleverait un poid (soit une fenetre de 640*480 qui m'emm....).

    Peut etre faut il suivre la piste d'un GetDC(NULL) mais j'ai parfois un message d'erreur comme koi je n'ai pas assez de mémoire video, ou alors travailler avec du rendu dans des DIB ???

  4. #4
    Membre habitué Avatar de ken_le_videur
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 129
    Points : 145
    Points
    145
    Par défaut
    Lut'

    un memory device context devrait faire l'affaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hdc=CreateCompatibleDC(0);
    puis en sélectionnant dans ce hdc un HBITMAP créé avec CreateCompatibleBitmap

    Mais j'ai pas testé.

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Je viens d'essayé comme tu m'as dit ken_le_videur :

    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
     
    	static	PIXELFORMATDESCRIPTOR pfd=				
    	{
    		sizeof(PIXELFORMATDESCRIPTOR),				
    		1,											
    		/*PFD_DRAW_TO_WINDOW |*/						
    		PFD_SUPPORT_OPENGL |						
    		PFD_DOUBLEBUFFER,							
    		PFD_TYPE_RGBA,							
    		bits,										
    		0, 0, 0, 0, 0, 0,							
    		0,										
    		0,											
    		0,										
    		0, 0, 0, 0,								
    		16,											 
    		0,											
    		0,											
    		PFD_MAIN_PLANE,							
    		0,									
    		0, 0, 0									
    	};
     
     
    	hDCCompatible = CreateCompatibleDC(GetDC(NULL));
    	HBITMAP Hbmp = CreateCompatibleBitmap(hDCCompatible,800,600);
    	SelectObject(hDCCompatible,Hbmp);
     
    	if (!(PixelFormat=ChoosePixelFormat(hDCCompatible,&pfd)))	
    	{
    		KillGLWindow();							
    		MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;							
    	}
     
    	if(!SetPixelFormat(hDCCompatible,PixelFormat,&pfd))		
    	{
    		KillGLWindow();							
    		MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;							
    	}
     
    	if (!(hRC=wglCreateContext(hDCCompatible)))			
    	{
    		KillGLWindow();						
    		MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;							
    	}
     
    	if(!wglMakeCurrent(hDCCompatible,hRC))				
    	{
    		KillGLWindow();							
    		MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;							
    	}

    Ca marche pas dès la fonction "SetPixelFormat".
    J'ai peut etre mal suivit tes instructions..


  6. #6
    Membre habitué Avatar de ken_le_videur
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 129
    Points : 145
    Points
    145
    Par défaut
    Pour le CreateCompatibleBitmap il faudrait plutôt prendre le HDC de l'écran parce que là tu le crée à partir de ton compatible DC qui lui est monochrome

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Je viens de corriger de cette manière :

    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
     
    	hDC=GetDC(NULL);
    	hDCCompatible = CreateCompatibleDC(hDC);
    	HBITMAP Hbmp = CreateCompatibleBitmap(hDC,640,480);
    	SelectObject(hDCCompatible,Hbmp);
     
    	if (!(PixelFormat=ChoosePixelFormat(hDCCompatible,&pfd)))	
    	{
    		KillGLWindow();								
    		MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;								
    	}
     
    	if(!SetPixelFormat(hDCCompatible,PixelFormat,&pfd))		
    	{
    		KillGLWindow();								
    		MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;								
    	}
     
    	if (!(hRC=wglCreateContext(hDCCompatible)))			
    	{
    		KillGLWindow();							
    		MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;							
    	}
     
    	if(!wglMakeCurrent(hDCCompatible,hRC))				
    	{
    		KillGLWindow();								
    		MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);		
    		return FALSE;							
    	}
    Mais maintenant c'est "wglCreateContext" qui foire, je me demande si ça peut vraiment fonctionner avec des memory DC..

  8. #8
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    J'ai un peu le même problème

    J'étudie actuellement un article de microsoft sur le sujet
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnopen/html/msdn_opengl9.asp

    Rendre direct dans une bitmap via
    pfd.dwFlags = PFD_DRAW_TO_BITMAP | // replaces PFD_DRAW_TO_WINDOW
    Cela peut peut être aider

  9. #9
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Voila la solution

    http://www.codeguru.com/Cpp/G-M/opengl/print.php/c5587/

  10. #10
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Quelqu'un a réussit à faire un rendu dans une HBitmap ou une CBitmap :

    J'ai essayé le lien que j'ai donné hier soir, et sur le flush il plante
    Si je dessine quelque chose de simple, cela fonctionne...

    L'utilisation de certaines commandes OpenGL est proscrite lors d'un ajout de PFD_DRAW_TO_BITMAP :

    Quelqu'un a des infos ?

  11. #11
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Bon j'ajoute un lien, un bel article russe
    http://www.rsdn.ru/article/opengl/layeredopengl.xml

    un coup de http://babelfish.altavista.com/babelfish/tr et c'est pas mal traduit en anglais

Discussions similaires

  1. Utiliser callback opengl sans lancer de fenetre
    Par dragonblack dans le forum OpenGL
    Réponses: 5
    Dernier message: 05/07/2010, 10h25
  2. Creer une fenetre opengl linux sans lib externe
    Par maitrelame2 dans le forum OpenGL
    Réponses: 1
    Dernier message: 31/12/2007, 14h37
  3. OpenGL multi fenetre sans glViewport
    Par Groove dans le forum OpenGL
    Réponses: 12
    Dernier message: 22/02/2007, 11h19
  4. Réponses: 2
    Dernier message: 14/09/2005, 18h09
  5. Tore en OpenGL sans utiliser glut
    Par lefort dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 20/11/2002, 16h32

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