Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1825 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  webgl FBO texture

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

webgl FBO texture

n°2156418
octaveos
Posté le 11-09-2012 à 23:52:20  profilanswer
 

Bonsoir à tous,
 
Je vous expose mon problème.
 
Je suis en train de me faire une lib webgl. shader, fonction javascript ect...
Jusqu'à la tout se passe bien. Mais voila mon premier obstacle.
 
J’enregistre le rendu d'une scène dans une texture via gl.createFramebuffer();
La scène est correctement enregistrée et la texture peut être utilisée dans des shaders pour générer des effets comme le shadow mapping, le glow, ect ...  :love:  
 
Le problème est le suivant:  
En fonction de la position du point d'observation la textures s’altère et ne laisse apparaître que le backgound de celle-ci. (exemple : un rond rouge dans une fond vert, le rond rouge disparaît)
Cas concret, je souhaitre rendre ma texutre dans un rectangle en fullscreen. Si le rectangle s'approche trop du point du vue, ou si celui-ci prend tout l'ecran la texture bug.
De meme en vu ortho, si les dimention du rectangle se rapproche trop des bords de l'écran, les éléments affichés dans la texture disparaissent.  
juste avant que la texture s'efface, on commence à voir uniquement les details sur les arretes du rectangle, puis finalement tout disparait.
 
La scène étant enregistrée en tant que texture dans le buffer, pourquoi celle si se transforme en fonction de la distance d'observation. si je remplace la texture par une texture png en dure, tout fonctionne correctement.
qu'est qui m'échape?
 
merci.  

mood
Publicité
Posté le 11-09-2012 à 23:52:20  profilanswer
 

n°2156422
Terminapor
I'll see you rise.
Posté le 12-09-2012 à 00:22:36  profilanswer
 

ça vient probablement du depth buffer que tu as mal enregistré dans ton framebuffer, fais voir ton code :D


---------------
Perhaps you don't deserve to breathe
n°2156423
octaveos
Posté le 12-09-2012 à 00:46:59  profilanswer
 

Terminapor a écrit :

ça vient probablement du depth buffer que tu as mal enregistré dans ton framebuffer, fais voir ton code :D


 
^^ en effet, à part la manipulation des matrices, les notions de buffering m’échappent.
en gros j'ai fais une petite fonction me permettant de stocker dans un tableau mes textures générées.
 

Code :
  1. function createFBO(width,height,type,textureSize){
  2. var buffer = {};
  3. buffer.framebuffer = type=="screen"? null:gl.createFramebuffer();
  4. buffer.height = parseInt(height);
  5. buffer.width = parseInt(width);
  6. buffer.textureSize = textureSize
  7. if(buffer.framebuffer){
  8. initTextureFramebuffer(buffer)
  9. buffer.storeToMap = function(){
  10.   gl.bindTexture(gl.TEXTURE_2D, this.map);
  11.   gl.generateMipmap(gl.TEXTURE_2D);
  12.   gl.bindTexture(gl.TEXTURE_2D, null);
  13.   gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
  14. }
  15. }
  16. return buffer;
  17. }
  18. function initTextureFramebuffer(buffer) {
  19. gl.bindFramebuffer(gl.FRAMEBUFFER,  buffer.framebuffer);
  20. var s = buffer.textureSize?buffer.textureSize:buffer.width;
  21.  buffer.map = gl.createTexture();
  22.  gl.bindTexture(gl.TEXTURE_2D, buffer.map);
  23.  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, s, s, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
  24.  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
  25.  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
  26.  gl.generateMipmap(gl.TEXTURE_2D);
  27.  var renderbuffer = gl.createRenderbuffer();
  28.  gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
  29.  gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, s, s);
  30.  gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, buffer.map, 0);
  31.  gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, renderbuffer);
  32.  gl.bindTexture(gl.TEXTURE_2D, null);
  33.  gl.bindRenderbuffer(gl.RENDERBUFFER, null);
  34.  gl.bindFramebuffer(gl.FRAMEBUFFER, null);
  35. }

n°2156584
octaveos
Posté le 13-09-2012 à 10:26:11  profilanswer
 

Hello !!
 
Je relance mon sujet. :)
 
Alors je récapitule : Lors ce que j'affiche des textures du framebuffer sur un objet, celles-ci disparaissent quand le point d’observation s'approche ou que l'objet prend tout l'écran.
En fait les textures ne disparaissent pas. elles prennent la couleur de leur background.
 
Pour chaque frame, la ProjectionMatrix, la ViewMatrix et la MVMatrix  sont dé-corrélées. Je ne comprend pas pourquoi le modification d'une matrice dans le dernier rendu peut influencer les pixels d'une texture déjà rendu.  
 
Recap du code de la création des textures  :  
 

Code :
  1. buffer.map = gl.createTexture();
  2.  gl.bindTexture(gl.TEXTURE_2D, buffer.map);
  3.  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
  4.  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
  5.  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 512, 512, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
  6.         buffer.framebuffer = gl.createFramebuffer();
  7. gl.bindFramebuffer(gl.FRAMEBUFFER, buffer.framebuffer);
  8. var renderbuffer = gl.createRenderbuffer();
  9. gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
  10. gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, 512, 512);
  11. gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, buffer.map, 0);
  12. gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, renderbuffer);


 
voila. tout me semble normal...  :(

n°2156611
octaveos
Posté le 13-09-2012 à 12:39:30  profilanswer
 

C'est bon, j'ai trouvé !!  
 
gl.clearColor(1.0, 1.0, 1.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
 
mal placés.  
 

n°2157163
William6
Posté le 18-09-2012 à 20:26:07  profilanswer
 

Merci d'avoir partagé j'avais un problème similaire!
 
Will
http://webgl.tv


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  webgl FBO texture

 

Sujets relatifs
mappage de texturewebgl
c++ opengl charger image texture[GLSL - fragment shader] indéxer une texture
Equivalent de GL_MAX_TEXTURE_UNITS en Direct3dRendu sur texture : opengl
OPENGL - lire les valeurs RGBA d'une textureCoordonnées de texture foireuses avec lib3ds
[glut] texture ?Opengl+Qt impossible de charger une texture
Plus de sujets relatifs à : webgl FBO texture


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR