プロが教えるわが家の防犯対策術!

2Dサーフェス上イメージのブレンド処理を
サーフェスメモリへの直接アクセスでやってるのですが、
いかんせん遅いです。やっぱZバッファとか使うしか
ないですかねえ‥‥使い方あまり知らないんだけど‥‥

3Dでも構わないんで、ブレンド処理を
(可能なら)D3DXで使ったコーティング例なんかメールで
送ってもらえたら有難いです‥‥さすがにムリか(爆)

A 回答 (2件)

MMX命令自体はインラインアセンブラでいつでも使用できます。

(VC6の場合)
命令のリファレンスはインテルのサイトからDL出来ます。

スクリーン全体のアルファブレンドの動的変更と言うことは、
フェードイン・アウトやクロスフェードなんかをしたいんですかね?
すごい重いということですが、アルファブレンドをかけるサーフェスを
ビデオメモリに取ってませんか?
システムメモリにサーフェスを作ることで多少改善されると思うのですが。

現在私が作っているプログラムではP3-700+GeForce2GTS+Win2kのマシンで
640x480の16bitのMMXを使用したクロスフェードで
60fps程度ですね。(まだ高速化の余地はありますが・・・)
Celeron366+TNT2+Win98では30fps程度ですが、実際に見てみると特に遅いと思うことはないです。
画面のエフェクト程度ならばこれぐらいで十分だと思いますが。

でも、いくら頑張っても3Dハードウェアを使用するほうが早いです。
3Dハードウェアを使用すると環境が結構限定されてしまうのが欠点ですね。

このサイトに、MMXを使用したアルファブレンドのサンプルがあります。
MMXを使用しない場合でも、かなり最適化されてます。(すごいです)
私も参考にさせて貰いました。
ただ問題なのが英語のページなんです・・・

参考URL:http://www.gamedev.net/reference/programming/fea …
    • good
    • 0
この回答へのお礼

うぅっ、英語なんですね(T-T)
けど プログラマって英語力必要ですよね‥‥どうにか頑張ってみます。
サーフェスのメモリ確保も(まだやってないんですけど)
変更して動作確認してみます。これで解決すれば万々歳ですが^^;

ではでは、ありがとうございました。
またカキコみつけた時は お願いします(笑)

お礼日時:2001/01/19 03:11

はじめまして。


サーフェスをLockしてアルファブレンドする場合は
アルファブレンドするサーフェスをビデオメモリに取っているのであれば
システムメモリに取ると早くなります。
DirectXではビデオメモリのサーフェスへLockして、データをリードすると
めちゃめちゃ時間掛かります。(すべての環境で遅いとは限らないかもしれません。今まで見たビデオカードではそうでした。)
それと、MMXを使うとさらに高速化が可能です。
MMXを使用すると、16ビットカラーの場合4ピクセルずつ処理できます。

ビデオカードが対応していればD3DXを使用した方が高速です。
ただ、ビデオカードが対応してなければやはり遅いです。
D3DXで半透明はDirectXのサンプル見れば簡単に作れるのでは?
俺はIMでしかやったこと無いですが・・・

参考になれば幸いです。それでは。

この回答への補足

回答ありがとうございます。
今ブレンドで処理したいのが、
スクリーン全体のブレンドによる動的変更――
つまり連続(アルファ値を徐々に変更)した
ブレンド処理なんですけど‥‥それやろうとすると、
やはり2Dではどーしても重いんですね。
普通にブレンド使う分には全然おっけーなのですが。

MMX指令は、ちょっと知らない部分かも‥‥
でもあれってIMとかで使うんですよね・・・・やっぱ3D使うかなあ‥‥

補足日時:2001/01/18 05:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!