Pergunta : Problemas com amortecedor do estêncil de Opengl

Olá!, o
I am que tem o problema using o amortecedor do estêncil em OpenGL.

Basically que a versão simples de meu problema é this.

I tem um quadrilátero que possa ser considerado como uma superfície coberta “principal” do retângulo. Eu igualmente tenho um número de polígono lisos sentar-se na superfície coberta na mesma altura assim que são coplanar e sofrem de z fighting.

To começ em volta deste sem realmente cortar aqueles polígono fora da superfície coberta principal, eu uso o estêncil buffer.

I igualmente tenho um número outras de formas que podem ou não podem ser transparentes. Estes não são restringidos à superfície coberta assim que poderiam ser, por exemplo, os telhados, o código das paredes etc.

The são como 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); do
glDisable (GL_STENCIL_TEST);

restOfTheShapes.Draw (); o

This todo trabalha muito bem e tudo é lovely.

However, mim precisa de adicionar em algum texto que pode tomar toda a posição no espaço 3D. Isto tem que ser feito antes do código acima de modo que apareça atrás de todo o problema que transparente de surfaces.

The eu começ sou que sempre que o texto é na frente dos otherPolygons toma na cor dos otherPolygons. Isto faz obviamente as pontas do texto unreadable.

Any em como eu poderia impedir este? Eu penso que a razão isto está acontecendo porque eu estou ajustando a função do estêncil sempre à passagem para os otherPolygons assim que o texto está actuando como um stencil.

I tentou cancelar o amortecedor do estêncil antes que não extrair o assoalho mas nada pareça a work.

Thanks adiantado
class= do

Resposta : Problemas com amortecedor do estêncil de Opengl

Eu não sou certo como começ o funcionamento acima do código. Este é código que eu me uso para alcançar Web pages. É terceira ou quarta geração e consideravelmente robusto. Este é um módulo completo do código.

'clsInternetConnection
'
'A classe fornece functionalty para ler Web pages.
'
'Executado como um módulo da classe para o uso com algum projeto de VB ou de VBA.
'
'© Kevin 2008-2010 M. Jones

Opção explícita

Const confidencial INTERNET_OPEN_TYPE_PRECONFIG = 0
Const confidencial INTERNET_FLAG_RELOAD = &H80000000
Const confidencial INTERNET_FLAG_PRAGMA_NOCACHE = &H100
Const confidencial INTERNET_OPTION_RECEIVE_TIMEOUT como por muito tempo = 6

Const confidencial UserAgent = “VB”

mConnectionHandle confidencial como por muito tempo
mTimeoutSeconds confidenciais como por muito tempo

Confidencial declarar o liberal “wininet” de InternetCloseHandle da função (o _
     hInet de ByRef como longo o _
  ) Como por muito tempo

Confidencial declarar o liberal “wininet” aliás “InternetOpenA” de InternetOpen da função (o _
     ByVal sAgent como a corda, _
     lAccessType de ByVal como por muito tempo, _
     sProxyName de ByVal como a corda, _
     sProxyBypass de ByVal como a corda, _
     lFlags de ByVal como longo o _
  ) Como por muito tempo

Confidencial declarar o liberal “wininet” aliás “InternetOpenUrlA” de InternetOpenUrl da função (o _
     hInternetSession de ByVal como por muito tempo, _
     lpszUrl de ByVal como a corda, _
     lpszHeaders de ByVal como a corda, _
     dwHeadersLength de ByVal como por muito tempo, _
     dwFlags de ByVal como por muito tempo, _
     dwContext de ByVal como longo o _
) Como por muito tempo

Confidencial declarar o liberal “wininet” de InternetReadFile da função (o _
     ByVal hFile como por muito tempo, _
     sBuffer de ByVal como a corda, _
     lNumBytesToRead de ByVal como por muito tempo, _
     lNumberOfBytesRead como longo o _
  ) Como o inteiro
 
Confidencial declarar o liberal “wininet.dll” aliás “InternetSetOptionA” de InternetSetOption da função (o _
     hInternet de ByVal como por muito tempo, _
     dwOption de ByVal como por muito tempo, _
     lpBuffer de ByRef como alguns, _
     dwBufferLength de ByVal como longo o _
  ) Como por muito tempo

Class_Initialize secundário confidencial ()

  mConnectionHandle = InternetOpen (UserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
  Se mConnectionHandle = 0 então
     MsgBox “incapaz de abrir uma conexão a internet. A causa mais provável é punhos demais foi criada.”
  Terminar se
  mTimeoutSeconds = 30

Submarino da extremidade

Class_Terminate secundário confidencial ()

  mConnectionHandle de InternetCloseHandle
     
Submarino da extremidade

Função pública GetWebPage (_
     URL de ByVal como a corda, _
     ByVal opcional ProxyUserID como a corda, _
     ByVal opcional ProxyPassword como a corda, _
     ByVal opcional TimeoutSeconds como longo o _
  ) Como a corda

'Começ um Web page.
'
'Sintaxe
'
'GetWebPage (URL, [ProxyUserID], [ProxyPassword])
'
'URL - Um URL completo a um Web page.
'
'ProxyUserID - usuário - identificação para o proxy server, eventualmente. Opcional. Se omitido
'nenhum proxy server é supor então.
'
'ProxyPassword - a senha para o proxy server. Opcional. Ignorado se
'ProxyUserID é omitido.
'
'TimeoutSeconds - o número de segundos a esperar até cronometrar para fora. Opcional.
'Se omitido então 30 segundos são usados.

  ConnectionHandle não ofuscante como por muito tempo
  URLHandle não ofuscante como por muito tempo
  BytesRead não ofuscante como por muito tempo
  Resultado não ofuscante como bôoleano
  InputBuffer não ofuscante como a corda * 10000
  PageContent não ofuscante como a corda
  SecurityData não ofuscante como a corda
 
   Se Len (ProxyUserID) > 0 então
     SecurityData = ProxyUserID
     Se Len (ProxyPassword) > 0 então
        SecurityData = SecurityData & “: ” & ProxyPassword
     Terminar se
     SecurityData = SecurityData & “@”
     O URL = substitui (URL, “: /”, “: /” & SecurityData)
  Terminar se
 
   Se TimeoutSeconds = 0 então TimeoutSeconds = mTimeoutSeconds
 
   Se mConnectionHandle <> 0 então
     Resultado = InternetSetOption (mConnectionHandle, INTERNET_OPTION_RECEIVE_TIMEOUT, TimeoutSeconds * 1000, Len (TimeoutSeconds))
     URLHandle = InternetOpenUrl (mConnectionHandle, URL, vbNullString, 0, INTERNET_FLAG_RELOAD ou INTERNET_FLAG_PRAGMA_NOCACHE, 0)
     Se URLHandle <> 0 então
        Fazer
           InputBuffer = vbNullString
           Resultado = InternetReadFile (URLHandle, InputBuffer, Len (InputBuffer), BytesRead)
           PageContent = PageContent & sairam (InputBuffer, BytesRead)
        Dar laços quando BytesRead > 0
        InternetCloseHandle URLHandle
     Terminar se
  Terminar se
 
   GetWebPage = PageContent
 
Função do fim

A propriedade pública começ ValidInternetConnection () como bôoleana

  ValidInternetConnection = mConnectionHandle <> 0

Propriedade da extremidade

A propriedade pública começ TimeoutSeconds () como por muito tempo

  TimeoutSeconds = mTimeoutSeconds

Propriedade da extremidade

A propriedade pública deixou TimeoutSeconds (o _
     Valor de ByVal como longo o _
  )

  mTimeoutSeconds = valor

Propriedade da extremidade

Kevin
Outras soluções  
 
programming4us programming4us