Вы выяснили, что для выборки из слоя 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 слоя, которые вы хотите выбрать для различных материалов, независимо от мипмаппинга.