Я пытаюсь реализовать карту высот на основе графического процессора самым простым (и самым быстрым) способом, который я знаю. Я прошел (.png, D3DX11CreateShaderResourceViewFromFile()
) текстуры в шейдер, и я пытаюсь сэмплировать его для текущего значения пикселя. Видя float4
Я в настоящее время назначаю значение цвета из канала, чтобы сместить y
значение.
Texture2D colorMap : register(t0);
SamplerState colorSampler : register(s0);
...
VOut VShader(float4 position : POSITION, float2 Texture : TEXCOORD0, float3 Normal : NORMAL)
{
VOut output;
float4 colors = colorMap.SampleLevel(colorSampler, float4(position.x*0.001, position.z*0.001, 0,0 ),0);
position.y = colors.x*128;
output.position = mul(position, WVP);
output.texture0 = Texture;
output.normal = Normal;
return output;
}
Текстура импортирована правильно, и я вставил другую текстуру и смог успешно смешать текстуру с другой текстурой (путем умножения значений), поэтому я знаю, что структура float4 содержит значения, способные выполнять арифметику на ней. ,
В функции Vertex попытка извлечь значения ничего не дает в сетке:
Концепция казалась достаточно простой на бумаге …
Поскольку вы используете Texture2D, параметр Location должен быть float2.
Также убедитесь, что местоположение изменяется от (0,0) до (1,1). Чтобы ваше отображение было правильным, сетка должна быть размещена от (0,0,0) до (1000,0,1000).
Если это так, то это должно работать:
SampleLevel(colorSampler, position.xz*0.001 ,0);
редактировать
Мне интересно, как вы это тестируете. Я попытался скомпилировать ваш код с добавлением определений для VOut и WVP, и это не удалось. Одна из ошибок — это тот параметр location, который является float4 и должен быть float2. Другая ошибка, которую я получаю, — это имя функции; это должно быть главным.
Если вы используете Visual Studio, я настоятельно рекомендую использовать средства отладки графики и проверить все переменные. Я подозреваю, что текстура colorMap может быть связана с пиксельным шейдером, но не с вершинным шейдером.