Как координата R (с плавающей точкой) выбирает, какую часть 3D-текстуры использовать? (OpenGL) - PullRequest
0 голосов
/ 23 октября 2010

Я пытаюсь использовать 3D-текстуры для текстурирования моего случайно сгенерированного ландшафта.Я хочу иметь возможность иметь много различных текстур ландшафта, которые смешиваются между различными областями.Я не могу понять, какую часть текстуры выберет координата R.Если я установлю его на 0.0, то получится сочетание текстуры от до 1.0 и после 0.0.Кажется, есть несколько моментов, когда он вообще не смешивается.Как координата R (с плавающей точкой) работает с глубиной трехмерной текстуры?(То есть глубина делится на что-то, умноженное на что-то и т. Д.)

Пример того, для чего мне нужно это выяснить: у меня есть 3D-текстура размером 128x512.Первый 128x256 - это текстура травы.2-я половина - это текстура грязи.Я рассматриваю текстуру, как если бы она была 4 плитками размером 128x128, поэтому глубина равна 4. Какую математику мне сделать, чтобы узнать координату float R для текстуры сплошной травы?Какую математику я должен сделать, чтобы найти координаты R начала / конца поплавка для смешивания из грязи в траву?

Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Вы выяснили, что для выборки из слоя 0 необходимо использовать r = 1 / (depth * 2).В общем, чтобы получить слой N, вы должны использовать r = (N + 1/2) / depth

Кстати, этот результат одинаков для первых двух координат.Если вы хотите иметь треугольник, который имеет в точности значение первого текселя вашей 2 / d-текстуры, вам нужно передать координаты (0.5/width, 0.5/height) каждой из вершин.

Но, но ..То, что вы пытаетесь сделать, это то, для чего были изобретены массивы текстур (функция эпохи DX10).3D-текстуры плохо подходят по ряду причин, самая большая проблема в том, что mip-mapping не работает так, как вы этого хотели бы (mipmap между 2D-уровнями независимо от третьего измерения).

Mip-map имеет решающее значение для уменьшения артефактов сглаживания (особенно на местности, где он охватывает весь диапазон глубины).Когда вы начнете включать mip-mapping на ваших слоях, вы увидите, что разные слои материала начнут смешиваться независимо от ваших текстурных координат, когда ландшафт находится дальше.В конце концов, для этого и существует мипмаппинг ... ваша текстура 128x128x4 становится 64x64x2, 32x32x1, 16x16x1, так как вы используете их на более отдаленных геометриях.Когда вы достигнете уровня 32x32x1, у вас останется только 1 слой, который, вероятно, будет мягкой смесью вашей грязи и травы.Опять не то, что вы хотите.

Напротив, текстурные массивы будут давать 128x128 [4], 64x64 [4], 32x32 [4], 16x16 [4], где вы сохраняете 4 слоя, которые вы хотите выбрать для различных материалов, независимо от мипмаппинга.

0 голосов
/ 23 октября 2010

Я понял, что сделал что-то не так с моим кодом, что заставило меня думать, что это не просто получение текстуры вокруг R, когда это действительно так.Итак, первая текстура на 1.0 / (глубина * 2).

...