Vraag : Problemen met Opengl stencilbuffer

Hallo,
I am die heeft probleem hebben die de stencilbuffer in OpenGL.

Basically gebruiken de eenvoudige versie van mijn probleem this.

I is een vierling die als gebied van de rechthoek „hoofd“ vloer kan worden beschouwd. Ik heb ook een aantal vlakke veelhoeken zittend op het vloergebied bij de zelfde hoogte zodat zijn zij coplanair en lijden aan z fighting.

To krijgen om dit zonder die veelhoeken uit het belangrijkste vloergebied eigenlijk te snijden, gebruik ik de stencil buffer.

I heb ook een aantal andere vormen die of niet kunnen kunnen transparant zijn. Deze zijn niet beperkt tot het vloergebied zo zouden kunnen, bijvoorbeeld, daken zijn, is de murenetc.

The als volgt:

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

mainFloorArea.Draw ();

glStencilFunc (GL_ALWAYS, 1, 1);
glStencilMask (GL_FALSE);
glDisable (GL_DEPTH_TEST);

otherPolygons.Draw ();

glEnable (GL_DEPTH_TEST);
glDisable (GL_STENCIL_TEST) ;

restOfTheShapes.Draw ();

This allen fijn en alles werkt is lovely.

However, moet ik in één of andere tekst toevoegen die een om het even welk standpunt in 3D ruimte kan innemen. Dit moet vóór de bovengenoemde code worden gedaan zodat het achter om het even welk transparant probleem zal verschijnen surfaces.

The ik ben krijg dat wanneer de tekst voor otherPolygons is het de kleur van otherPolygons vergt. Dit maakt duidelijk de tekstunreadable.

Any op hoe ik dit kon verhinderen? Ik denk de reden dit gebeurt omdat ik de stencilfunctie om altijd voor otherPolygons plaats over te gaan zodat handelt de tekst als een stencil.

I heeft geprobeerd ontruimend de stencilbuffer vóór het trekken van de vloer maar niets schijnt aan work.

Thanks vooraf

Antwoord : Problemen met Opengl stencilbuffer

Ik ben niet zeker hoe te om het bovengenoemde code werken te krijgen. Dit is code I gebruik om tot Web-pagina's toegang te hebben. Het is derde of van de vierde generatie en vrij robuust. Dit is een volledige codemodule.

'clsInternetConnection
'
De 'klasse verstrekt functionalty om Web-pagina's te lezen.
'
'Uitgevoerd als klassenmodule voor gebruik met om het even welk VB of Vba- project.
'
'© 2008-2010 Kevin M. Jones

Expliciete optie

Privé Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Privé Const INTERNET_FLAG_RELOAD = &H80000000
Privé Const INTERNET_FLAG_PRAGMA_NOCACHE = &H100
Privé Const INTERNET_OPTION_RECEIVE_TIMEOUT zoals lang = 6

Privé Const UserAgent = „VB“

Privé mConnectionHandle zoals lang
Privé mTimeoutSeconds zoals lang

Privé verklaar de Lib van InternetCloseHandle van de Functie „wininet“ (_
     ByRef hInet zoals lang _
  ) Zoals lang

Privé verklaar de Lib „wininet“ alias „InternetOpenA“ van de Functie van InternetOpen (_
     ByVal sAgent als Koord, _
     ByVal lAccessType zoals lang, _
     ByVal sProxyName als Koord, _
     ByVal sProxyBypass als Koord, _
     ByVal lFlags zoals lang _
  ) Zoals lang

Privé verklaar de Lib „wininet“ alias „InternetOpenUrlA“ van de Functie van InternetOpenUrl (_
     hInternetSession van ByVal zoals lang, _
     ByVal lpszUrl als Koord, _
     lpszHeaders van ByVal als Koord, _
     ByVal dwHeadersLength zoals lang, _
     ByVal dwFlags zoals lang, _
     ByVal dwContext zoals lang _
) Zoals lang

Privé verklaar de Lib van InternetReadFile van de Functie „wininet“ (_
     ByVal hFile zoals lang, _
     ByVal sBuffer als Koord, _
     ByVal lNumBytesToRead zoals lang, _
     lNumberOfBytesRead zoals lang _
  ) Als Geheel
 
Privé verklaar de Lib „wininet.dll“ alias „InternetSetOptionA“ van de Functie van InternetSetOption (_
     ByVal hInternet zoals lang, _
     dwOption van ByVal zoals lang, _
     ByRef lpBuffer zoals om het even welk, _
     ByVal dwBufferLength zoals lang _
  ) Zoals lang

Privé SubClass_Initialize ()

  mConnectionHandle = InternetOpen (UserAgent, INTERNET_OPEN_TYPE_PRECONFIG, het vbNullString, het vbNullString, 0)
  Als mConnectionHandle = 0 toen
     MsgBox „Onbekwaam om een verbinding van Internet te openen. De most likely oorzaak is teveel handvatten is gecre�ërd.“
  Beëindig als
  mTimeoutSeconds = 30

Sub van het eind

Privé SubClass_Terminate ()

  InternetCloseHandle mConnectionHandle
     
Sub van het eind

Overheidsfunctie GetWebPage (_
     ByVal URL als Koord, _
     Facultatieve ByVal ProxyUserID als Koord, _
     Facultatieve ByVal ProxyPassword als Koord, _
     Facultatieve ByVal TimeoutSeconds zoals lang _
  ) Als Koord

'Krijg een Web-pagina.
'
'Syntaxis
'
'GetWebPage (URL, [ProxyUserID], [ProxyPassword])
'
'URL - een volledige URL aan een Web-pagina.
'
'ProxyUserID - de gebruiker - identiteitskaart voor de volmachtsserver, als om het even welk. Facultatief. Indien weggelaten
'dan wordt geen volmachtsserver verondersteld.
'
'ProxyPassword - het wachtwoord voor de volmachtsserver. Facultatief. Genegeerd als
'ProxyUserID wordt weggelaten.
'
'TimeoutSeconds - het aantal seconden om tot timing uit te wachten. Facultatief.
'Indien dan weggelaten 30 seconden wordt gebruikt.

  Schemerige ConnectionHandle zoals lang
  Schemerige URLHandle zoals lang
  Schemerige BytesRead zoals lang
  Verduister Resultaat Van Boole
  Verduister InputBuffer als Koord * 10000
  Verduister PageContent als Koord
  Verduister SecurityData als Koord
 
   Als Len (ProxyUserID) > 0 toen
     SecurityData = ProxyUserID
     Als Len (ProxyPassword) > 0 toen
        SecurityData = SecurityData & „: “ & ProxyPassword
     Eind als
     SecurityData = SecurityData & „@“
     URL = vervang (URL, „: /“, „: /“ & SecurityData)
  Eind als
 
   Als TimeoutSeconds = 0 toen TimeoutSeconds = mTimeoutSeconds
 
   Als mConnectionHandle <> 0 toen
     Resultaat = InternetSetOption (mConnectionHandle, INTERNET_OPTION_RECEIVE_TIMEOUT, TimeoutSeconds * 1000, Len (TimeoutSeconds))
     URLHandle = InternetOpenUrl (mConnectionHandle, URL, het vbNullString, 0, INTERNET_FLAG_RELOAD of INTERNET_FLAG_PRAGMA_NOCACHE, 0)
     Als URLHandle <> 0 toen
       
           InputBuffer = vbNullString
           Resultaat = InternetReadFile (URLHandle, InputBuffer, Len (InputBuffer), BytesRead)
           PageContent = PageContent & Weggegaan (InputBuffer, BytesRead)
        Lijn terwijl BytesRead > 0
        InternetCloseHandle URLHandle
     Eind als
  Eind als
 
   GetWebPage = PageContent
 
De Functie van het eind

Het openbare Bezit krijgt ValidInternetConnection () zoals Van Boole

  ValidInternetConnection = mConnectionHandle <> 0

Het Bezit van het eind

Het openbare Bezit krijgt TimeoutSeconds () zoals lang

  TimeoutSeconds = mTimeoutSeconds

Het Bezit van het eind

Het openbare Bezit liet TimeoutSeconds (_
     De Waarde van ByVal zoals lang _
  )

  mTimeoutSeconds = Waarde

Het Bezit van het eind

Kevin
Andere oplossingen  
 
programming4us programming4us