Pregunta

Soy nuevo en OpenGL y estoy leyendo el libro rojo. Ahora, como un ejercicio que quiero llamar manualmente una esfera. Para que estoy dividiendo la esfera en rodajas y las pilas, y por lo tanto consigo múltiples rectángulos, pero cerca de los polos de la esfera consigo triángulos. (Espero que esto estaba claro lo que estoy haciendo). Ahora sé que si se dibuja un polígono con GL_POLYGON y sucede a cortarse consigo mismo, el comportamiento no está definido. Mi pregunta es la siguiente: dado tres puntos v1, v2, v3, que no están en una línea, es que el comportamiento indefinido para hacer esto:

glBegin(GL_POLYGON)
vertex v1
vertex v1
vertex v2
vertex v3
glEnd();

Esto puede ser la combinación de dos preguntas no relacionadas en una sola, pero me gustaría saber también esto: si decido dividir los rectángulos en mi rutina de esfera en forma de triángulos, ¿importa cómo lo hago, que es, por el cual se dividen en diagonal I el rect en dos triángulos? Supongo que para dibujar una esfera de color único no importará, pero yo no sé nada de texturas, shaders, iluminación, etc.

¿Fue útil?

Solución

Esto no es en absoluto un problema. OpenGL siempre tiene que ser capaz de tratar con la posibilidad de rasterising geometría donde múltiples vértices caen en el mismo lugar, ya que incluso diferentes puntos de entrada pueden terminar como el mismo punto de salida en función de sus modelview y de proyección matrices (o su geometría y / o vértice Shader si estás en la tubería programable). Está diseñado para hacer frente en la forma matemáticamente correcta en una amplia variedad de casos extremos.

prueba primaria de OpenGL para pintar si un píxel con la geometría es si su centro se encuentra dentro de los límites matemáticos del * ser primitivo dibujado. Así OpenGL puede hacer que los polígonos que pintan conjuntos discontinuos de píxeles (que por lo general ocurre cuando se vuelven casi infinitamente delgada) o que la pintura no hay píxeles que sea (que tiende a ser cuando terminan realmente pequeño, pero pueden ser técnicamente del arbitrariamente grande tamaño, siempre y cuando aprietan entre los centros de píxeles).

Las pruebas exactas utilizadas a nivel de hardware puede variar de un proveedor a otro y están garantizados para ser correcta sólo para la geometría que es convexa en la pantalla - que es la razón por la mayoría de la gente dice palo para triángulos, ya que son inevitablemente convexa <. / p>

(*) una prueba orientada a la pantalla separada que se aplica a los píxeles exactamente en un límite para asegurar que están atribuidos a solamente exactamente un polígono donde se reúnen los polígonos a lo largo de un borde común

Otros consejos

Cuando estaba haciendo las cosas OpenGL, que rápidamente se pegó a usar sólo triángulos. Son especiales en que un triángulo no es ambigua de ninguna manera.

ejemplo, sin embargo, me imagino que este trabajo, aunque probablemente con artefactos.

cómo dividir un rectángulo debe no importa, con tal de que se preste atención a qué dirección sus triángulos son herida, que forma de definir los puntos ya que esto es lo que dicta su parte delantera y trasera.

Pero definitivamente se adhieren a los triángulos, las imágenes de estos cuatro puntos de un cuadrado

(0,0,0) (1,0,0) (1,0,1) (0,0,1)

bastante fácil ver que es un cuadrado plano, pero lo que si los cambio a

(0,1,0) (1,0,0) (1,1,1) (0,0,1)

¿qué es lo que tienes ahora? que podría ser dibujada como un valle o como una colina. si he definido esta forma con triángulos, usted sabe exactamente lo que estoy describiendo

(0,1,0) (1,0,0) (1,1,1) (1,1,1) (1,0,1) (0,1,0)

A colina como forma

bien ... así que el lado seguido un poco aquí ... mi punto es, no sé lo que su código haría en la práctica, pero no creo que se debe utilizar de ninguna manera. y cómo se separaron rectángulos deben no importa el tiempo que sus triángulos se describen de la manera correcta.

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