Чем больше эти числа, тем более гладкими получаются объекты, но тем больше времени требуется для их воспроизведения. Если все предыдущие рекомендации по оптимизации скоростных характеристик дают малоощутимый эффект, то детализация поверхностей является одним из самых важных факторов, влияющих нв скорость воспроизведения.
Для конуса задаются радиус основания, высота и пара чисел, задающих гладкость построений.
У тора параметры следующие: внутренний и внешний радиусы и все те же два числа, задающих, насколько плавной будет поверхность рисуемой фигуры.
В этом примере режим задается способом, знакомым нам по предыдущим примерам — командой giPoiygonMode. Для каркасного изображения объектов модуль располагает серией команд, аналогичных тем, что мы используем в этом примере, но с приставкой giutwire вместо giutsoiid.
Манипулирование объектами и параметрами изображения использует http://filmsenfrancais.net/.
Следующий пример показывает, как можно манипулировать объектами исходного набора, чтобы получить другие объемные фигуры. В подкаталоге Ех31 содержится проект, представляющий модификацию классической программы из SDK. В программе моделируется рука робота в виде двух параллелепипедов).
В программе рукой манипулятора можно управлять
Я не стал расписывать каждый параллелепипед по шести граням, а просто задал масштаб по трем осям перед воспроизведением куба так, чтобы вытянуть его в нужную фигуру:
glTranslatef 1-1.0, 0.0, 0.01; giRotatef (shoulder, 0.0, 0.0, 1.0); glTranslatef (1.0, 0.0, 0.0);
giPushMatrix; // запомнить текущий масштаб
I glScalef (2.0, 0.4, 1.0); // для вытягивания куба в параллелепипед
I lutSolidCube(l.O) ; // в действительности — параллелепипед
I glPopMatrix; // вернуть обычный масштаб
I // вторая часть руки робота
glTranslatef (1.0, 0.0, 0.0);
giRotatef (elbow, 0.0, 0.0, 1 0),
glTranslatef (1.0, 0.0, 0.0);
giPushMatrix;
glScalef (2.0, 0.4, 1.0);
glutSolidCube(1.0);
glPopMatrix; |