2008-09-17 18 views
6

Tôi không nghĩ rằng điều này có thể chỉ bằng cách sử dụng cài đặt màu trong SpriteBatch, vì vậy tôi đang cố gắng tạo ra một trình đổ bóng đơn giản sẽ lấy mọi pixel và làm cho nó trắng, đồng thời tôn trọng giá trị alpha của pixel.Làm thế nào tôi có thể nhuộm một màu trắng thành XNA?

Câu trả lời mà Joel Martinez đưa ra có vẻ đúng, nhưng làm cách nào để kết hợp điều đó khi tôi vẽ sprite với SpriteBatch?

Trả lời

0

Tôi chưa viết trình tối ưu hóa pixel của riêng mình, hầu hết các mẫu được sửa đổi từ mạng, bạn sẽ làm tăng giá trị của các thành phần R, G, B trong pixel tương ứng với điều kiện 255, điều này sẽ dần dần thay đổi màu sắc của các sprite đối với màu trắng. Hey vần điệu đó.

3

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm

sampler2D baseMap; 

struct PS_INPUT 
{ 
    float2 Texcoord : TEXCOORD0; 

}; 

float4 ps_main(PS_INPUT Input) : COLOR0 
{ 
    float4 color = tex2D(baseMap, Input.Texcoord); 
    return float4(1.0f, 1.0f, 1.0f, color.w); 
} 

Nó rất đơn giản, nó chỉ mất màu lấy mẫu từ kết cấu, và sau đó trả về một tất cả màu trắng sử dụng giá trị alpha của kết cấu.

1

Tôi đính kèm trang tài liệu từ MS và nếu bạn làm theo tất cả các bước, bạn nên thiết lập và chạy nó nhanh chóng.

http://msdn.microsoft.com/en-us/library/bb203872(MSDN.9).aspx

Nói tóm lại - bạn cần phải tạo và tập tin có hiệu lực (kết hợp của các mã trên mà thực sự là chính xác cho mục đích của bạn),, thêm nó vào dự án của bạn, và sau đó trong tải tập tin nguồn và sử dụng nó trong quá trình hiển thị như được giải thích trong liên kết.

BTW: Tôi không nhớ SpriteBatch (vì tôi đã chọn viết riêng của mình, nó quá hạn chế), nhưng khi tôi nhớ bạn có thể cần phải đặt hiệu ứng trong tài liệu bạn gửi đến kết xuất. Anyways - có thể bạn sẽ tìm thấy nó ở đây:

http://creators.xna.com/en-us/utilities/spritebatchshader

Và một mã tiên tiến nếu bạn muốn đạt được điều đó:

http://creators.xna.com/en-us/sample/particle3d

Have fun

1

Joel Martinez thực sự là đúng, và bạn sử dụng nó như thế này với một SpriteBatch, sau khi nạp các hiệu ứng vào tintWhiteEffect:

spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None); 

tintWhiteEffect.Begin(); 
tintWhiteEffect.CurrentTechnique.Passes[0].Begin(); 

    // DRAW SPRITES HERE USING SPRITEBATCH 

tintWhiteEffect.CurrentTechnique.Passes[0].End(); 
tintWhiteEffect.End(); 

spriteBatch.End(); 

SpriteSortMode.Immediate là lừa đây, nó cho phép bạn trao đổi trên SpriteBatch của trình đổ bóng mặc định cho riêng bạn. Sử dụng nó sẽ làm cho sprite vẽ chậm hơn một chút mặc dù, vì sprites không được sắp xếp theo một cuộc gọi vẽ duy nhất, nhưng tôi không nghĩ rằng bạn sẽ nhận thấy sự khác biệt.

Các vấn đề liên quan