PMG
http://forum.pmg.org.ru/

22 урок
http://forum.pmg.org.ru/viewtopic.php?f=1&t=504
Страница 1 из 4

Автор:  Weise [ 14 июн 2006 22:26 ]
Заголовок сообщения:  22 урок

Здровствуйте, дорогие друзья!
Прошу пращения за ламерский вопрос, но всеже, никак не могу понять, для чего нужны s и t координаты и как их подсчитать для произвольной сетки из треугольников ...

Попробовал реализовать без этих координат, но картинка получилась неестественная, т.к. сдвиг координат всегда был по x и по y одинаков.

И еще. Почему нельзя чтобы текстура повторялась многократно?
Код:
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);  // Не укладывать паркетом

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);

Автор:  Assassin [ 14 июн 2006 22:56 ]
Заголовок сообщения: 

Цитата:
// Выполнение сдвига текстуры

// n : нормаль к поверхности. Должна иметь длину 1

// c : текущая вершина на поверхности (координаты местоположения)

// l : положение источника света

// s : направление s-координаты текстуры в пространстве объекта

// (должна быть нормализована!)

// t : направление t-координаты текстуры в пространстве объекта

// (должна быть нормализована!)

Автор:  Assassin [ 14 июн 2006 22:59 ]
Заголовок сообщения: 

Цитата:
Попробовал реализовать без этих координат, но картинка получилась неестественная, т.к. сдвиг координат всегда был по x и по y одинаков.

Ну для этого и нужны s,t что б картинка была не кривой.
Цитата:
Прошу пращения за ламерский вопрос

Ламерский вопрос на неламерский(даже очень неламерский) урок. :D
P.S:В вобще я сильно незалазил в Bump-Mapping.

Автор:  Weise [ 14 июн 2006 23:06 ]
Заголовок сообщения: 

Это все понятно. Попробую задать вопрос по-другому:
Есть треугольник, его нормали к каждой вершине извесны, известны и сами вершины, и их текстурные координаты. Также мы знаем координату источника света. Какие будут s и t к каждой вершине? К чему привязывать (0;0)?
Цитата:
Ламерский вопрос на неламерский(даже очень неламерский) урок.

Если б этот урок был-бы ламмерским, я бы туда не полез )))
Цитата:
P.S:В вобще я сильно незалазил в Bump-Mapping.

А зря... Лично я не представляю себе сцену без Бампмеппинга )

Автор:  Assassin [ 14 июн 2006 23:13 ]
Заголовок сообщения: 

Цитата:
P.S:В вобще я сильно незалазил в Bump-Mapping.

Яже говорю это очень обьёмный урок и может тебе помочь только тот кто в нём копался и уже подобное делал.
P.S:Но я попробую тебе помочь я всё таки прочитаю этот урок и попробую найти ответ.Но это будет не сегодня а возможно завтра.

Автор:  Weise [ 14 июн 2006 23:18 ]
Заголовок сообщения: 

Спасибо. Буду очень благодарен.

Автор:  Assassin [ 15 июн 2006 10:51 ]
Заголовок сообщения: 

Цитата:
Это все понятно. Попробую задать вопрос по-другому:
Есть треугольник, его нормали к каждой вершине извесны, известны и сами вершины, и их текстурные координаты. Также мы знаем координату источника света. Какие будут s и t к каждой вершине? К чему привязывать (0;0)?

Обьясни поконкретнее что ты хочеш этим добится какой эфект хочеш сделать ;/

Автор:  Weise [ 15 июн 2006 14:13 ]
Заголовок сообщения: 

Помоему вопрос должен быть должен быть понятен... Определить s и t для произвольного треугольника...

Эффект? Тоже самое что и впримере...

Автор:  Assassin [ 15 июн 2006 17:17 ]
Заголовок сообщения: 

Цитата:
Эффект? Тоже самое что и впримере...

Так нафига тибе что нить узнавать если то чего ты хочешь добится написано в примере. ;/

Автор:  Weise [ 15 июн 2006 20:21 ]
Заголовок сообщения: 

Да. ужас прям какой-то...

Эффект который я хочу сделать - Bump-Mapping.
Что мне для этого нужно - просчитать s и t для треугольника ))), ВСЕ!

Автор:  MagicWolf [ 17 июн 2006 12:21 ]
Заголовок сообщения:  Re: 22 урок

Weise писал(а):
Здровствуйте, дорогие друзья!
Прошу пращения за ламерский вопрос, но всеже, никак не могу понять, для чего нужны s и t координаты и как их подсчитать для произвольной сетки из треугольников ...


NeHe урок N6 писал(а):
Для того чтобы правильно отобразить текстуру на четырехугольник, вы должны отобразить правый верхний угол текстуры на правую верхнею вершину четырехугольника. Левый верхний угол текстуры отображается в левую верхнею вершину четырехугольника, правый нижний угол текстуры отображается в правую нижнею вершину четырехугольника, и в завершении, левый нижний угол текстуры отображается в левую нижнею вершину четырехугольника. Если углы текстуры не совпадают с углами четырехугольника, изображение может быть сдвинуто вниз, в сторону, или вообще отсутствовать.

Первый аргумент glTexCoord2f - координата X. 0.0f - левая сторона текстуры. 0.5f - середина текстуры, и 1.0f - правая сторона текстуры. Втрое значение glTexCoord2f - это Y координата. 0.0f - низ текстуры. 0.5f - середина текстуры, и 1.0f - верх текстуры.

Теперь мы знаем, что левая верхняя координата текстуры 0.0f по X и 1.0f по Y, и левая верхняя вершина четырехугольника -1.0f по X, и 1.0f по Y. Теперь осталось сделать так, чтобы оставшиеся три координаты совпали с тремя углами четырехугольника.

Попробуйте поиграться со значениями x и y в glTexCoord2f. Изменение 1.0f на 0.5f будет только рисовать левую половину текстуры от 0.5f (середина) до 1.0f (право).


Т.е. s,t - это координаты на текстуре! Как x,y в пространстве. Можно было бы писать вместо s,t = xt, yt!

Weise писал(а):
И еще. Почему нельзя чтобы текстура повторялась многократно?
Код:
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);  // Не укладывать паркетом

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);


Заместо GL_CLAMP используй GL_REPEAT и при увеличении текстурных координат больше 1 текстура будет повторяться.[/quote]

Автор:  Weise [ 17 июн 2006 15:20 ]
Заголовок сообщения: 

MagicWolf, спасибо за ответ.
Но меня смущает следующее:
s и t - это верктора, там 3 числа ))) Там еще написано что они нормализованы.
Там еще кртинка нарисована, но я никак не могу понять, почему там в векторе 3 числа )))
Изображение
Код:
void SetUpBumps(GLfloat *n, GLfloat *c, GLfloat *l, GLfloat *s, GLfloat *t) {

  GLfloat v[3];                // Вектор от текущей точки к свету

  GLfloat lenQ;                // Используется для нормализации

  // Вычислим и нормализуем v

  v[0]=l[0]-c[0];

  v[1]=l[1]-c[1];

  v[2]=l[2]-c[2];

  lenQ=(GLfloat) sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);

  v[0]/=lenQ;

  v[1]/=lenQ;

  v[2]/=lenQ;

  // Получим величины проекции v вдоль каждой оси системы текстурных координат
  c[0]=(s[0]*v[0]+s[1]*v[1]+s[2]*v[2])*MAX_EMBOSS;

  c[1]=(t[0]*v[0]+t[1]*v[1]+t[2]*v[2])*MAX_EMBOSS;
}

Обратите внимание на две последние строчки в коде. Там 3 числа в массиве s и t - они вектора по-видимому )

Автор:  MagicWolf [ 22 июн 2006 15:40 ]
Заголовок сообщения: 

В данном случае идет речь о другом! Обычно s&t это координаты текструры. А здесь s&t два вектора, которые определяют местоположение грани куба. При этом по направлению этих векторов можно получить и текстурные координаты.

Автор:  Weise [ 02 июл 2006 22:57 ]
Заголовок сообщения: 

Да, но третий вектор-то откуда брать? )))

Автор:  Weise [ 02 июл 2006 23:07 ]
Заголовок сообщения: 

Да, кстати, у меня возник еще один вопрос, немного не в тему, но все-же...

Самое высокое количество полигонов, которое я отрендерил на 6600GT, составило 90 000 полигонов, далее уже менее 24 fps. Все это после поверхностной оптимизации. Рендерил так:
есть список вершин, список нормалей, материалов и мешей.
прохожу по всем мешам:
если надо менять материал, меняю
рендерю все вершины
Целью экспиремента было выявить максимальное количество треугольников, которое я могу на своей машинке отрендерить.

Так вот, вопрос, 90 000 полигонов, это нормально для моей машины (P4 2.8, 1024, GeForce 6600GT)?
Ответьте хотя-бы примерно... за одно может и расскажете, сколько сами отрендерили...

Страница 1 из 4 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/