Название: Итератор (?) для shared/unshared Отправлено: Igors от Август 07, 2014, 12:04 Добрый день
Сколько "вершин" (вертексов) имеет простейший кубик? Нормальный человек ответит 8 (восемь). Однако изучающий OpenGL скажет 24. Да, обычно так, чтобы удобнее было "рисовать массивами", в каждом углу по 3 вертекса. И вот пользователь кликнул на один вертекс, допустим чтобы изменить его цвет. И требуется менять у всех 3 "совпадающих". Ясно что сначала, на этапе предрасчета надо посчитать какие совпадают, напр Код Т.е. известно что нулевой, второй и пятый вертексы совпадают. Теперь как, получив напр только 5-й вертекс удобно применить ту же операцию для 0-го и 2-го? Спасибо Название: Re: Итератор (?) для shared/unshared Отправлено: __Heaven__ от Август 07, 2014, 13:32 Я вижу так:
Описать каждую реальную вершину в виде 3 значений, которые будут указывать на вершины GL. Обращаясь к реальной вершине мы получаем 3 вершины GL. Название: Re: Итератор (?) для shared/unshared Отправлено: Igors от Август 07, 2014, 16:29 Я вижу так: Три в каждой - всего лишь частный случай, а в общем любое число unshared может соответствовать 1 позиции sharedОписать каждую реальную вершину в виде 3 значений, которые будут указывать на вершины GL. Обращаясь к реальной вершине мы получаем 3 вершины GL. Название: Re: Итератор (?) для shared/unshared Отправлено: __Heaven__ от Август 07, 2014, 17:30 Не совсем понимаю что такое shared/unshared.
Я бы взял структуру наподобии Код: struct MyVertex Создал бы вектор таких структур, который бы полностью описал бы "человеческие" вершины. Для каждой вершины GL записал бы номер, соответствующий номеру "человеческой" вершины в этом векторе. Получается, что пользователь выбирает gl вершину (я понял, что происходит это именно так). Для вершины у нас записан номер в векторе MyVertex. Далее смотрим, что за gl вершины у нас записаны в glVertexesId. Название: Re: Итератор (?) для shared/unshared Отправлено: Igors от Август 07, 2014, 18:03 Не совсем понимаю что такое shared/unshared. Если полигоны используют (шарят) одни и те же индексы вертексов - то это shared (кубик 8). Если же используются разные индексы (для совпадающих позиций) - это unshared (кубик 24). Я бы взял структуру наподобии Поняли правильно. Такой подход в стиле С вполне возможен. Однако надо иметь и второй массив для хранения glVertexesId, причем создать его не так уж просто. Использование выглядит несколько громоздким, напрКод: struct MyVertex Создал бы вектор таких структур, который бы полностью описал бы "человеческие" вершины. Для каждой вершины GL записал бы номер, соответствующий номеру "человеческой" вершины в этом векторе. Получается, что пользователь выбирает gl вершину (я понял, что происходит это именно так). Для вершины у нас записан номер в векторе MyVertex. Далее смотрим, что за gl вершины у нас записаны в glVertexesId. Код Хотелось бы более "в духе плюсов" :) Название: Re: Итератор (?) для shared/unshared Отправлено: __Heaven__ от Август 07, 2014, 18:39 Код Хотелось бы более "в духе плюсов" :) Код: int* currentVertex = &indices[index]; или короче Код: for (; currVertex != endVertex; ++currVertex) или суперкратко :) Код: while (currVertex != endVertex) не в духе плюсов, но почему бы и нет :) можно использовать ссылку на переменную MyVertex перед применением цикла. |