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

Текстурные координаты

Страницы: 1 2 Следующая »
#0
1:18, 9 окт. 2019

Всем привет!

Есть ли верный способ определить для какого треугольника текстурные координаты UV идут от ноля, а для какого нужно вычитать из 1.0? В общем нужно чтобы не было переворота текстуры.

А то получается такая картина:
Текстурные координаты 01 | Текстурные координаты
Ведь в редакторах как то это определяется?!

#1
1:25, 9 окт. 2019

eDmk
> Всем привет!
>
> Есть ли верный способ определить для какого треугольника текстурные координаты
> UV идут от ноля, а для какого нужно вычитать из 1.0? В общем нужно чтобы не
> было переворота текстуры.
>
> А то получается такая картина:
Порядок вершин должен быть одинаковый для всех треугольников по часовой.
3 7 6 и 3 6 2
У тебя скорее всего второй треугольник против часовой?

#2
1:30, 9 окт. 2019

Kripto289
> У тебя скорее всего второй треугольник против часовой?
>
>
У меня все против часовой. По умолчанию CCW.

+ Показать
#3
1:31, 9 окт. 2019

Нету. Ты сам должен гарантировать, что треугольники CCW или CW. И задавать UV в соответствии с ними.

#4
(Правка: 2:09) 2:02, 9 окт. 2019

Че то какое то отражение... В редакторах в самом простом случае это проекция позиции вершины на плоскость -> UV. А тут явно одна вершина скопирована  с другой. Шейдер перемудрил?
Kripto289
> У тебя скорее всего второй треугольник против часовой?
А это вообще тут не причем. Влияет только на видимость треугольника определенной стороной.

#5
(Правка: 2:40) 2:21, 9 окт. 2019

eDmk
Меня терзают смутные сомнения, но это случайно не софт рендер? Ощущение что для каждого треугольника идут строго одинаковые UV координаты в той же последовательности как заданно командой AddFace. То есть ты не задаешь координаты для вершин - они у тебя "залипли" на одном треугольнике.

+ Показать

Поэтому получается что для одной и той же вершины №6 разные UV координаты {1,1} и {0,0}

#6
2:30, 9 окт. 2019

foxes
> это случайно не софт рендер?
именно он

#7
6:18, 9 окт. 2019

maks242
в общем случае для текстурированного куба вершин должно быть 24.

#8
6:32, 9 окт. 2019

eDmk
> Есть ли верный способ определить для какого треугольника текстурные координаты
> UV идут от ноля, а для какого нужно вычитать из 1.0?
не надо вообще ничего вычитать. для каждой вершины хранятся координаты, нормаль и uv (координаты на текстуре). координаты на текстуре точно так же интерполируешь, как и все остальные атрибуты вершины. советую не заниматься ерундой, а загрузить любую готовую модель с корректной uv-развёрткой и пытаться отрендерить её так же, как в редакторе, а не на своём криво сгенерированном кубе тестить.

#9
8:20, 9 окт. 2019

Aroch
> в общем случае для текстурированного куба вершин должно быть 24.
>
>
Бред. В шейдере на GL рисую тоже с 8-и вершин по индексам. Экономно получается.
Можно разбить на 24, но не обязательно.

#10
(Правка: 8:24) 8:23, 9 окт. 2019

Suslik

оветую не заниматься ерундой, а загрузить любую готовую модель с корректной uv-развёрткой и пытаться отрендерить её так же, как в редакторе, а не на своём криво сгенерированном кубе тестить.

смотря что считать корректной разверткой.
Даже для куба может быть множество вариантов развертки, которые разные люди в разных ситуациях назовут корректными .
Я, например, для своих процедурных примитивов сделал unfold маппинг аж двумя способами (помимо тривиального планара)
смотреть с 0:50 по 0:59


и могу сказать, что процедурная генерация развертки на самом деле сложнее в реализации чем реализация самой геометрии

#11
(Правка: 8:30) 8:27, 9 окт. 2019

Polyflow3d
> Даже для куба может быть множество вариантов развертки
Да взять даже простой триангулированный куб с координатами углов от (-1, -1) до (1, 1) = центр в (0, 0) и простой кубической текстурной проекцией, и соответственно текстурными координатами в углах от (0, 0) до (1, 1).

+ box.obj
#12
(Правка: 8:39) 8:38, 9 окт. 2019

Daniil Petrov
> OBJ File
так, историческая справка к слову. OBJ придумывался тогда, когда графических ускорителей ещё и в планах не было. он придумывался, чтобы им было удобно задавать геометрию в 1980х. тогда им было удобно хранить для каждого вертекса примитива отдельный индекс для координаты, отдельный индекс для нормали и для текстурной координаты. тогда это давало профит при описании hard edge surfaces, а для обычных объектов вроде органики это только давало лишний оверхед на хранение троек одинаковых индексов. сейчас так на низком уровне не делает никто, потому что в рантайме гораздо важнее, чтобы видюхе было удобно работать с данными, а не чтобы сэкономить 15% места при сохранении куба. поэтому сейчас стандартной практикой считается сохранение всех атрибутов внутри вертекса и просто их частичное дублирование для случая hard edge.

#13
8:48, 9 окт. 2019

eDmk
> Бред. В шейдере на GL рисую тоже с 8-и вершин по индексам. Экономно
> получается.
> Можно разбить на 24, но не обязательно.
Бред. Нарисуй куб у которого для каждой грани в вершинах уникальные текстурные координаты используя только 8 индексов. И где-нибудь уже прочти что значит "общий случай".

#14
(Правка: 8:58) 8:57, 9 окт. 2019

Suslik

OBJ придумывался тогда, когда графических ускорителей ещё и в планах не было. он придумывался, чтобы им было удобно задавать геометрию в 1980х.

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

Ты, вообще, походу путаешь сериализацию GPU буферов с форматами хранения 3д моделей.
Это все равно что сравнивать фотошоповский psd исходник c пережатой dds текстурой.

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