Как сфере придать форму песочных часов?

Как придать сфере форму песочных часов ??

могу только сферу нарисовать:

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)
→ Ссылка