QuickDraw 3D , o QD3D para abreviar, es una API de gráficos 3D desarrollada por Apple Inc. (entonces Apple Computer, Inc.) a partir de 1995, originalmente para sus computadoras Macintosh , pero entregada como un sistema multiplataforma.
QD3D se separó en dos capas. Un sistema de nivel inferior conocido como RAVE (Rendering Acceleration Virtual Engine) proporcionó una capa de abstracción de hardware con una funcionalidad similar a Direct3D o versiones reducidas de OpenGL como MiniGL . Además de esto, había un sistema de gráficos de escena orientado a objetos , QD3D propiamente dicho, que manejaba la carga y manipulación del modelo a un nivel similar a OpenGL ++ . [1] El sistema también proporcionó una serie de utilidades de alto nivel para la conversión de formatos de archivo y una aplicación de visualización estándar para Mac OS.
QD3D tuvo poco impacto en el mercado de las computadoras, tanto como resultado de la atribulada posición de Apple a mediados de la década de 1990, como de varias decisiones fatídicas tomadas por el equipo de diseño sobre cambios futuros en el mercado de hardware 3D que no se hicieron realidad. Apple abandonó el trabajo en QD3D después de que Steve Jobs asumiera el mando en 1998 y anunció que el futuro soporte 3D en Mac OS se basaría en OpenGL .
OpenGL en la década de 1990
La API 3D canónica de la década de 1990 fue OpenGL. Esto había sido escrito por SGI e inicialmente coincidía estrechamente con las capacidades de sus sistemas de estaciones de trabajo , operando como una capa de abstracción de hardware. La API de OpenGL consistía principalmente en instrucciones de configuración de estado para configurar modos de dibujo como el color de la pintura o la posición de la cámara, y un sistema para enviar geometría al sistema, normalmente como mallas de triángulos. La combinación de estas instrucciones se guardó en una lista de visualización que luego se renderizó para producir la salida.
OpenGL carecía de muchas características necesarias para producir un programa 3D completo. Guardar y cargar datos de geometría, recopilar esos datos en grupos para producir objetos de modelo y el control del estado quedó en manos del programador. Esto se consideró una ventaja en una era en la que el rendimiento era limitado y el control directo sobre este tipo de funciones era una ruta para mejorar el rendimiento.
Sin embargo, esta falta de funcionalidad de alto nivel dificultaba la escritura rápida de programas simples, además de provocar una falta de interoperabilidad. Se iniciaron varios esfuerzos para proporcionar API estandarizadas de nivel superior, como OpenGL ++ y (más tarde) Fahrenheit , que manejaban muchas de las tareas de contabilidad más comunes, como cargar geometría desde archivos y proporcionar una pantalla. Estos sistemas de gráficos de escena estandarizados significaban que el programador solo tenía que proporcionar la GUI para el programa.
Si bien OpenGL es principalmente de bajo nivel, incluyó algunos conceptos de nivel superior que solo se usaron realmente en los sistemas SGI. Esto llevó a otra serie de API que eliminaron estas características para facilitar la implementación en hardware común. El más conocido de ellos es MiniGL , que no es una API separada, sino simplemente una lista de aquellas funciones en OpenGL que están garantizadas para ser compatibles con todo el hardware, asegurando así que un programa que se limita a esas llamadas se ejecutará con el máximo rendimiento.
QD3D
QD3D fue diseñado desde el principio para operar en computadoras con considerablemente menos energía que las estaciones de trabajo. Esto llevó a un esfuerzo concertado para separar limpiamente las capas superior e inferior de la API, con el sistema RAVE de nivel inferior más cercano a MiniGL desde el principio. Esto tenía la ventaja de proporcionar una API limpia y mínima que podía trasladarse más fácilmente a diferentes hardware.
Dado que solo era necesario portar RAVE, las API de la capa superior se podían hacer tan complejas como se deseara, y el sistema QD3D incluía un gráfico de escena completo, un formato de archivo de modelo estandarizado, 3DMF e incluso objetos GUI básicos que los utilizaban. Para escribir una aplicación simple en QD3D, el programador solo tuvo que incluir algunas bibliotecas y luego colocar los elementos de la GUI en su programa usando ResEdit o herramientas similares.
La funcionalidad adicional incluía un sistema de renderizado "plug-in", que permitía que una aplicación renderizara una escena en una variedad de estilos. Sin cambiar el modelo o su código, los desarrolladores podrían renderizar la misma escena de forma interactiva o (con complementos adecuados) utilizando métodos como el trazado de rayos o el sombreado phong.
La API QD3D era un sistema similar a un objeto basado en código C puro . Las diversas estructuras se construyeron cuidadosamente para contener indicadores de otros objetos importantes. Los objetos conocían todo el estado de dibujo que necesitaban, eliminando así el código que normalmente se necesitaría al desarrollar bajo OpenGL.
En el lado negativo, las capas de QD3D introdujeron problemas de rendimiento. Por ejemplo, el sistema almacena y establece automáticamente el estado de cada objeto antes de dibujar. Esto facilitó mucho el desarrollo, pero también hizo que el rendimiento cayera de una manera sobre la que el desarrollador no tenía control directo. Aquellas aplicaciones que exigen rendimiento por encima de la facilidad de programación podrían optar por utilizar la capa RAVE directamente.
Otra área de preocupación es que el gráfico de escena estaba oculto a la vista, y se pueden realizar mejoras considerables en el rendimiento de la representación si se "selecciona" cuidadosamente el gráfico para eliminar los objetos que no están a la vista. Aunque las versiones posteriores de QD3D obtuvieron la capacidad de realizar automáticamente la eliminación selectiva de la visibilidad (en función de la agrupación de objetos en el gráfico de escena), la falta de compatibilidad de OpenGL para esta función generalmente obligaba a los desarrolladores a implementarla desde el principio.
Cambiar a OpenGL
El buen rendimiento 3D de bajo nivel depende no solo del programador para proporcionar modelos eficientes, sino también de controladores de alta calidad para el hardware. Aunque RAVE fue diseñado para ser multiplataforma, solo los desarrolladores de hardware que admitían Mac ( ATI , NVIDIA y 3dfx ) producían controladores para él. Esto dejó cualquier comparación entre QD3D y las API alternativas unilateral, ya que fuera de Mac QD3D se vio obligado a recurrir a una implementación de software RAVE.
A medida que OpenGL ganaba terreno en Windows (a menudo atribuido a id Software , que defendía la API sobre D3D), los desarrolladores de hardware estaban diseñando cada vez más hardware futuro en función del conjunto de características futuras planificadas para D3D de Microsoft. A través de su mecanismo de extensión, OpenGL pudo rastrear estos cambios con relativa facilidad, mientras que el conjunto de características de RAVE permaneció relativamente fijo.
En la Expo Macworld en enero de 1999, Apple anunció que ni QuickDraw 3D ni RAVE serían incluidos en Mac OS X . La compañía despidió al personal de desarrollo en junio de 1999 [ cita requerida ] , reemplazando la tecnología interna con OpenGL después de comprar una implementación de Mac y personal clave de Conix Enterprises .
Después de que Apple retiró el soporte para QD3D, se desarrolló externamente una implementación de código abierto de la API de QD3D. Conocida como Quesa , esta implementación combina los conceptos de nivel superior de QD3D con un renderizador OpenGL. Además de la aceleración de hardware multiplataforma, esta biblioteca también permite el uso de la API QD3D en plataformas nunca admitidas por Apple (como Linux ). La última versión es de 2008.
Aplicaciones
Entre los cientos de aplicaciones publicadas que emplean RAVE se encuentran:
- Calculadora gráfica en la década de 1990, incluida con cada Power Macintosh
- Terremoto
- Descenso II
- Irreal
- Carmageddon 2
- Policía del futuro: LAPD
- WaterRace
- StrataVision 3D
- Infini-D
Ver también
Referencias
enlaces externos
- Programación de gráficos 3D con QuickDraw 3D 1.5.4 - manual QD3D (archivado)
- QuickDraw 3D: Una nueva dimensión para gráficos de Macintosh - artículo de presentación, junio de 1995
- QuickDraw 3D: preguntas y respuestas
- Página de inicio del proyecto Quesa