Народный учебник по OpenGL


Урок 9. Передвижение изображений в 3D - часть 6


        

{

                

star[loop].angle=0.0f;  // Устанавливаем всё углы в 0

Я рассчитываю дистанцию взяв текущий номер звезды (это значение loop) и разделив на максимальное значение звезд. Потом я умножаю результат на 5.0f. Коротко, что это даёт - это отодвигает каждую звезду немного дальше, чем предыдущую. Когда loop равен 50 (последняя звезда), loop разделенный на num будет равен 1.0f. Я умножаю на 5 потому, что 1.0f*5.0f будет 5.0f. 5.0f это почти на границе экрана. Я не хочу, что бы звезды уходили за пределы экрана, так что 5.0f это идеально. Если вы установите zoom подальше в экран, вы должны использовать большее число, чем 5.0f, но ваши звезды должны быть немного меньше (из-за перспективы).

Заметьте, что цвета для каждой звезды задаются случайным образом от 0 до 255. Вы можете спросить, как мы может использовать эти числа, когда нормальное значение цвета от 0.0f до 1.0f. Отвечаю. Когда мы устанавливаем цвет, мы используем glColor4ub вместо glColor4f. ub значит Unsigned Byte (беззнаковый байт). И байт может иметь значения от 0 до 255. В этой программе легче использовать байты, чем работать с со случайными числами с плавающей запятой.

                // Вычисляем растояние до центра

                

star[loop].dist=(float(loop)/num)*5.0f;

                

// Присваиваем star[loop] случайное значение (красный).

                

star[loop].r=rand()%256;

                

// Присваиваем star[loop] случайное значение (зеленый)

                

star[loop].g=rand()%256;

                

// Присваиваем star[loop] случайное значение (голубой)

                

star[loop].b=rand()%256;

        

}

        

return TRUE;                    // Инициализация прошла нормально.


}

Код функции Resize тот же самый, так что рассмотрим код отрисовки сцены. Если вы используете код из первого урока, то удалите весь код из DrawGLScene и просто скопируйте, то, что написано ниже. Здесь только две строки из первого урока, вообщем удалять немного придется.

int DrawGLScene(GLvoid)                 // Здесь мы всё рисуем




Начало  Назад  Вперед



Книжный магазин