Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  OpenGL - segaduses Stencil Bufferi'ga märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
joakim12
HV vaatleja

liitunud: 07.07.2007




sõnum 05.02.2008 20:02:28 OpenGL - segaduses Stencil Bufferi'ga vasta tsitaadiga

Tere,
Hakkasin õppima OpenGL-i raamatust "OpenGL SuperBible 4th Edition", ning jäin toppama teemal Stencil Buffer.

Raamatus on järgmine näide:
///////////////////////////////////////////////////////////
// Called to draw scene
void RenderScene(void)
    {
    GLdouble dRadius = 0.1; // Initial radius of spiral
    GLdouble dAngle;        // Looping variable
           
    // Clear blue window
    glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
       
    // Use 0 for clear stencil, enable stencil test
    glClearStencil(0);
    glEnable(GL_STENCIL_TEST);

    // Clear color and stencil buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
               
    // All drawing commands fail the stencil test, and are not
    // drawn, but increment the value in the stencil buffer.
    glStencilFunc(GL_NEVER, 0x0, 0x0);
    glStencilOp(GL_INCR, GL_INCR, GL_INCR);

    // Spiral pattern will create stencil pattern
    // Draw the spiral pattern with white lines. We
    // make the lines  white to demonstrate that the
    // stencil function prevents them from being drawn
    glColor3f(1.0f, 1.0f, 1.0f);
    glBegin(GL_LINE_STRIP);
        for(dAngle = 0; dAngle < 400.0; dAngle += 0.1)
            {
            glVertex2d(dRadius * cos(dAngle), dRadius * sin(dAngle));
            dRadius *= 1.002;
            }
    glEnd();
           
    // Now, allow drawing, except where the stencil pattern is 0x1
    // and do not make any further changes to the stencil buffer
    glStencilFunc(GL_NOTEQUAL, 0x1, 0x1);
    glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
       
    // Now draw red bouncing square
    // (x and y) are modified by a timer function
    glColor3f(0.0f, 1.0f, 0.0f);
    glRectf(x, y, x + rsize, y - rsize);
   
    // All done, do the buffer swap
    glutSwapBuffers();
    }


Niisiis:
void glStencilFunc(GLenum func, GLint ref, GLuint mask);

Alustame siis sellest, et ma ei saa aru, kust kohast võetakse numbrid ref ja mask ja mida need tähendavad. Minu jaoks pole see teema raamatus eriti hästi lahatud. Vähemalt mulle jäi arusaamatuks.

Et kas keegi asjatundja oskaks mulle seda teemat natukene seltada icon_smile.gif.
tagasi üles
vaata kasutaja infot saada privaatsõnum
tanzanite
HV kasutaja
tanzanite

liitunud: 13.05.2006




sõnum 06.02.2008 09:27:03 vasta tsitaadiga

(mul pole hetkel väljapoole eestit võrguühendust)

Vaata spetsifikatsiooni www.opengl.org -> mingi ilmne koht ... seal täpselt kirjas.

oletus:

olgu,
* stencil buhvris => source
siis,
* mask => bitmask
* ref => reference value
* func => fn(source & bitmask, reference value)

tulemus boolean = fn(source & bitmask, referenceValue)

edit:
õnnestus jupsivast netist siiski spec kätte saada: lk 219 @ http://www.opengl.org/registry/doc/glspec21.20061201.pdf
paistab, et muidu kõik õige aga bitmaski kasutatakse ka referenceValue peal.
tagasi üles
vaata kasutaja infot saada privaatsõnum
joakim12
HV vaatleja

liitunud: 07.07.2007




sõnum 24.02.2008 19:41:45 Nüüd ma sain stencil bufferi kasutamisest aru vasta tsitaadiga

Nüüd alles sain ma stencil bufferi kasutamisest tegelikult aru. Lugesin ja kuulasin veel teisi näiteid. Tegelikult on stencil bufferi kasutamine väga lihtne ning OGL SB-s oli ta väga hästi seletatud, kuid ma ei mõikanud päris hästi asja.

Seda tutorialit kuulates sain alles tegelikult enam vähem aru, kuidas asi käib. Siis lugesin veel OpenGL SB tähelepanelikult üle ja oligi selge:
http://www.videotutorialsrock.com/opengl_tutorial/reflections/text.php
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  OpenGL - segaduses Stencil Bufferi'ga
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.