Fråga : Problem med Opengl stencilerar fungera som buffert

Hi förmiddagen för
I den har, besvärar using stencilera fungera som buffert i OpenGL.

Basically som den enkla versionen av mitt problem är this.

I har en kvadrat, som kan betraktas som ”en huvudsaklig” rektangel däckar område. Jag har också ett nummer av lägenhetpolygonsammanträde på däckaområdet på den samma höjden, så de är coplanar och lider från z fighting.

To får rundan som detta utan faktiskt bita de polygoner ut ur det huvudsakligt däckar område, jag använder stencilera buffer.

I har också ett nummer av annan formar som kan eller inte kan vara genomskinlig. Dessa är inte inskränkt till däckaområdet så kunde vara, till exempel taklägger, väggar som etc.

The kodifierar är som följer:

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); för
glDisable (GL_STENCIL_TEST);

restOfTheShapes.Draw ();

This fungerar fint, och allt är lovely.

However, mig behöver att tillfoga i någon text som kan ta några placerar i utrymme 3D. Detta måste att göras, för de ovannämnda kodifierar, så att den ska verkar som om bak något genomskinligt få för förmiddag för problem I för surfaces.

The är, när som helst texten är främre av otherPolygonsna den tar på färga av otherPolygonsna. Detta gör självfallet spetsarna för text unreadable.

Any på hur jag kunde förhindra denna? Funderare I resonera detta händer, därför att I-förmiddagen som ställer in stencilera, fungerar alltid för att passera för otherPolygonsna, så texten agerar något liknande som en stencil.

I har försökt att göra klar stencilera fungera som buffert, innan det drog däcka, men ingenting verkar till work.

Thanks i advance
" klar "

Svar : Problem med Opengl stencilerar fungera som buffert

Förmiddag I inte sure hur man får det ovannämnt kodifierar arbetet. Detta är kodifierar mig använder för att ta fram rengöringsduksidor. Det är den tredje eller fjärde utvecklingen och nätt robustt. Detta är ett färdigt kodifierar enheten.

'clsInternetConnection
',
'Klassificera ger functionalty för att läsa rengöringsduksidor.
',
'Genomfört som en klassificeraenhet för bruk med någon VB eller VBA projektera.
',
'© Kevin 2008-2010 M. Jones

Explicit alternativ

Privata Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Privata Const INTERNET_FLAG_RELOAD = &H80000000
Privata Const INTERNET_FLAG_PRAGMA_NOCACHE = &H100
Privata Const INTERNET_OPTION_RECEIVE_TIMEOUT som Long = 6

Privata Const UserAgent = ”VB”,

Privat mConnectionHandle som Long
Privata mTimeoutSeconds som Long

Privat förklara fungerar den InternetCloseHandle liben ”wininet” (_,
     ByRef hInet som lång _,
  ) Som Long

Privat förklara fungerar pseudonymen ”InternetOpenA” för InternetOpen Lib”wininet” (_,
     sAgent ByVal som stränger, _,
     ByVal lAccessType som Long, _,
     ByVal sProxyName som stränger, _,
     ByVal sProxyBypass som stränger, _,
     ByVal lFlags som lång _,
  ) Som Long

Privat förklara fungerar pseudonymen ”InternetOpenUrlA” för InternetOpenUrl Lib”wininet” (_,
     ByVal hInternetSession som Long, _,
     ByVal lpszUrl som stränger, _,
     ByVal lpszHeaders som stränger, _,
     ByVal dwHeadersLength som Long, _,
     ByVal dwFlags som Long, _,
     ByVal dwContext som lång _,
) Som Long

Privat förklara fungerar den InternetReadFile liben ”wininet” (_,
     ByVal som är hFile som Long, _,
     ByVal sBuffer som stränger, _,
     ByVal lNumBytesToRead som Long, _,
     lNumberOfBytesRead som lång _,
  ) Som heltal
 
Privat förklara fungerar pseudonymen ”InternetSetOptionA” för den InternetSetOption liben ”wininet.dll” (_,
     ByVal hInternet som Long, _,
     ByVal dwOption som Long, _,
     ByRef lpBuffer som några, _,
     ByVal dwBufferLength som lång _,
  ) Som Long

Privata underClass_Initialize ()

  mConnectionHandle = InternetOpen (UserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
  Om mConnectionHandle = 0 därefter
     Oförmögna MsgBox ”att öppna en internetanslutning. Det mest rimlig orsakar är för många handtag har skapats.”,
  Avsluta om
  mTimeoutSeconds = 30

Avsluta suben

Privata underClass_Terminate ()

  InternetCloseHandle mConnectionHandle
     
Avsluta suben

Allmänhet fungerar GetWebPage (_,
     ByVal URL som stränger, _,
     Valfria ByVal ProxyUserID som stränger, _,
     Valfria ByVal ProxyPassword som stränger, _,
     Valfria ByVal TimeoutSeconds som lång _,
  ) Som stränger

'Få en rengöringsduksida.
',
'Syntax
',
'GetWebPage (URL, [ProxyUserID], [ProxyPassword])
',
'URL - En färdig URL till en rengöringsduksida.
',
'ProxyUserID - användaren - ID för närståendeserveren, om någon. Valfritt. Om utelämnat
'därefter ingen närståendeserver antas.
',
'ProxyPassword - lösenordet för närståendeserveren. Valfritt. Ignorerat om
'ProxyUserID utelämnas.
',
'TimeoutSeconds - numrera av understöder till väntan, till det tajmar ut. Valfritt.
', om utelämnat därefter, 30 understöder används.

  Dunkla ConnectionHandle som Long
  Dunkla URLHandle som Long
  Dunkla BytesRead som Long
  Dunkelt resultat som Boolean
  Dunkla InputBuffer som stränger * 10000
  Dunkla PageContent som stränger
  Dunkla SecurityData som stränger
 
   Om Len (ProxyUserID) > 0 därefter
     SecurityData = ProxyUserID
     Om Len (ProxyPassword) > 0 därefter
        SecurityData = SecurityData & ”: ” & ProxyPassword
     Avsluta om
     SecurityData = SecurityData & ”@”,
     URL = byter ut (URL, ”: /”, ”: /” & SecurityData)
  Avsluta om
 
   Om TimeoutSeconds = 0 därefter TimeoutSeconds = mTimeoutSeconds
 
   Om mConnectionHandle <> 0 därefter
     Resultat = InternetSetOption (mConnectionHandle, INTERNET_OPTION_RECEIVE_TIMEOUT, TimeoutSeconds * 1000, Len (TimeoutSeconds))
     URLHandle = InternetOpenUrl (mConnectionHandle, URL, vbNullString, 0, INTERNET_FLAG_RELOAD eller INTERNET_FLAG_PRAGMA_NOCACHE, 0)
     Om URLHandle <> 0 därefter
        Gör
           InputBuffer = vbNullString
           Resultat = InternetReadFile (URLHandle, InputBuffer, Len (InputBuffer), BytesRead)
           PageContent = PageContent & lämnade (InputBuffer, BytesRead)
        Kretsa stunder BytesRead > 0
        InternetCloseHandle URLHandle
     Avsluta om
  Avsluta om
 
   GetWebPage = PageContent
 
Avsluta fungerar

Den offentliga egenskapen får ValidInternetConnection () som Boolean

  ValidInternetConnection = mConnectionHandle <> 0

Avsluta egenskapen

Den offentliga egenskapen får TimeoutSeconds () som Long

  TimeoutSeconds = mTimeoutSeconds

Avsluta egenskapen

Den offentliga egenskapen l5At TimeoutSeconds (_,
     ByVal värderar som lång _,
  )

  mTimeoutSeconds = värderar

Avsluta egenskapen

Kevin
Andra lösningar  
 
programming4us programming4us