Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Построение сетки дугообразной формы


Автор: explorer 14.5.2009, 15:11
Доброго времени суток, знатоки!
Возникла довольно непростая задача. Требуется построить сетку в виде сегмента кольца. 
У самого сегмента известны лишь границы (прямоугольник, в который этот сегмент вписан) и набор точек, из которых он состоит. Точки заданы неравномерно (интервал может варьироваться от пикселя до 50-60). Известна толщина кольца и внешний радиус. 

Подскажите, пожалуйста, как можно "натянуть" сетку на такой объект? Естественно, объекты могут быть с произвольными параметрами. 
Поиск по форуму не помог. 


Автор: C/L 15.5.2009, 10:23
Посмотри вот этот фрагмент из моей демки:
Код

void TPRIMITIVE::ToTor(float r){
    for(TVERTARR::iterator it = verts.begin(); it != verts.end(); ++it){
        TVECTOR v = (*it).pos;
        float alpha = 2 * M_PI * v.x;
        float betta = 2 * M_PI * v.y;
        (*it).pos.x = 1 + r * cosf(betta)*sinf(alpha);
        (*it).pos.y = 1 + r * cosf(betta)*cosf(alpha);
        (*it).pos.z = r * sinf(betta);
        (*it).norm.x = cosf(betta)*sinf(alpha);
        (*it).norm.y = cosf(betta)*cosf(alpha);
        (*it).norm.z = sinf(betta);
    }
}

Здесь сетка переделывается в тор по координатам точек x и y. Координаты точек сетки по z не учитываются. Координаты должны лежать в диапазоне от 0 до 1. Тогда получится полный тор или кольцо, как вы его называете. Если нужен только сегмент тора (например, половина) то надо ограничить координаты от 0 до 0,5. Если реальные координаты больше этих значений, то можно просто промасштабировать их умножив на какой нибудь коэффициент.

Автор: explorer 19.5.2009, 08:01
Спасибо, идея очень хорошая. 
Еще сам покопался, нашел воможность построения сеток любой формы с помощью OpenGL. Смотрите в сторону Evaluators, если кому интересно. Единственный минус заключается в том, что данный метод не позволяет рисовать сетку различными цветами (по горизонтали одним, по вертикали другим). Придется строить 2 сетки.
http://www.opengl.org/resources/code/samples/mjktips/grid/index.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)