Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

OpenGL и поверхности

40K
05 июля 2008 года
Xeon[13]
1 / / 05.07.2008
Сразу скажу что с ОпенГЛ знаком всего пару дней, за это время активно читал всякую литературу.. Но знаю пока все равно оч мало.
Мне нужно построить 3хмерную поверхность по данным из массива а размером n*n, каждая из йачеек содержит высоту по оси Z. Я строил поверхность треугольничками.
Код:
for i:=0 to n-2 do
  for j:=0 to n-2 do
  begin
    glBegin(GL_TRIANGLES);
    glVertex3f(i/n,j/n,a[i,j]);
    glVertex3f((i+1)/n,j/n,a[i+1,j]);
    glVertex3f((i+1)/n,(j+1)/n,a[i+1,j+1]);
    glVertex3f(i/n,j/n,a[i,j]);
    glVertex3f((i+1)/n,(j+1)/n,a[i+1,j+1]);
    glVertex3f(i/n,(j+1)/n,a[i,j+1]);
    glEnd;
  end;

Перед 1й и 2й тройкой вертексов еще ставил glNormal3f с заранее вычесленными значениями нормалей для каждого треугольника.
Вобщем результат - негладкая поверхность.
Подскажите плз как сгладить поверхность или как правильно строить поверхности по массиву? Ток попроще - я еще даж текстуры накладывать неумею.
36K
24 июля 2008 года
Alno
34 / / 23.06.2008
Чтобы поверхность была гладкой, надо задать нормали не для каждого треугольника, а для каждой вершины, причем в вершинах с одними и теми же координатами, но в разных гранях нормаль должна быть одинаковой.

Можно сделать это следующим образом:
1) Сначала посчитать нормали для всех треугольников
2) Для каждой вершины (i,j) вычислить нормаль как среднее из нормалей всех треугольников, в которые она входит. И не забыть нормализовать ее, если не стоит соответствующего флага.

Тогда поверхность будет гладкой.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог