Pregunta

¡Tengo un televisor 3D y siento que estaría eludir mis responsabilidades (como geek) si al menos no intenté hacer que muestre bonitas imágenes en 3D de mi propia creación!

He hecho una cantidad muy básica de programación de OpenGL antes y, por lo tanto, entiendo los conceptos involucrados, supongo que puedo representarme un simple tetraedro o cubo y hacer que gire un poco; ¿Cómo puedo hacer que mi televisor 3D muestre esta imagen en, bueno, 3D?

Tenga en cuenta que entiendo los conceptos básicos de cómo funciona 3D (represente la misma imagen dos veces desde 2 ángulos diferentes, uno para cada ojo), mi pregunta es sobre la logística de hacer esto (¿necesito un SDK? Etc ...)

  • El televisor que he usado polarización 3D, aunque mi intención es que esta pregunta también sea relevante para otras tecnologías 3D (si es posible)
  • Mi computadora portátil tiene una salida HDMI, que es lo que pretendo usar para conectarme a mi televisor (¿esto hace alguna diferencia sobre el uso de un cable de video VGA / componente?)
  • En el pasado he experimentado con GLUT / OpenGL, sin embargo, si es más fácil / solo posible hacerlo usando una tecnología alternativa, entonces eso está bien
¿Fue útil?

Solución

El principal problema es hacer que su GPU envíe un formato estereoscópico. En el caso de una conexión HDMI, esto no funcionará sin la ayuda de un controlador. Si tiene una GPU de grado profesional (Quadro, Firegl), entonces es probable que admitan OpenGL Quadbuffers, es decir, obtendrá FrameBuffers para el ojo izquierdo y derecho, tanto en la parte posterior como en el frente:

glDrawBuffer(GL_BACK_LEFT);
render_left_eye();

glDrawBuffer(GL_BACK_RIGHT);
render_right_eye();

glDrawBuffer(GL_BACK); // renders to both eyes simultanously
render_screen_level_and_nonstereoscopic();

SwapBuffers();

Desafortunadamente, OpenGL Quad Buffer se considera cosas de grado profesional.

En cambio, NVIDIA (al menos) proporciona una biblioteca de estereoscopia habitual más algunas extensiones para controlarla. El razonamiento principal es que los fragmentos compartidos se deben renderizar solo una vez y luego enviarse a ambos ojos con el paralaje de Apropiate aplicado. Sin embargo, de mis experiencias semiprofesionales con la estereoscopia¹, este tipo de estereoscopificaciones semi/automáticas simplemente no lo cortan. La estereoscopia requiere un control apretado de toda la tubería de "producción", de lo contrario está jodido. Con el sueño de elefantes, llegé a modificar el código central del renderizador.

Envié a las personas en el 3D Devision en NVIDIA algunos escenarios en los que necesita un control exacto sobre el proceso de estereoscopia, y espero que vean la luz y dan acceso al estéreo de tampón Quad también en el hardware de grado de consumo.

Tenga en cuenta que entiendo los conceptos básicos de cómo funciona 3D (rinde la misma imagen dos veces desde 2 ángulos diferentes, uno para cada ojo)

En realidad, no te renderás desde dos ángulos diferentes, sino con un paralaje desplazado y un cambio de lente. De lo contrario, obtienes una distorsión trapezoidal/llave en la horizontal, que son muy, muy desagradables de ver (de hecho, ahora creo que en el proceso de representación estereoscópica se debe divergir ligeramente los ejes ópticos, es decir, hacer todo lo contrario a lo que uno sería ingenuo Do, y "sobre" compensar con el cambio de lente, actualmente estoy preparando un pequeño estudio sobre esto, pero aún necesito reunir mis grupos de pruebas y control).


1: Diablos, soy el tipo que estereografiado por sí solo Sueño de elefantes, lo hizo y lo tengo un Premio en un festival de cine en 3D.

Otros consejos

Debido a que tiene un televisor 3D pasivo, es probable que las vistas de ojo izquierdo y derecho se representen en líneas de escaneo alternativas. (o tal vez en píxeles alternativos en un patrón de tablero de ajedrez)

Por lo tanto, su misión es representar la vista de ojo izquierdo a las líneas de escaneo numeradas uniformes, y la vista del ojo derecho a las líneas de escaneo numeradas impares (o viceversa). Esto se puede lograr a través de operaciones de plantilla OpenGL o, más modernamente, utilizando sombreadores de fragmentos personalizados.

De esta manera, puede evitar toda la tarjeta de video tamponada con cuádruple/GL_BACK_LEFT/GL_BACK_RIGHT, descrito por Datenwolf. Y desea evitar ese enfoque, ya que nunca he encontrado un controlador de video que dirige el 3D estéreo tornado cuádruple a un televisor 3D real.

Estoy de acuerdo con el consejo de Datenwolf de que debe usar el cambio de frustum asimétrico en lugar de la rotación de la escena para generar los puntos de vista del ojo derecho e izquierdo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top