2010-10-22 4 views
0

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

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

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

ответ

1

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

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

+0

Я не уверен, что текстурные массивы также позволят мне сделать это легко, но основная причина, по которой я использую 3D-текстуры, - это то, что я могу легко смешивать различные текстуры. Смешать между плитки 1 и плитки 2 все, что мне нужно сделать, является интерполяция между 1/(глубина * 2) - 2/(глубина * 2). До сих пор я не заметил никаких артефактов, но если я увижу то, что не могу исправить, я обязательно буду помнить ваше предложение. Благодаря! – Barakat

0

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