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


Урок 11. Эффект "флага" на OpenGL - часть 2


 

Теперь добавьте приведенный ниже код в конец функции InitGL() перед return TRUE:

 

glPolygonMode( GL_BACK, GL_FILL );       // нижняя (задняя) сторона заполнена

glPolygonMode( GL_FRONT, GL_LINE );      // верхняя (передняя) сторона прорисована линиями

 

Этот код просто означает, что мы хотим, чтобы полигоны нижней (задней) стороны были зарисованы полностью и чтобы полигоны верхней (передней) стороны были лишь очерчены.

Это мои личные предпочтения. Причина – ориентация полигона или направления граней. Загляните в Красную Книгу (по OpenGL), если хотите узнать больше. Пользуясь случаем, хочу сказать, что эта книга как раз из числа того, что помогает мне в изучении OpenGL, не считая сайта NeHe :). Спасибо NeHe. Купите книгу The Programmer's Guide to OpenGL издательства Addison-Wesley. Она – неисчерпаемый ресурс по части программирования на OpenGL. Ладно, вернемся к уроку.

 

Прямо под предыдущим кодом и выше return TRUE добавьте следующие строки:

 

// пройдемся по плоскости X

      for(int x=0; x<45; x++)

      {

            // пройдемся по плоскости Y

            for(int y=0; y<45; y++)

            {

                  // применим волну к нашей сетке

                  points[x][y][0]=float((x/5.0f)-4.5f);

                  points[x][y][1]=float((y/5.0f)-4.5f);

                  points[x][y][2]=float(sin((((x/5.0f)*40.0f)/360.0f)*3.141592654*2.0f));

            }

      }

 

Благодарю Грэма Гиббонса (Graham Gibbons) за замечание об целочисленном цикле для того чтобы избежать пиков на волне.

 

Два цикла вверху инициализируют точки на нашей сетке. Я инициализирую переменные в моем цикле, чтобы помнить, что они просто переменные цикла. Не уверен, что это хорошо. Мы используем целочисленные циклы, дабы предупредить глюки, которые появляются при вычислениях с плавающей запятой. Мы делим переменные x и y на 5 (т.е. 45 / 9 = 5) и отнимаем 4.5 от каждой из них, чтобы отцентрировать "волну". Того же эффекта можно достигнуть переносом (translate), но этот способ мне больше нравится.




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



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