La forma de generar los bordes y las caras de una forma primitiva como una caja, un cono y todos los que citó es generarlos al mismo tiempo que crea los vértices. De hecho, debe crear los vértices de una manera lógica que facilite el cálculo de los bordes y las caras en consecuencia.
Hay algoritmos que toman como entrada un conjunto de puntos en el espacio y calculan una llamada " triangulación de conjunto de puntos " sobre él, pero el problema de la triangulación de conjunto de puntos es NP-completo , por lo que es más rápido hacer los bordes y las caras. a medida que avanza, solo tiene que calcular los vértices y dejar que un algoritmo haga el trabajo. Solo para hacerle saber que esta solución existe.
Además de esta solución ineficiente, creo que solo puede tratar las primitivas según el caso, como en los ejemplos que siguen.
Una malla es vértices y caras . Los bordes están contenidos dentro de la descripción de las caras a menos que su malla contenga líneas que no formen caras. Los vértices son tuplas de 3 coordenadas de punto flotante. Los bordes son simplemente pares de referencias a los vértices, pero de nuevo seguramente no los necesitará. Digamos, por ejemplo, que sus vértices están en una matriz indexada. Bueno, tus bordes podrían ser pares de índices de esa matriz. Las caras son trillizos de referencias a vértices o trillizos de índices en el caso de matriz indexada .
Debería poder contar los vértices, aristas y caras que conforman cada una de estas formas primitivas porque poder contarlas significa comprender las propiedades del objeto que le ayuda a diseñar el método con el que las construirá, utilizando bucles y otras herramientas como veremos.
Cono
Para un cono con n + 2 vértices, 3n aristas y 2n caras:
- Haz dos vértices separados.
- Haz un círculo alrededor de uno de los vértices (el vértice base), que está dentro de un plano perpendicular al segmento entre los dos primeros vértices. Espero que puedas hacer un círculo usando trigonometría, ¿verdad? Eso ya son todos los vértices del cono. Eso también es un tercio de todos los bordes (hay n bordes en el círculo y 3n en total).
- Haz n aristas desde el vértice base hasta los n vértices del círculo. Puedes hacer la mitad de las caras (eso es n caras) mientras haces eso.
- Haz n aristas desde el vértice de la punta hasta los n vértices del círculo. Puedes hacer la otra mitad de las caras (eso es n caras) mientras haces eso.
1)
2)
3)
4)
Resultado final:
También puede crear los bordes y las caras mientras ejecuta el bucle que forma el círculo. La misma complejidad, la misma cosa. Haga un vértice en el círculo, guárdelo en su conjunto de vértices, agregue el borde correspondiente (par de índices) al conjunto de pares de índices si lo desea, y finalmente agregue la cara correspondiente a su conjunto de tripletas de índices . Pasar al siguiente vértice.
El cilindro y el tubo: no hacen el mismo trabajo dos veces, y quads
Nuevamente, para el tubo comienza con un vértice y un círculo que será el centro del disco superior o inferior del cilindro:
- Haz un vértice.
- Haz un círculo alrededor del vértice. Agregue aristas (si desea aristas) entre los vértices sucesivos del círculo y entre el vértice central y cada vértice del círculo. Agregue caras entre cada triplete de vértices formados por el vértice central y dos vértices sucesivos en el círculo.
- Duplique todo eso, traduzca la copia en la dirección perpendicular a la base que acaba de hacer, por la longitud del cilindro deseado.
- Enlace la parte superior y la parte inferior.
Para vincular la parte superior y la inferior, debe hacer cuádriceps entre pares de pares de vértices uno frente al otro. Entonces piense en el futuro y ¿por qué no convertirse en una función que haga dos caras triangulares de cuatro vértices?
Hecho. Tenga en cuenta que esta vez usamos el hecho de que la misma estructura (círculo + centro) aparece dos veces en un cilindro para tomar un atajo. No tenemos que hacer todos los vértices, bordes y caras a mano, al contrario del cono donde era necesario.
Siguiendo este principio de pereza, también es posible hacer una cuarta parte del círculo y duplicarlo, y nuevamente, hacer un círculo completo con transformaciones muy simples (válido con cualquier círculo, también con el cono), pero eso es realmente excesivo para un Forma no tan compleja.
Siempre debes usar las propiedades geométricas de los objetos que haces para simplificar su creación . A saber, sus simetrías e invariantes .
Para un cilindro, simplemente no haga el vértice base, solo haga el círculo, duplique, traduzca la copia, haga los quads, listo.
La esfera y la cápsula: agregando complejidad, todavía no es lo mismo trabajar dos veces
Para crear una cápsula, queremos crear una esfera UV, dividirla en dos mitades, traducir la primera mitad y luego vincular las dos con los lados de las cápsulas.
De nuevo, es posible hacer solo un octavo (!!) de la esfera, luego duplicarlo y revertirlo, y luego duplicar e invertir el resultado excepto a lo largo de otro eje, etc., para obtener una esfera completa, en 4 pasos (crear el octavo , duplicar e invertir tres veces). Quizás exagerado, pero menos que en el caso del círculo.
Una simple esfera UV:
De hecho, solo hacemos la mitad (por ejemplo), duplicamos esa mitad, volteamos la copia y la traducimos por la longitud de la cápsula:
Vinculamos la mitad superior e inferior:
El trabajo real (algo) duro proviene de la trigonometría que se necesita para hacer una esfera. El conjunto de todos los vértices que pertenecen a una esfera UV se puede describir como el conjunto de todos los puntos de la forma:
donde R es el radio de la esfera y, para un cierto número entero positivo N , tenemos la constante
θ = × π / N ,
k y n son números enteros con k variando de 0 a 2N-1 y n varía de -N / 2 a + N / 2 .
Para hacer una media esfera o un octavo de esfera, debe restringir el conjunto de valores tomados por k y n .
Si k fueran números reales y no solo números enteros, obtendría una esfera completa, no solo los vértices en su superficie. Entonces, lo que hemos hecho aquí es rasterizar la ecuación de la superficie de la primitiva .
El temible toro : ¡es fácil después de todo lo que hemos visto!
Nuevamente, más trigonometría, más vértices, más cuádriceps, más simetrías, más invariantes ... ¡más geometría! Encuentre la ecuación para la superficie de un toro, "rasterícela" correctamente, simplifique el problema usando las simetrías (obvias) del toro y, finalmente, recorra el conjunto de vértices que acaba de definir y haga los bordes y las caras como usted ¡Vamos!
¿Ver? Completamente sencillo.