OpenGL, réccupération d'un rendu offscreen - C++ - Programmation
Marsh Posté le 22-06-2009 à 11:04:01
Hello,
Je pense que ce tutorial peux t'intéresser : http://nehe.gamedev.net/data/lesso [...] ?lesson=26
C'est pour faire un effet de reflexion sur une surface, cela en utilisant le stencil buffer. Ca me semble très proche de ce que tu veux faire.
Marsh Posté le 22-06-2009 à 11:09:22
Merci beaucoup, je lis ça tout de suite
Je vous tiens au courant de l'avancement
Marsh Posté le 22-06-2009 à 11:39:02
Le problème avec cette solution c'est qu'elle n'introduit pas de mapping.
En gros elle me permettrait de "dessiner la scène dans l'objet chargé"
hors le but est que cette scène soit mapper à l'objet chargé, introduisant une déformation selon celui-ci.
Exemple : l'objet chargé peut être un trapèze ABCD
la scène est rendue dans une offscreen ( Carré EFGH )
Le but est d'afficher la scène en faisant coïncider les coins EFGH et ABCD
Marsh Posté le 22-06-2009 à 12:22:10
J'ai trouvé ça : http://nehe.gamedev.net/data/lesso [...] ?lesson=36
Je vous en dis plus dans quelques temps
Marsh Posté le 22-06-2009 à 15:47:14
ça avance, ça avance.
Grâce à la leçon 36 linkée dans le post précédent j'arrive à créer ma texture.
Mon soucis est maintenant tout autre...
En effet, mon objet .obj chargé est en fait un plan composé de plusieurs polygones. Ainsi quand je veux mapper ma texture sur ce plan, elle se map en fait sur chaque polygone le composant...
Une idée pour pouvoir considérer ce plan comme une seule surface ?
Marsh Posté le 22-06-2009 à 16:06:29
tes coordonnées UV (une paire de valeurs pour chaque sommet de ton objet qui dit quel point de la texture va à cet endroit) doivent pas être bonnes.
Marsh Posté le 23-06-2009 à 10:35:22
En fait c'est bon, on m'a fournit un .mtl avec le obj.
J'ai donc une seule et même surface et le programme marche bien.
Par contre par soucis d'optimisation je pense que je vais tester l'extension FBO ( http://www.songho.ca/opengl/gl_fbo.html )
En effet pour l'instant je draw la scène, je copie ce rendu dans une texture et j'applique la texture... Déjà 20ms rien que pour la copie.
Marsh Posté le 23-06-2009 à 11:54:46
Oui les rendertargets efficaces en OpenGl ce sont les FBO.
Marsh Posté le 23-06-2009 à 16:26:52
Par contre que j'utilise la première méthode ou les FBO, j'ai une modification des couleurs de l'objet qui est rendu dans une texture...
Quelqu'un saurait d'où ça peut venir ?
EDIT: j'ai essayé tous les espaces de couleurs possible au moment de la création et du rendu de la texture
Marsh Posté le 23-06-2009 à 16:50:12
code, binaire...
Si tu fais par shader, essaye de faire la sortie sur une couleur à la fois pour voir.
Marsh Posté le 23-06-2009 à 17:08:27
Voici le code de la 1ère version ( plus simple )
Code :
|
donc le soucis c'est que à la sortie le cube est dessiné avec 3 faces rouges, une rose, une noire et une bleue
Or quand je le dessine hors de la texture, il a bien les couleurs demandées
Merci de votre aide
Marsh Posté le 23-06-2009 à 17:31:41
En gros voici les changements :
Vert -> Noir
Orange -> Rouge
Jaune -> Rouge
en gros la composante verte n'est pas prise en compte... mais pourquoi ?
EDIT: même si à la place d'un cube multicolore, je dessine juste un fond vert, la texture à l'arrivée ne comprend qu'un fond noir...
Marsh Posté le 23-06-2009 à 18:05:25
Envoye le binaire pour voir si sur ma machine ça marche, on sait jamais OpenGl, drivers, toussa
Marsh Posté le 23-06-2009 à 18:07:23
La dernière couleur poussée est glColor4f(1.0f,0.0f,1.0f,0.0f), soit tout sauf le vert.
Est-ce que la copie derrière serait modulée/impactée par cette couleur ?
Marsh Posté le 24-06-2009 à 08:46:31
J'ai déjà essayé sur différentes machines, toujours la même chose... ça ne vient pas d'openGL
Je vais tester cette histoire de last color
Marsh Posté le 24-06-2009 à 08:48:51
Après test ça venait bien de là... Étrange
J'ai juste rajouté un glColor4f(1.0f,1.0f,1.0f,0.0f) à la fin du drawing du cube
Marsh Posté le 24-06-2009 à 10:00:50
Par contre après test sur différentes machines, aucun gain de performances avec les FBOs
Marsh Posté le 24-06-2009 à 15:09:19
Normalement les FBOs sont la manière correcte de le faire.
D'une part, il est possible que le driver détecte le pattern d'utilisation avec le glCopyTexImage2D et qu'il reforme le contexte avec un FBO.
Ensuite seul le FBO permet d'attacher des frames/depth/stencil buffers de résolutions indépendantes de la fenêtre de rendu.
Et les glVertex y'a pas plus daubé comme efficacité
Donc utilise les FBO, ça te sera utile quand tu voudra faire du HDR, de la réflexion/transparence shaderisée, et passe aux VBO pour avoir des Vertex et Index buffers.
Marsh Posté le 22-06-2009 à 10:51:05
Bonjour,
Je suis en train de développer un logiciel 3D avec openGL dont voici le but :
charger un .obj - Ok
faire un rendu d'une scène 3D en offscreen - Ok ( Rendu dans une fenêtre normale, juste sans le ShowWindow )
récupérer ce rendu comme une texture - C'est ici que je suis bloqué
mapper sur l'objet précédemment chargé cette texture - Ne devrait pas poser de problème une fois l'étape précédente validée
afficher l'objet ainsi texturer - de même
Comme décrit ci-dessus je suis bloqué au niveau de la récupération de l'image... Auriez vous une piste à me proposer ?
Peut-être que le rendu de la scène dans une fenêtre non affichée n'est pas la bonne solution, je suis preneur de toutes vos idées / suggestions
Merci de m'avoir lu, et merci d'avance pour votre aide
---------------
Mon Feed-Back