Questione : Problemi con l'amplificatore dello stampino di Opengl

Ciao, il
I che ha difficoltà using l'amplificatore dello stampino in OpenGL.

Basically che la versione semplice del mio problema è this.

I ha un quadrato che può essere considerare come una superficie coperta “principale„ di rettangolo. Inoltre ho un certo numero di poligoni piani sedermi sulla superficie coperta alla stessa altezza in modo da sono complanari e soffrono dalla z fighting.

To circondano questo senza realmente tagliare quei poligoni dalla superficie coperta principale, io utilizzano lo stampino buffer.

I inoltre fanno un certo numero di altre non essere figure quelle i maggio o maggio trasparenti. Questi non si limitano alla superficie coperta in modo da potrebbero essere, per esempio, i tetti, il codice delle pareti etc.

The è come segue:

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); del
glDisable (GL_STENCIL_TEST);

restOfTheShapes.Draw (); il

This tutto funziona benissimo e tutto è lovely.

However, io deve aggiungere in certo testo che può prendere tutta la posizione nello spazio 3D. Ciò deve essere fatta prima del codice di cui sopra in modo che compaia dietro tutto il problema che trasparente di surfaces.

The sto ottenendo sono che ogni volta che il testo è davanti ai otherPolygons intraprende il colore dei otherPolygons. Ciò fa ovviamente le punte del testo unreadable.

Any su come potrei impedire questo? Penso che il motivo questo stia accadendo perché sto fissando sempre la funzione dello stampino al passaggio per i otherPolygons in modo da il testo sta comportandosi come uno stencil.

I ha provato a rimuovere l'amplificatore dello stampino prima che non disegnare il pavimento ma niente sembri in anticipo a work.

Thanks
class= del

Risposta : Problemi con l'amplificatore dello stampino di Opengl

Non sono sicuro come ottenere il funzionamento di cui sopra di codice. Ciò è codice che uso per accedere ai Web pagi. È terza o della quarta generazione ed abbastanza robusta. Ciò è un modulo completo di codice.

'clsInternetConnection
'
'Il codice categoria fornisce functionalty per leggere i Web pagi.
'
'D'applicazione come un modulo del codice categoria per uso con qualsiasi progetto di VBA o di VB.
'
'© Kevin 2008-2010 M. Jones

Opzione esplicita

Const riservato INTERNET_OPEN_TYPE_PRECONFIG = 0
Const riservato INTERNET_FLAG_RELOAD = &H80000000
Const riservato INTERNET_FLAG_PRAGMA_NOCACHE = &H100
Const riservato INTERNET_OPTION_RECEIVE_TIMEOUT come lungamente = 6

Const riservato UserAgent = “VB„

mConnectionHandle riservato come lungamente
mTimeoutSeconds riservati come lungamente

Riservato dichiarare il movimento di liberazione “wininet„ di InternetCloseHandle di funzione (_
     hInet di ByRef come lungo _
  ) Come lungamente

Riservato dichiarare il movimento di liberazione “il wininet„ altrimenti detto “InternetOpenA„ di InternetOpen di funzione (_
     ByVal sAgent come stringa, _
     lAccessType di ByVal come lungamente, _
     sProxyName di ByVal come stringa, _
     sProxyBypass di ByVal come stringa, _
     lFlags di ByVal come lungo _
  ) Come lungamente

Riservato dichiarare il movimento di liberazione “il wininet„ altrimenti detto “InternetOpenUrlA„ di InternetOpenUrl di funzione (_
     hInternetSession di ByVal come lungamente, _
     lpszUrl di ByVal come stringa, _
     lpszHeaders di ByVal come stringa, _
     dwHeadersLength di ByVal come lungamente, _
     dwFlags di ByVal come lungamente, _
     dwContext di ByVal come lungo _
) Come lungamente

Riservato dichiarare il movimento di liberazione “wininet„ di InternetReadFile di funzione (_
     ByVal hFile come lungamente, _
     sBuffer di ByVal come stringa, _
     lNumBytesToRead di ByVal come lungamente, _
     lNumberOfBytesRead come lungo _
  ) Come numero intero
 
Riservato dichiarare il movimento di liberazione “wininet.dll„ altrimenti detto “InternetSetOptionA„ di InternetSetOption di funzione (_
     hInternet di ByVal come lungamente, _
     dwOption di ByVal come lungamente, _
     lpBuffer di ByRef come c'è ne, _
     dwBufferLength di ByVal come lungo _
  ) Come lungamente

Class_Initialize secondario riservato ()

  mConnectionHandle = InternetOpen (UserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
  Se mConnectionHandle = 0 allora
     MsgBox “incapace di aprire un collegamento a Internet. La causa più probabile è troppe maniglie è stata generata.„
  Concluder se
  mTimeoutSeconds = 30

Sommergibile dell'estremità

Class_Terminate secondario riservato ()

  mConnectionHandle di InternetCloseHandle
     
Sommergibile dell'estremità

Funzione pubblica GetWebPage (_
     URL di ByVal come stringa, _
     ByVal facoltativo ProxyUserID come stringa, _
     ByVal facoltativo ProxyPassword come stringa, _
     ByVal facoltativo TimeoutSeconds come lungo _
  ) Come stringa

'Ottenere un Web page.
'
'Sintassi
'
'GetWebPage (URL, [ProxyUserID], [ProxyPassword])
'
'URL - Un URL completo ad un Web page.
'
'ProxyUserID - l'identificazione usuario per il proxy server, se ce n'è. Facoltativo. Se omesso
'allora nessun proxy server è presupposto.
'
'ProxyPassword - la parola d'accesso per il proxy server. Facoltativo. Ignorato se
'ProxyUserID è omesso.
'
'TimeoutSeconds - il numero dei secondi da attendere fino a cronometrare fuori. Facoltativo.
'Se allora omesso 30 secondi è usato.

  ConnectionHandle fioco come lungamente
  URLHandle fioco come lungamente
  BytesRead fioco come lungamente
  Risultato fioco come booleano
  InputBuffer fioco come stringa * 10000
  PageContent fioco come stringa
  SecurityData fioco come stringa
 
   Se Len (ProxyUserID) > 0 allora
     SecurityData = ProxyUserID
     Se Len (ProxyPassword) > 0 allora
        SecurityData = SecurityData & “: „ & ProxyPassword
     Concluder se
     SecurityData = SecurityData & “@„
     Il URL = sostituisce (URL, “: /„, “: /„ & SecurityData)
  Concluder se
 
   Se TimeoutSeconds = 0 allora TimeoutSeconds = mTimeoutSeconds
 
   Se mConnectionHandle <> 0 allora
     Risultato = InternetSetOption (mConnectionHandle, INTERNET_OPTION_RECEIVE_TIMEOUT, TimeoutSeconds * 1000, Len (TimeoutSeconds))
     URLHandle = InternetOpenUrl (mConnectionHandle, URL, vbNullString, 0, INTERNET_FLAG_RELOAD o INTERNET_FLAG_PRAGMA_NOCACHE, 0)
     Se URLHandle <> 0 allora
        Fare
           InputBuffer = vbNullString
           Risultato = InternetReadFile (URLHandle, InputBuffer, Len (InputBuffer), BytesRead)
           PageContent = PageContent & hanno andato (InputBuffer, BytesRead)
        Collegare mentre BytesRead > 0
        InternetCloseHandle URLHandle
     Concluder se
  Concluder se
 
   GetWebPage = PageContent
 
Funzione di conclusione

La proprietà pubblica ottiene ValidInternetConnection () come booleana

  ValidInternetConnection = mConnectionHandle <> 0

Proprietà dell'estremità

La proprietà pubblica ottiene TimeoutSeconds () come lungamente

  TimeoutSeconds = mTimeoutSeconds

Proprietà dell'estremità

La proprietà pubblica ha lasciato TimeoutSeconds (_
     Valore di ByVal come lungo _
  )

  mTimeoutSeconds = valore

Proprietà dell'estremità

Kevin
Altre soluzioni  
 
programming4us programming4us