tutorial example español python opengl graphics triangulation glu

python - example - pyopengl tutorial español



¿Puedo ejecutar GLU(OpenGL) en un servidor sin cabeza? (5)

estamos tratando de usar las funciones de tesselación de GLU en un servidor GNU / linux sin cabeza. Nos gustaría usar PyOpenGL para eso, pero el problema es que falla en una llamada a gluNewTess (falla de segmentación)

gdb backtrace dice que está en glGetError, ¿eso me hace pensar que la teselación de GLU necesita un contexto GL? ¿O es solo algo complejo en PyOpenGL?

Traté de encontrar información sobre cómo inicializar el contexto GL en una máquina sin cabeza (y virtualizada), sin suerte. Cualquier información sobre estos temas es apreciada.


Puedes hacer renderizado fuera de la pantalla. Más sobre esto aquí .

Depende de lo que sea compatible con su tarjeta gráfica y el sistema operativo. Si tienes un chip gráfico antiguo, puedes usar la biblioteca mesa OS (pero obtienes la representación del software). Si es más nuevo, puede usar pbuffers.


GLU requiere un contexto de OpenGL válido, sí (incluso si fuera posible llamar al teselador solo sin un contexto).

Si no tiene una ventana, debería ser posible, pero difícil. Vea la wiki de OpenGL (y léala 3 veces, es bastante difícil de seguir).

La idea básica es que necesita una extensión especial para crear su contexto especial sin ventanas. Por lo tanto, debe llamar a wglGetExtensionsStringARB para obtener esta extensión. ¡Pero para poder llamarlo, primero tienes que tener un contexto! (Sí, esto es una pesadilla. Tengo quien creó esta API). Así que cree un contexto de la manera habitual (y espero que funcione incluso si no tiene una pantalla), obtenga su extensión, llame a wglCreateContextAttribsARB

Nota: la especificación de la extensión dice que When this extension is supported, calling wglCreateContext(hdc) is equivalent to calling wglCreateContextAttribs(hdc,0,NULL) , así que tal vez, tal vez podría apostar junto con una creación de contexto simple.


más fácil:

Xvfb :5 -screen 0 800x600x24 & export DISPLAY=:5 glxgears

en lugar de glxgears, reemplace con su programa y pegue un ''glutInit ()'' en su código python para obtener una ventana GL básica.

Más fuerte:

Reescribe tu programa para crear un contexto GL utilizando la biblioteca OSMesa

el más duro:

arranca las tripas del teselador de GLU y pégalo en tu proyecto (descarga el código fuente de MesaLib)


He estado utilizando el tesselador de glu sin contexto OpenGL por un tiempo, esto funciona en Windows y Linux (no con python, pero C ++), por lo que es posible en teoría. Si configura las devoluciones de llamada de error en gluTessCallback (), consulte el libro rojo , probablemente no llame a glGetError.


La mayoría de las opciones en el enlace de VJovic no están aceleradas por hardware y todas están en desuso en favor de la extensión del Objeto OpenGL Framebuffer (fíjese en la fecha: 1997!). Además, la representación fuera de pantalla no es la solución completa, como señaló Calvin1602, necesita un contexto OpenGL (a excepción de OSMesa, que utiliza la representación de software).

Nuestro laboratorio de investigación ha estado haciendo renderizado headgl sin cabeza durante aproximadamente un año ( puede ver mi pregunta relacionada con el servidor relacionado aquí ), y descubrimos que lo más fácil era dar a los usuarios acceso remoto a la pantalla X local del servidor. Las desventajas: (a) el acceso remoto al servidor x es considerado por algunos como una mala práctica de seguridad si se hace incorrectamente, y (b) se abre una ventana ficticia aparecerá en la pantalla del servidor, pero si no tiene cabeza, este no debería importar Algunas otras opciones se describen en el enlace ServerFault también, si está interesado.

Necesita una x-pantalla ejecutándose en el servidor, y debe tenerse en cuenta que algunas tarjetas de video requieren un monitor físico que se adjuntará si desea iniciar una pantalla x. El controlador de NVidia le permite solucionar esto utilizando la opción ConnectedMonitor en xorg.conf. . Otra opción que he usado en el pasado es construir un enchufe de monitor ficticio. eso hace que el sistema piense que hay un monitor CRT conectado. Probablemente haya otras soluciones.

¡Buena suerte!

https://serverfault.com/questions/186805/remote-offscreen-rendering