私は半透明の3つのtImage3DでFireMonkeyアプリケーションを作成します。 コードと画面は次のとおりです。すべてうまくいくようです。今Firemonkey半透明のImage3Dが時々不透明です
procedure TForm1.Form3DCreate(Sender: TObject);
// create a new semi-transparent timage3d
// object with color and Z position.
procedure NewImage (const nColor : tColor;
const nZ : integer);
begin
// create the image
with tImage3D . Create (self) do
begin
// put it on the screen
Parent := self;
// set the size
Width := 10;
Height := 10;
// set the image to a single pixel.
Bitmap . Width := 1;
Bitmap . Height := 1;
// set the Alpha to $80 to make it
// semi-transparent
Bitmap . Pixels [ 0, 0 ] := $80000000 + nColor;
// set the z position
Position . Z := nZ;
end;
end;
begin
NewImage (claRed, +10);
NewImage (claGreen, 0);
NewImage (claBlue, -10);
end;
順序を逆にします。今は不透明です。
begin
NewImage (claRed, -10);
NewImage (claGreen, 0);
NewImage (claBlue, +10);
end;
私は何をしないのですか?
明らかに、オブジェクトは以前に作成されたオブジェクトに対して半透明です。それが意味をなさないならば。赤色のボックスはピンク色に見えますが、白い背景は見えますが、緑色または青色のボックスは見えません。緑のボックスでは、白い背景と赤いボックスが表示されますが、青いボックスは表示されません。私はtext3dオブジェクトでも同じことが起こっています。 –
私は@userが正しいと思います。オブジェクトを前面に再描画してみてください。オブジェクトがそれ以下のものを検出していない場合は、おそらくブレンド機能をスキップし、白い背景はカウントされません。 –
オブジェクトを正面に再描画するとどういう意味ですか?これは問題を説明するための非常に簡単な例です。元のアプリには、回転する回転イメージとテキストがいくつかあり、すべてのオブジェクトの位置が50msごとに変更されていたため、常に再描画されていました。 –