praegune kellaaeg 08.06.2024 04:07:16
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
joakim12
HV vaatleja
liitunud: 07.07.2007
|
05.02.2008 20:02:28
OpenGL - segaduses Stencil Bufferi'ga |
|
|
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 .
|
|
tagasi üles |
|
|
tanzanite
HV kasutaja
liitunud: 13.05.2006
|
06.02.2008 09:27:03
|
|
|
(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 |
|
|
joakim12
HV vaatleja
liitunud: 07.07.2007
|
24.02.2008 19:41:45
Nüüd ma sain stencil bufferi kasutamisest aru |
|
|
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 |
|
|
|
lisa lemmikuks |
|
|
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.
|