Как сфере придать форму песочных часов?
Как придать сфере форму песочных часов ??
могу только сферу нарисовать:
void fillVertexArray(void)
{
int i, j, k;
k = 0;
for (j = 0; j <= q; j++)
for (i = 0; i <= p; i++)
{
vertices[k++] = 0.8*(R * cos((float)j /q * PI) * sin(2.0 * (float)i / p * PI));
vertices[k++] = 1.5*(R * sin((float)j /q * PI) * sin(2.0 * (float)i / p * PI)); //чтобы элипс рисовать
vertices[k++] = 0.7*(R * cos(2.0 * (float)i / p * PI));
}
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Пусть ось OZ будет осью симметрии.
Домножайте X и Y на коэффициент, зависящий от абсолютного значения Z - для начала попробуйте просто abs(Z)/R (радиус сферы). Если форма не очень - корректируйте функцию
Например, при работе в сферических координатах
z = R * cos(Theta)
c = abs(cos(Theta))
x = c * R * sin(Theta) * cos(Fi)
y = c * R * sin(Theta) * sin(Fi)
