Gần đây tôi đã tham gia lập trình HLSL và tôi rất tò mò về CÁCH một số điều tôi đang thực sự làm việc.Một số câu hỏi XNA/HLSL đơn giản
Ví dụ: tôi đã có trình đổ bóng rất đơn giản này ở đây tô màu bất kỳ pixel nào có màu teal thành màu đỏ-ish.
sampler2D mySampler;
float4 MyPixelShader(float2 texCoords : TEXCOORD0): COLOR
{
float4 Color;
Color = tex2D(mySampler, texCoords.xy);
if(Color.r == 0 && Color.g == 1.0 && Color.b == 1.0)
{
Color.r = 1.0;
Color.g = 0.5;
Color.b = 0.5;
}
return Color;
}
technique Simple
{
pass pass1
{
PixelShader = compile ps_2_0 MyPixelShader();
}
}
Tôi hiểu rằng tex2D
chức năng lấy màu của pixel tại vị trí quy định, nhưng những gì tôi không hiểu là như thế nào mySampler
thậm chí còn có bất kỳ dữ liệu. Tôi không thiết lập nó hoặc đi qua trong một kết cấu ở tất cả, nhưng nó kỳ diệu chứa dữ liệu của kết cấu của tôi.
Ngoài ra, sự khác biệt giữa những thứ như là những gì: COLOR
và COLOR0
hoặc TEXCOORD
và TEXCOORD0
tôi có thể mất một đoán hợp lý và nói rằng COLOR0
là một registry trong lắp ráp chứa màu điểm ảnh đang được sử dụng trong GPU. (có thể hoàn toàn sai, tôi chỉ nói những gì tôi nghĩ là)
Và nếu vậy, điều đó có nghĩa là chỉ định một cái gì đó như float2 texCoords : TEXCOORD0
sẽ theo mặc định, lấy vị trí hiện tại mà GPU đang xử lý?
Mặc dù chính xác nó được gán cho mẫu trong sổ đăng ký ở đâu? Tôi đã không chỉ định đăng ký nó lấy mẫu từ vì vậy tôi đoán nó sẽ chỉ lấy s0 theo mặc định mà không có bất kỳ đặc điểm kỹ thuật mã? Ngoài ra, bạn sẽ đưa ra một câu hỏi khác: 'sampler' có hoạt động giống như' sampler2D' không? – inline
bất kỳ thao tác vẽ nào bạn làm, sử dụng thanh ghi đó, nếu bạn đang sử dụng spritebatch hoặc hiệu ứng cơ bản trước đó với kết cấu đó, nó đã được thực hiện nội tại ... – Blau
Ngọt. Cảm ơn bạn đã thanh toán bù trừ một số thứ cho tôi. :) – inline