Estoy intentando conseguir líneas rápidas, suaves y de ancho variable en una aplicación gráfica. El objetivo es dibujar una línea de 2 segmentos con una esquina redondeada en el centro.
En última instancia, el objetivo sería minimizar lo siguiente:
- La cantidad de cuadriláteros (o triángulos si te resulta más fácil pensar en términos de eso.
- Minimizar el cálculo para encontrar los puntos de la geometría
Definiré el problema con puntos p0
, p1
y p2
. w1
sería la anchura del rectángulo a través de p0
y p1
y w2
sería la anchura del rectángulo entre p1
y p2
. el objetivo final sería conseguir un dibujo como este:
Uno de los primeros problemas que se me plantean es el cálculo de la posición del emisor en una situación en la que w1w2
. He visto la fórmula cuando ambos anchos son iguales pero nunca la he visto extendida para anchos diferentes.
El problema con el enfoque basado en el mitter es cuando p0p1p2
es muy pequeño el mitter se hace extremadamente grande.
Después de calcular los dos cuadrantes formados por los puntos del árbol, la geometría se pasa a un sombreador de píxeles y el objetivo sería determinar matemáticamente qué píxeles hay que recortar para redondear la esquina exterior formada por los tres puntos.
Esta es la parte complicada. En el sombreador de píxeles no existe la concepción del espacio. Puedo pasar cosas como ángulos o ratios, etc., pero deben utilizarse para interpretar un valor xy interpolado de 0 a 1.
El diagrama anterior muestra mi comprensión de cómo se interpola el valor, pero la clave es que no tiene idea de qué tipo de forma está formando sólo su distancia de cada uno de los vértices.
Así que el problema que tengo esencialmente es: Dado el valor bidimensional que representa la posición interpolada de un píxel, averigua si el píxel debe ser sombreado o no.
Se puede utilizar cualquier valor específico para ayudar a interpretar y transformar el valor interpolado dado en.
0 votos
Parece que estás intentando hackear el sombreador de píxeles para que haga algo para lo que no está diseñado. Yo recomendaría aumentar el número de polígonos de la línea para formar la curva en las curvas. También hay un stackexchange para gráficos y creo que sería más adecuado para responder a esto que math.stackexchange