0

イメージを保持するために LPDIRECT3DTEXTURE9 を使用しています。

これは、自分の写真を表示するために使用される関数です。

int drawcharacter(SPRITE& person, LPDIRECT3DTEXTURE9& image)
{
position.x = (float)person.x;
position.y = (float)person.y;
sprite_handler->Draw(
image, 
&srcRect,
NULL,
&position,
D3DCOLOR_XRGB(255,255,255));
return 0;
}

本によると、最後のパラメーターが画面に表示されないため、RGBカラーが表示されています。これが透明度を作成する方法です。

これはほとんどの場合機能しますが、画像と画像の端にピンクの線が残ります。試行錯誤の結果、Photoshop に戻ると、ピンク色で上に描画することでピンクのボックスを削除できることがわかりました。これは左側の船で見ることができます。

証拠はありませんが、背景がすべて同じピンク色にならないように、Photoshop が画像のエッジをブレンドしていると考え始めています。ここに画像の説明を入力

誰でもプログラミングでこれを修正できますか、それとも画像のエラーですか?

フォトショップが得意な方がいらっしゃいましたら、画像の修正方法を教えていただけないでしょうか。私は主に png を使用していますが、必要に応じて変更します。

編集: 要求に応じたテクスチャ作成コード

    character_image = LoadTexture("character.bmp", D3DCOLOR_XRGB(255,0,255));
if (character_image == NULL)
    return 0;
4

3 に答える 3

1

透過性をネイティブにサポートしていない BMP 画像を読み込んでいます - 最後のパラメーターD3DCOLOR_XRGB(255,0,255)は、透過性を持たない画像に透過性を追加するために使用されています。問題は、色が完全に一致している必要があることです。1 つでもずれていると透明に変換されず、マゼンタに近い部分が透けて見えます。

画像を透過性のある 24 ビット PNG として保存し、正しく読み込めば問題はありません。また、保存する前にマゼンタの背景を追加しないでください。

于 2011-06-16T14:40:00.390 に答える
0

As you already use PNG, you can just store the alpha value there directly from Photoshop. PNG supports transparency out of the box, and it can give better appearance than what you get with transparent colour.

It's described in http://www.toymaker.info/Games/html/textures.html (for example).

于 2011-06-16T12:32:50.430 に答える
0

Photoshop は画像のエッジをアンチエイリアス処理しています。ピクセルの 30% がイメージの内側にあり、70% がイメージの外側にあると判断した場合、そのピクセルのアルファ値を 70% に設定します。これにより、ピクセルベースの透明度マスクを使用するよりもはるかに滑らかな結果が得られます。これらのアルファ値を捨てているようですが、そうですか? ピンク色は、Photoshop が部分的に透明なピクセルを表示する方法によるものと思われます。

于 2011-06-16T13:05:39.053 に答える