丸い描画可能領域を作るには

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
locas

丸い描画可能領域を作るには

#1

投稿記事 by locas » 16年前

今アクションゲームを作っていて、土地(フィールド)は画面に全部表示されていて、
主人公の周りだけ障害物などが見える、というシステムが作りたいのです。
今まではSetDrawAreaを使い四角形でやっていましたが
他のシステムを作るにしたがってやはり丸い描画可能領域を作りたくなりました。
何か擬似的にでも再現する方法はありませんか?

Justy

Re:丸い描画可能領域を作るには

#2

投稿記事 by Justy » 16年前

  環境は何ですか?
 なんとなく Windows+DXライブラリのようにも思えますが。


 仮にDXライブラリだとして、

>主人公の周りだけ障害物などが見える、というシステムが作りたいのです

 くっきりと明暗を分けたいので有れば、Zバッファを使うのがいいでしょう。

・ DrawBoxToZBuffer()
・ DrawCircleToZBuffer()
・ DrawGraphToZBuffer()
・ DrawTurnGraphToZBuffer()
・ DrawExtendGraphToZBuffer()
・ DrawRotaGraphToZBuffer()
・ DrawModiGraphToZBuffer()

 完全な円なら、DrawCircleToZBuffer()で、予め領域を指定しておけば、
それ以降はその領域以外にしか描画しない、という指定ができます。

 でも、

>主人公の周りだけ障害物などが見える、というシステム

 というシステムだということを考えると、背景やキャラクタの上から中央だけ明るく、
周囲にいくに従って暗くなるような絵をアルファブレンドでかぶせてしまった方が
効果的だと思います。

Dixq (管理人)

Re:丸い描画可能領域を作るには

#3

投稿記事 by Dixq (管理人) » 16年前

私はJustyさんがおっしゃっている後者の方法でやっていました。
例えば主人公のいる中心から直径200ピクセルをグラデーションかけて暗くしていきたい時、
まず
SetDrawArea
で主人公のまわり200x200の広さを描画可能エリアにします。
そこに用意した200x200のグラデーションのかかった画像を上書きすればよいのです。
口でいってもわかりにくいかもしれないので、画像を作ってみました。
これ使って試していないので、グラデーションの階調があわないかもしれないので、サンプル程度にどうぞ
黒に黒なんでよく見えませんが
↓ここから画像↓
画像
↑ここまで↑
これじゃよくわからないかもしれないので、こちらに透明度を表現した画像も用意しました。
↓ここから画像↓
画像
↑ここまで↑
この画像は中央に行くに従って透明であり、端にいくにしたがって黒くなっています。
ですから、これをかぶせて描画することで、中央はそのまま、端に行くに従って暗くなる表現が可能になります。

Justy

Re:丸い描画可能領域を作るには

#4

投稿記事 by Justy » 16年前

 もう少しだけ補足しておきます。

>土地(フィールド)は画面に全部表示されていて

 ということなので、まず先にフィールド全体を表示します。
 
 次に黒から白の円状のグラデーションな画像を用意します。
 障害物を表示するときはこのグラデーション画像と重なっているかどうかを
調べ、重なっていなければ表示を行わないようにします。
 重なっていた場合はそのグラデーションと障害物のオブジェクトをブレンドし、
グラデーション画像が黒であればあるほど障害物が透明になるようにして表示します。

 で、最後に普通にプレイヤーを表示すれば、大体望む通りの画像になると思います。

Dixq (管理人)

Re:丸い描画可能領域を作るには

#5

投稿記事 by Dixq (管理人) » 16年前

あぁ、なるほど、RPGのトンネルや洞窟でよくあるような
暗闇に松明を持っているような演出とはちょっと違ったんですね。
誤解回答すみませんm(_ _;)m

Justy

Re:丸い描画可能領域を作るには

#6

投稿記事 by Justy » 16年前

 いえ、私も最初そう思ってしまいましたので、つい「キャラクタの上から」と
書いてしまいました。
 読みが足らなかったみたいです。

 ただ、locasさんは最初 SetDrawArea()を使っていたみたいなので、
Zバッファ方式でも十分な事足りる気もしますね。

locas

Re:丸い描画可能領域を作るには

#7

投稿記事 by locas » 16年前

たくさんの回答ありがとうございました。
皆さんからオススメして頂いたαブレンドのもので試してみたいと思います。
本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る