Toon posts:

OpenGL stencil probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben op dit moment aan het afstuderen. Ik doe onderzoek naar de invloed van diepte perceptie op kleur perceptie. Hiervoor gebruik ik OpenGL shaders die er voor zorgen dat de kleuren die ik genereer zich aan een bepaald kleur model houden.

Vanuit een experimenteel oogpunt wil ik nu een deel van de scene met diepte en zonder diepte perceptie kunnen genereren. Hiervoor gebruik ik de stencil buffer. Het probleem is nu wanneer ik het programma thuis draai op mijn eigen pc (ATI 9800 pro), hij alle stencil operaties gewoon doet. Maar wanneer ik het programma op de experiment PC draai (geforce fx5970 LE), hij alle stencil operaties negeert en over elkaar heen tekent.

Het programma draait onder windows. Ik heb gekeken naar verschillende stencil en buffer formats die de kaart aankan, maar een stencil buffer van 1 bit zou wel mogelijk moeten zijn.

Hier een deel van de code

C++:
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
        setCurrentShader(1);
        useShaders();

        glDisable(GL_DEPTH_TEST);
    glStencilMask(~0);
    glClear(GL_STENCIL_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);

    glEnable(GL_STENCIL_TEST);
    glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
    glStencilFunc(GL_ALWAYS, 1, 1);

       <teken rectangular waar monoculair deel van scene kom>
    
 
    glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
    glEnable(GL_DEPTH_TEST);
    glStencilFunc(GL_NOTEQUAL, 1, 1);  /* met diepte perceptie */
    glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
    glPushMatrix();
        drawLighting();
        drawModels();
     glPopMatrix();

    glStencilFunc(GL_EQUAL, 1, 1);  /* zonder diepte perceptie  */
    glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
    
    glPushMatrix();
    glRotatef(angleRot,0.0,1.0,0.0);
      drawLighting();
      drawModels();
    glPopMatrix();
    glDisable(GL_STENCIL_TEST);

[ Voor 3% gewijzigd door .oisyn op 08-07-2005 14:40 ]


  • Willem
  • Registratie: Februari 2001
  • Laatst online: 00:39
WTF is stencil en wat heeft het met Webdesign & Graphics te maken :?

Volgende keer zelf je tekst even wat leesbaarder neerzetten en [code] [/code] gebruiken

[ Voor 39% gewijzigd door Willem op 08-07-2005 13:14 ]

Motor onderhoud bijhouden


  • André
  • Registratie: Maart 2002
  • Laatst online: 04-05 16:01

André

Analytics dude

Dit lijkt me een onderwerp voor de buren:

Webdesign & Graphics > Programming & Webscripting

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 05-05 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat als je 1 gebruikt ipv ~0 op regel 5? Het punt is dat ~0 gelijk is aan 0xffffffff. Ook al heb je een 1 bit stencil, wellicht dat een van de kaarten (of drivers ervan) niet helemaal goed omgaat met die waarde en de waarde in de 1 bit stencil buffer gewoon test tegen 0xffffffff, wat natuurlijk nooit overeen komt :)

Of, om je dependency op het aantal bits van de stencilvolume helemaal te verwijderen, blijf idd die ~0 gebruiken, maar test tegen 0 ipv 1, aangezien 0 altijd wel gesupport is als waarde.

Daarnaast kun je in dit geval beter gebruik maken van verschillende viewports ipv de stencilbuffer, of wellicht een scissor-rectangle, maar ik zou voor viewports gaan.

[ Voor 17% gewijzigd door .oisyn op 08-07-2005 14:46 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ik zal eens kijken als het aan de bits ligt. Misschien zit het probleem in die hoek. Die stencil
test heb ik nodig, omdat ik binoculaire en monculaire stituatisch in één scene wil veranderen.

Gebruikers staren naar een kamer met een raam erin. De ene keer wil ik dat wanneer men
door dat raam kijkt diepte ziet in die kamer achter het raam en de andere keer geen diepte maar
een plat schilderij als het ware.

Ik zou met de scissors test of viewports kunnen gebruiken, maar vergt weer extra programmeren
terwijl het elegant word opgelost met de stencil test.