Frage : Probleme mit Opengl Schabloneenpuffer

Hallo, haben das
I morgens Mühe using den Schabloneenpuffer in OpenGL.

Basically habend, welches die einfache Version meines Probleme this.

I ist, ein Viererkabel, das als eine Vierecks„Haupt“ Bodenfläche angesehen werden kann. Ich habe auch einige flache Polygone, auf der Bodenfläche auf der gleichen Höhe zu sitzen, also sind sie koplanar und leiden unter z fighting.

To erhalten ringsum dieses, ohne jene Polygone wirklich zu schneiden aus der Hauptbodenfläche heraus, ich, benutzen die Schablone buffer.

I lassen auch einige andere Formen, die Mai oder Mai transparent nicht sein diese sind. Diese eingeschränkt nicht ht, auf die Bodenfläche also konnten sein, ist z.B., Dächer, Code der Wände etc.

The, wie folgt:

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 alle adaequat ist und alles ist lovely.

However, ich muss in etwas Text hinzufügen, der jede mögliche Stellung im Raum 3D nehmen kann. Dieses muss vor dem oben genannten Code getan werden, damit es hinter jedem transparenten surfaces.

The Problem erscheint, das ich bin erhalte, dass, wann immer der Text vor den otherPolygons ist, er auf der Farbe der otherPolygons nimmt. Dieses bildet offensichtlich die Spitzen des Textes unreadable.

Any auf, wie ich dieses verhindern könnte? Ich denke, dass der Grund dieses geschieht, weil ich die Schabloneenfunktion auf immer Durchlauf für die otherPolygons einstelle, also der Text wie ein stencil.

I versucht den, Schabloneenpuffer, bevor fungiert das Zeichnen des Fußbodens aber des nichts zu löschen work.

Thanks im Voraus
scheint

Antwort : Probleme mit Opengl Schabloneenpuffer

Ich bin nicht sicher, wie man die oben genannte Codefunktion erhält. Dieses ist Code, den ich pflege, um auf Webseiten zurückzugreifen. Es ist drittes oder der vierten Generation und recht robustes. Dieses ist ein komplettes Codemodul.

'clsInternetConnection
'
'Kategorie zur Verfügung stellt functionalty, um Webseiten zu lesen.
'
'Eingeführt wie ein Kategorienmodul für Gebrauch mit irgendeinem VB oder VBA Projekt.
'
'© Kevin 2008-2010 M. Jones

Wahl ausdrücklich

Privates Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Privates Const INTERNET_FLAG_RELOAD = &H80000000
Privates Const INTERNET_FLAG_PRAGMA_NOCACHE = &H100
Privates Const INTERNET_OPTION_RECEIVE_TIMEOUT als lang = 6

Privates Const UserAgent = „VB“

Privates mConnectionHandle als lang
Private mTimeoutSeconds als lang

Privat Funktion InternetCloseHandle Bibliothek „wininet“ erklären (_
     ByRef hInet als langes _
  ) Als lang

Privat Funktion InternetOpen Bibliothek „wininet“ alias „InternetOpenA“ erklären (_
     ByVal sAgent als Schnur, _
     ByVal lAccessType als lang, _
     ByVal sProxyName als Schnur, _
     ByVal sProxyBypass als Schnur, _
     ByVal lFlags als langes _
  ) Als lang

Privat Funktion InternetOpenUrl Bibliothek „wininet“ alias „InternetOpenUrlA“ erklären (_
     ByVal hInternetSession als lang, _
     ByVal lpszUrl als Schnur, _
     ByVal lpszHeaders als Schnur, _
     ByVal dwHeadersLength als lang, _
     ByVal dwFlags als lang, _
     ByVal dwContext als langes _
) Als lang

Privat Funktion InternetReadFile Bibliothek „wininet“ erklären (_
     ByVal hFile als lang, _
     ByVal sBuffer als Schnur, _
     ByVal lNumBytesToRead als lang, _
     lNumberOfBytesRead als langes _
  ) Als ganze Zahl
 
Privat Funktion InternetSetOption Bibliothek „wininet.dll“ alias „InternetSetOptionA“ erklären (_
     ByVal hInternet als lang, _
     ByVal dwOption als lang, _
     ByRef lpBuffer als irgendwelche, _
     ByVal dwBufferLength als langes _
  ) Als lang

Privates VorClass_Initialize ()

  mConnectionHandle = InternetOpen (UserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
  Wenn mConnectionHandle = 0 dann
     MsgBox „nicht imstande, einen Internetanschluss zu öffnen. Die höchstwahrscheinliche Ursache ist zu viele Handgriffe verursacht worden.“
  Beenden wenn
  mTimeoutSeconds = 30

Enden-Unterseeboot

Privates VorClass_Terminate ()

  InternetCloseHandle mConnectionHandle
     
Enden-Unterseeboot

Allgemeine Funktion GetWebPage (_
     ByVal URL als Schnur, _
     Wahlweise freigestelltes ByVal ProxyUserID als Schnur, _
     Wahlweise freigestelltes ByVal ProxyPassword als Schnur, _
     Wahlweise freigestelltes ByVal TimeoutSeconds als langes _
  ) Als Schnur

'Eine Webseite erhalten.
'
'Syntax
'
'GetWebPage (URL, [ProxyUserID], [ProxyPassword])
'
'URL - Ein komplettes URL zu einer Webseite.
'
'ProxyUserID - die Benutzernummer für den Proxy-Server, wenn überhaupt. Wahlweise freigestellt. Wenn Sie ausgelassen
'dann angenommen kein Proxy-Server n.
'
'ProxyPassword - das Kennwort für den Proxy-Server. Wahlweise freigestellt. Ignoriert wenn
'ProxyUserID ausgelassen en.
'
'TimeoutSeconds - die Zahl den Sekunden, zum zu warten, bis heraus festsetzen. Wahlweise freigestellt.
', wenn sie dann ausgelassen, verwendet 30 Sekunden.

  Schwaches ConnectionHandle als lang
  Schwaches URLHandle als lang
  Schwaches BytesRead als lang
  Schwaches Resultat, wie Boolesch
  Schwaches InputBuffer als Schnur * 10000
  Schwaches PageContent als Schnur
  Schwaches SecurityData als Schnur
 
   Wenn Len (ProxyUserID) > 0 dann
     SecurityData = ProxyUserID
     Wenn Len (ProxyPassword) > 0 dann
        SecurityData = SecurityData u. „: “ U. ProxyPassword
     Beenden wenn
     SecurityData = SecurityData u. „@“
     URL = ersetzen (URL, „: /“, „: /“ u. SecurityData)
  Beenden wenn
 
   Wenn TimeoutSeconds = 0 dann TimeoutSeconds = mTimeoutSeconds
 
   Wenn mConnectionHandle <> 0 dann
     Resultat = InternetSetOption (mConnectionHandle, INTERNET_OPTION_RECEIVE_TIMEOUT, TimeoutSeconds * 1000, Len (TimeoutSeconds))
     URLHandle = InternetOpenUrl (mConnectionHandle, URL, vbNullString, 0, INTERNET_FLAG_RELOAD oder INTERNET_FLAG_PRAGMA_NOCACHE, 0)
     Wenn URLHandle <> 0 dann
        Tun
           InputBuffer = vbNullString
           Resultat = InternetReadFile (URLHandle, InputBuffer, Len (InputBuffer), BytesRead)
           PageContent = PageContent u. verließen (InputBuffer, BytesRead)
        Schlingen während BytesRead > 0
        InternetCloseHandle URLHandle
     Beenden wenn
  Beenden wenn
 
   GetWebPage = PageContent
 
Enden-Funktion

Staatseigentum erhalten ValidInternetConnection () wie Boolesch

  ValidInternetConnection = mConnectionHandle <> 0

Enden-Eigentum

Staatseigentum erhalten TimeoutSeconds () als lang

  TimeoutSeconds = mTimeoutSeconds

Enden-Eigentum

Staatseigentum ließ TimeoutSeconds (_
     ByVal Wert als langes _
  )

  mTimeoutSeconds = Wert

Enden-Eigentum

Kevin
Weitere Lösungen  
 
programming4us programming4us