2010-05-30 11 views
10

Los círculos son una de las entidades geométricas básicas. Sin embargo, no hay primitivos definidos en OpenGL para esto, como líneas o polígonos. ¿Porque? ¡Es un poco molesto incluir encabezados personalizados para esto todo el tiempo!¿Por qué no hay círculo o primitiva de elipse en OpenGL?

¿Alguna razón específica para omitirlo?

+9

Para que podamos pedirle a las personas que escriban una función circular en entrevistas técnicas. –

Respuesta

17

Mientras que los círculos pueden ser formas básicas que no son tan básico como puntos, líneas o triángulos cuando se trata de rasterización. Las primeras tarjetas gráficas con aceleración 3D fueron diseñadas para hacer una cosa muy bien, trazar triángulos (y líneas y puntos porque eran triviales para agregar). Agregar formas más complejas habría hecho que la tarjeta sea mucho más costosa a la vez que agregaba poca funcionalidad.

Pero hay otra razón para no incluir círculos/elipsis. Ellos no se conectan No puede construir un modelo 3D a partir de ellos y no puede conectar triángulos a ellos sin agregar espacios o partes superpuestas. Entonces, para que los círculos sean útiles, también necesita otras formas, como curvas y otras superficies más avanzadas (por ejemplo, NURBS). Los círculos solos solo son útiles como "puntos grandes" que también se pueden hacer con un cuadrángulo y una textura en forma de círculo, o triángulos.

Si está utilizando "encabezados personalizados" para círculos, debe tener en cuenta que probablemente crean un modelo de triángulo que forma sus "círculos".

+0

¿Puedes explicar a qué te refieres con "Encabezados personalizados"? –

+1

Es de la pregunta. No sé exactamente qué quiso decir Ram con eso, pero supongo que es una biblioteca con algunas funciones de utilidad OpenGL. –

+0

* pata-cara * Bien, debería haber leído la pregunta primero, ¿eh? Gracias. –

2

Porque históricamente, las tarjetas de video han generado puntos, líneas y triángulos.

Calcule las curvas con líneas lo suficientemente cortas para que la tarjeta de video no tenga que hacerlo.

+0

+1 por el downvote injusto. Esta es una respuesta válida. –

0

Siempre puede usar gluSphere (si una forma tridimensional es lo que está buscando).

Si desea dibujar un círculo bidimensional, tiene que utilizar métodos personalizados. Me gustaría ir con un abanico de triángulo.

Las primitivas son llamadas primitivas por una razón :)

1

decir esto depende de la resolución

2

Debido a que las tarjetas gráficas operan en puntos en 3 dimensiones, líneas y triángulos. Un círculo requiere curvas o splines. No puede ser perfectamente representado por una primitiva 3D "normal", solo aproximada como un N-gon (por lo que se verá como un círculo a cierta distancia). Si quieres un círculo, escribe la rutina tú mismo (no es difícil de hacer). O dibujarlo como un N-gon, o hacer un cuadrado (2 triángulos) y cortar un círculo con fragmentador de sombreado (se puede obtener un círculo perfecto de esta manera).

+1

+1. Para ser colgantes, los sombreadores de fragmentos solo aproximan el círculo a los píxeles de la pantalla. No es un círculo perfecto. = P –

+0

@Xavier Ho: Aún así, con un sombreador de fragmentos obtendrás una aproximación perfecta casi a cualquier distancia del círculo (a muy poca distancia puede haber errores de precisión). Ponga un poco de antialiasing en el cálculo, y no habrá nada de qué quejarse. – SigTerm

+0

"Aproximación perfecta" - ¡Yo llamo oxímoron! Y sí, estarías en lo cierto. –

Cuestiones relacionadas