ПрограммированиеФорумГрафика

Про vertex array, indices, normal

Страницы: 1 2 Следующая »
#0
22:45, 27 июля 2009

И так, есть массив вершин, массив нормалей и массив индексов. В вершинном массиве есть дублируемые вершины, убираю их, пересчитываю индексы и требуемый результат не получается - проблемы с освещением. Какие есть методы, чтобы и массив вершин был оптимальным и освещение не нарушалось?

#1
22:49, 27 июля 2009

Считать правильно.

#2
23:04, 27 июля 2009

slava_mib
> Считать правильно.
:) Будьте так любезны, на примере обычного кубика покажите как правильно. Когда vertices - 24, indices - 24, normal - 24  все нормально, а вот когда vertices - 8 появляются проблемы ...

#3
23:06, 27 июля 2009

А почему в массиве вершин есть дублируемые вершины?
Не должно быть такого.
Вот как раз в массиве индексов должны быть одинаковые индексы.
И я, полагаю, не нужно отдельно выделять массив нормалей.
Должно быть что-то такое:

struct Vertex
{
    vec3    p, n;
    ...
};

struct Face
{
    unsigned    index[3];
};
#4
23:23, 27 июля 2009

Elsedar
> А почему в массиве вершин есть дублируемые вершины?
> Не должно быть такого.
> Вот как раз в массиве индексов должны быть одинаковые индексы.
Согласен, полностью...
Elsedar
> И я, полагаю, не нужно отдельно выделять массив нормалей.
Получается так, что одна вершина может принадлежать разным полигонам и иметь разные нормали...и в этом проблема

#5
23:35, 27 июля 2009

Обычно для каждой вершины берут 1 нормаль, чтобы не было резких границ на полигонах при освещении.
Например, возьми среднюю нормаль для каждой вершины: суммируй все нормали и потом нормализуй результат.

#6
23:43, 27 июля 2009

RigoN
> В вершинном массиве есть дублируемые вершины
Не вершины, а позиции вершин, что не то же самое.

#7
23:50, 27 июля 2009

и они вполне допустимы. если например на смежных полигонах разные текстуры должны быть

#8
0:02, 28 июля 2009

Elsedar
RigoN

а теперь когда у вас нет дублируемых вершин затекстурьте модель вашу.

и будете опять эти вершины возвращать.

#9
0:45, 28 июля 2009

PlatinumKiller
И в чем проблема?

#10
1:04, 28 июля 2009

RigoN
Для куба писать долго, вот плоскость на вскидку:

verts[0].pos = vec2(0, 0);;
verts[1].pos = vec2(10, 0);
verts[2].pos = vec2(10, 10);
verts[3].pos = vec2(0, 10);

inds[0] = 0;
inds[1] = 1;
inds[2] = 2;
inds[3] = 0;
inds[4] = 2;
inds[5] = 3;

Квад двумя треугольниками без дублирования вершин...

Озвучь проблему поподробнее, а то не совсем понятно что у тебя не получается...

PlatinumKiller
> а теперь когда у вас нет дублируемых вершин затекстурьте модель вашу.
>
> и будете опять эти вершины возвращать.

Само собой, где вершины имеют разные атрибуты, совмещать не надо...

#11
1:42, 28 июля 2009

Executor
> Озвучь проблему поподробнее, а то не совсем понятно что у тебя не получается...
Да нет,  все получается, просто решил поэкспериментировать в  вопросе оптимизации мешей..., были некоторые сомнения по индексам, но...
Executor
> Само собой, где вершины имеют разные атрибуты, совмещать не надо...
Изначально, тоже так думал, да и сейчас пока так и делаю, но вот здесь(http://wingman.org.ru/opengl/vertex-arrays) заинтересовало меня :

>Единственный минус - когда мы загружаем 3д обьект, обычно в файле больше текстурных
>координат и/или нормалей, чем вершин. Но вы не можете указать разные массивы для
>разных типов данных (вершина, текст. координаты, и т.д.). Это расплата за рендер
>всей информации с использованием массивов вершин. Так что вершины отрисуются прекрасно,
>но текстуры будут выглядеть забавно.
>Чтобы обойти эту ситуацию, у вас есть две возможности.
> 1) Первая - пройтись циклом и просто дублировать вершинные данные и поместить их
>в структуру типа CVertex (см. ниже в уроке), которая содержит вершину, текстурные координаты и
>нормали. Это, конечно, увеличит использование памяти, но при долгой работе (если возрошшая память
>не проблема для вашего компьютера) рендер будет быстрее.
> 2) Второй метод - создать структуру, содержащую эту информацию, но установить
>ваши данные так, чтобы рендер проходил с использованием "шагов треугольника".
>Много игр это делают, и результат всегда быстр. Вы можете посмотреть урок
>"загрузка Quake BSP", чтобы увидеть этот процесс в действии.

Вот и решил в такой незатейливой форме поднять вопрос оптимизации мешей, очень интересно услышать, кто как оптимизирует, или "забивает" на это....

#12
11:08, 28 июля 2009

RigoN
Я так понял у них там индексы разные для позиций и текстурных координат... Я просто дублирую вершину в таком случае...

#13
11:27, 28 июля 2009

Я недавно задавал подобный вопрос http://www.gamedev.ru/code/forum/?id=120928
Думаю надо грузить оптимизированные вершины и индексы, а нормали брать неоптимизированные. У меня тоже была ета проблема со светом.

#14
11:56, 28 июля 2009

Для куба 24 вершины - это НОРМА.
Т.к. должно быть 24 нормали.
Вершина являеться лишней, если она полностью дублирует другую вершину.
В случае куба так не происходит.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.