Cuestión : Problemas con el almacenador intermediario de la plantilla de Opengl

Hola, el
I que tiene apuro usar el almacenador intermediario de la plantilla en OpenGL.

Basically que la versión simple de mi problema es this.

I tiene un patio que se pueda mirar como superficie cubierta “principal” del rectángulo. También tengo un número de polígonos planos el sentarse en la superficie cubierta en la misma altura así que son coplanarios y sufren de z fighting.

To salen alrededor de esto sin realmente cortar esos polígonos de la superficie cubierta principal, yo utilizan la plantilla buffer.

I también hacen que un número de otras formas esas los mayo o mayo no sean transparentes. Éstos no se restringen a la superficie cubierta así que podrían ser, por ejemplo, las azoteas, el código de las paredes etc.

The es como sigue:

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 (); el

This todo trabaja muy bien y todo es lovely.

However, yo necesita agregar en un poco de texto que pueda tomar cualquier posición en el espacio 3D. Esto tiene que ser hecha antes del código antedicho de modo que aparezca detrás de cualquier problema transparente de surfaces.

The que esté consiguiendo soy que siempre que el texto esté delante de los otherPolygons adquiera el color de los otherPolygons. ¿Esto hace obviamente las extremidades del texto unreadable.

Any en cómo podría prevenir esto? Pienso que está sucediendo la razón esto porque estoy fijando la función de la plantilla siempre al paso para los otherPolygons así que el texto está actuando como un stencil.

I ha intentado despejar el almacenador intermediario de la plantilla antes de que el dibujo del piso pero nada parezca a work.

Thanks por adelantado
class= del

Respuesta : Problemas con el almacenador intermediario de la plantilla de Opengl

No estoy seguro cómo conseguir el funcionamiento antedicho del código. Éste es código que utilizo para tener acceso a Web pages. Es tercer o de cuarta generación y bastante robusto. Esto es un módulo completo del código.

'clsInternetConnection
'
La 'clase proporciona functionalty para leer Web pages.
'
'Ejecutado como un módulo de la clase para el uso con cualquie proyecto de VB o de VBA.
'
'© Kevin 2008-2010 M. Jones

Opción explícita

Const privado INTERNET_OPEN_TYPE_PRECONFIG = 0
Const privado INTERNET_FLAG_RELOAD = &H80000000
Const privado INTERNET_FLAG_PRAGMA_NOCACHE = &H100
Const privado INTERNET_OPTION_RECEIVE_TIMEOUT como de largo = 6

Const privado UserAgent = “VB”

mConnectionHandle privado como de largo
mTimeoutSeconds privados como de largo

Privado declarar la liberación “wininet” de InternetCloseHandle de la función (el _
     hInet de ByRef como largo _
  ) Como de largo

Privado declarar la liberación “wininet” alias “InternetOpenA” de InternetOpen de la función (el _
     ByVal sAgent como secuencia, _
     lAccessType de ByVal como de largo, _
     sProxyName de ByVal como secuencia, _
     sProxyBypass de ByVal como secuencia, _
     lFlags de ByVal como largo _
  ) Como de largo

Privado declarar la liberación “wininet” alias “InternetOpenUrlA” de InternetOpenUrl de la función (el _
     hInternetSession de ByVal como de largo, _
     lpszUrl de ByVal como secuencia, _
     lpszHeaders de ByVal como secuencia, _
     dwHeadersLength de ByVal como de largo, _
     dwFlags de ByVal como de largo, _
     dwContext de ByVal como largo _
) Como de largo

Privado declarar la liberación “wininet” de InternetReadFile de la función (el _
     ByVal hFile como de largo, _
     sBuffer de ByVal como secuencia, _
     lNumBytesToRead de ByVal como de largo, _
     lNumberOfBytesRead como largo _
  ) Como número entero
 
Privado declarar la liberación “wininet.dll” alias “InternetSetOptionA” de InternetSetOption de la función (el _
     hInternet de ByVal como de largo, _
     dwOption de ByVal como de largo, _
     lpBuffer de ByRef como cualesquiera, _
     dwBufferLength de ByVal como largo _
  ) Como de largo

Class_Initialize secundario privado ()

  mConnectionHandle = InternetOpen (UserAgent, INTERNET_OPEN_TYPE_PRECONFIG, el vbNullString, el vbNullString, 0)
  Si mConnectionHandle = 0 entonces
     MsgBox “incapaz de abrir una conexión a internet. Se ha creado la causa más probable es demasiadas manijas.”
  Terminar si
  mTimeoutSeconds = 30

Submarino del extremo

Class_Terminate secundario privado ()

  mConnectionHandle de InternetCloseHandle
     
Submarino del extremo

Función pública GetWebPage (_
     URL de ByVal como secuencia, _
     ByVal opcional ProxyUserID como secuencia, _
     ByVal opcional ProxyPassword como secuencia, _
     ByVal opcional TimeoutSeconds como largo _
  ) Como secuencia

'Conseguir un Web page.
'
'Sintaxis
'
'GetWebPage (URL, [ProxyUserID], [ProxyPassword])
'
'URL - Un URL completo a un Web page.
'
'ProxyUserID - la identificación del usuario para el proxy server, eventualmente. Opcional. Si está omitido
'entonces no se asume ningún proxy server.
'
'ProxyPassword - la contraseña para el proxy server. Opcional. No hecho caso si
Se omite 'ProxyUserID.
'
'TimeoutSeconds - el número de segundos a esperar hasta medir el tiempo hacia fuera. Opcional.
'Si entonces están omitidos se utilizan 30 segundos.

  ConnectionHandle dévil como de largo
  URLHandle dévil como de largo
  BytesRead dévil como de largo
  Resultado dévil como boleano
  InputBuffer dévil como secuencia * 10000
  PageContent dévil como secuencia
  SecurityData dévil como secuencia
 
   Si Len (ProxyUserID) > 0 entonces
     SecurityData = ProxyUserID
     Si Len (ProxyPassword) > 0 entonces
        SecurityData = SecurityData y “: ” Y ProxyPassword
     Terminar si
     SecurityData = SecurityData y “@”
     El URL = substituye (URL, “: /”, “: /” y SecurityData)
  Terminar si
 
   Si TimeoutSeconds = 0 entonces TimeoutSeconds = mTimeoutSeconds
 
   Si mConnectionHandle <> 0 entonces
     Resultado = InternetSetOption (mConnectionHandle, INTERNET_OPTION_RECEIVE_TIMEOUT, TimeoutSeconds * 1000, Len (TimeoutSeconds))
     URLHandle = InternetOpenUrl (mConnectionHandle, URL, el vbNullString, 0, INTERNET_FLAG_RELOAD o INTERNET_FLAG_PRAGMA_NOCACHE, 0)
     Si URLHandle <> 0 entonces
        Hacer
           InputBuffer = vbNullString
           Resultado = InternetReadFile (URLHandle, InputBuffer, Len (InputBuffer), BytesRead)
           PageContent = PageContent y se fueron (InputBuffer, BytesRead)
        Colocar mientras que BytesRead > 0
        InternetCloseHandle URLHandle
     Terminar si
  Terminar si
 
   GetWebPage = PageContent
 
Función del final

La característica pública consigue ValidInternetConnection () como boleana

  ValidInternetConnection = mConnectionHandle <> 0

Característica del extremo

La característica pública consigue TimeoutSeconds () como de largo

  TimeoutSeconds = mTimeoutSeconds

Característica del extremo

La característica pública dejó TimeoutSeconds (el _
     Valor de ByVal como largo _
  )

  mTimeoutSeconds = valor

Característica del extremo

Kevin
Otras soluciones  
 
programming4us programming4us