저는 어떻게하면 가장 간단한 (가장 빠른) 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 구조체는 종류의 값을 가지는 것을 알 수 산술 연산을 수행 할 수 있습니다. 당신은 Texture2D, 위치를 사용하고 있기 때문에
확인하려면 텍스처 매개 변수를 위치 매개 변수로 전달해야합니까? 또는 from vertex? (x, y)의 위치. 둘 다 시도하고 값이 null 인 것 같습니다. –
이 매개 변수는 텍스처 좌표를 나타내지 만 수정 된 위치와 같이 원하는 float2를 사용할 수 있습니다. 어떻게 테스트했는지 궁금합니다. VOut 및 WVP에 대한 정의가 추가되어 코드 컴파일을 시도했지만 실패합니다. 오류 중 하나는 위치 매개 변수로 float4이며 float2 여야합니다. 다른 오류는 함수의 이름입니다. 그것은 main이어야합니다. –
Vertex 함수 이름은 무엇이든 될 수 있습니다. 적어도 VS hlsl 컴파일러에서. 'SampleLevel()'은'float4'를 리턴해야합니까? –