Я пытаюсь реализовать карту высот на основе GPU - самый простой (и самый быстрый) способ, которым я знаю как. Я передал текстуру (.png, D3DX11CreateShaderResourceViewFromFile()
) в шейдер, и я пытаюсь пробовать ее для текущего значения пикселя. Видя float4
, я в настоящее время назначаю значение цвета из канала для смещения значения y
.Directx: Карта высот на основе HLSL. (Shader 5.0)
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, пытаясь извлечь значения ничего не дает на сетке:
Концепция казалась достаточно просто на бумаге ...
Просто для подтверждения, я должен передавать координаты текстуры в параметр местоположения? или положение из вершины? (x, y). Пробовал оба, и это похоже на значение null. –
Этот параметр представляет координату текстуры, но вы можете использовать любое значение float2, например, измененную позицию. Мне любопытно, как вы тестируете это. Я попытался скомпилировать ваш код, добавив определения для VOut и WVP, и он не работает. Одна из ошибок - это параметр местоположения, который является float4 и должен быть float2. Другая ошибка, которую я получаю, - это имя функции; это должно быть главным. –
Vertex функция name может быть какой-либо предмет. По крайней мере, в компиляторе VS hlsl. Должен ли 'SampleLevel()' возвращать 'float4'? –