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 :

Problème de rendu d’image HDR


Sujet :

OpenGL

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut Problème de rendu d’image HDR
    Bonjour,

    Je travaille sur une extension de la balise HTML 5 canvas, cette extension, grâce à la technologie WebGL (basé sur OpenGL ES 2.0), me permet de contrôler, à partir du DOM, la zone de rendu du canvas par un PixelShader écrit en GLSL.

    Je valide le principe de mon extension, en écrivant divers jeux de test, je ne rencontre aucun problème jusqu’à ce que je tente de porter l’exemple de texture HDR de la librairie SpiderGL.
    J’obtiens ceci une sorte de LDR
    Pourtant j’utilise la même image et presque le même FragmentShader. "presque" car, a la différence de l’exemple de SpiderGL, j’utilise un seul vertex buffer ne contenant que la position 2D :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var QuadVertexBuffer = new Float32Array(
    [ //  x     y
    	-1.0, -1.0, //sommet bas gauche
    	-1.0,  1.0, //sommet haut gauche
    	 1.0, -1.0, //sommet bas droit
    	 1.0,  1.0  //sommet haut droit 
    ]);
    Alors que SpiderGL utilise 2 Vertex Buffer : un pour la position 2D et un autre pour les coordonnées de texture :
    Code JavaSript : 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
    var quadPositions = new Float32Array
    ([
    	-1.0, -1.0,
    	 1.0, -1.0,
    	-1.0,  1.0,
    	 1.0,  1.0
    ]);
     
    var quadTexcoords = new Float32Array
    ([
    	0.0, 0.0,
    	1.0, 0.0,
    	0.0, 1.0,
    	1.0, 1.0
    ]);
     
    var quad = new SglMeshGL(gl);
    quad.addVertexAttribute("position", 2, quadPositions);
    quad.addVertexAttribute("texcoord", 2, quadTexcoords);
    quad.addArrayPrimitives("tristrip", gl.TRIANGLE_STRIP, 0, 4);
    Ce qui m’oblige dans mon Shader à effectuer ce changement de repère :
    Code GLSL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vec2 p = (position + 1.0)/2.0;
    vec4 color = texture2D(image, p);
    Toutefois, Je ne pense pas que le problème provient de ce changement de repère, et j’espère qu’il s’agit que d’un renderstate obscure mal initialisé et, ainsi, ne remettant pas en cause l’architecture de ma librairie.

    Je farfouille, actuellement, dans le code de SpiderGL pour trouver une différence d’initialisation du context GL , sans aucun résultat. Bref je sèche un peu ...

    C’est pourquoi je sollicite votre aide ! merci.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    Quand je lance ton propre exemple j'obtiens bien une image, mais celle ci est "pixelisée" (+ un bon effet de flou) c'est cela ton problème ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Oui c’est bien cela mon problème !
    En fait mon shader semble fonctionner, car lorsque je change l’uniform "exposure" l’effet obtenu est correct, seule la fragmentation pixel est grossière lors de la rasterisation.

    Existe-t-il un renderstate dans OpenGL permettant de contrôler la qualité de la fragmentation ? afin de forcer l’exécution du Shader pour chaque pixel rendu.

    A noter que l’image n’a pas une hauteur en puissance de 2, sa résolution est de 512x758. Pourtant j’arrive à appliquer des shaders sur des vidéos de résolution 280x204 sans aucune dégradations.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Mon Problème est résolu !

    La balise canvas d’HTML 5 utilise un framebuffer par défaut de 300x150 … j’ai perdu mon temps à vouloir résoudre mon problème dans l’API WebGL, alors qu’il suffisait juste de forcer les propriétés width et height sur l’objet DOM HTMLCanvasElement pour définir la résolution de FrameBuffer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. stockage page web dans mysql : problème de rendu
    Par circajet7 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 29/03/2007, 10h25
  2. Problèmes de rendu incongru
    Par jacquesprogram dans le forum Flash
    Réponses: 14
    Dernier message: 01/10/2006, 11h50
  3. Problème de rendu 16 bits float + MSAA
    Par gybe dans le forum DirectX
    Réponses: 10
    Dernier message: 10/08/2006, 16h24
  4. [wxPython] problème de rendu
    Par tool69 dans le forum wxPython
    Réponses: 5
    Dernier message: 25/09/2005, 19h43
  5. Problème de rendu 2D
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 04/08/2004, 21h47

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