• ベストアンサー

BASICで3Dポリゴンの描画

BASICで3Dポリゴンの描画を行おうとしているのですが、 Zソート法で順番に奥からポリゴンを描画しようとすると、 後から描画したポリゴンが他のポリゴンと重なっている場合、 PAINTで塗りつぶしがうまくいきません。 具体的には、上の図のように描画したいのに、 下の図のように描画されてしまうことです。 なにかいい解決法はあるのでしょうか。 回答をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

BASIC といってもいろんなものがあります。 境界色を指定できるPAINTなら、線の色だけを境界にするように設定すれば、とりあえずは期待通りにはなります。 ただ、PAINTを使った方法は3Dポリゴンには不向きです。 3Dの特徴の「視点や配置を自由に変えられる」のために、とても小さくなるとか、極端に縦長/横長/斜め長になるとか、があるので ・開始座標を求めるのが大変。細長いときなど、線の外に出てしまうことがある。 ・線と線の間が狭いと、数ドットの隙間ができて、塗る場所が複数に分断されることもある。 という問題があります。 実際によく使われるのは「ポリゴンの中にある全部のドットを打つ」です。 ベタにやれば FOR Y=0 TO 全部のY座標 FOR X=0 TO 全部のX座標 iF (X,Y)がポリゴンの中 THEN PSET(X,Y) NEXT NEXT ただ、これだと時間がかかるので、よくあるのは ・あるY座標について、ポリゴンの中になるX座標の範囲(X0~X1)を計算で求める ・(X0,Y)-(X1,Y)に線を引く ・以上をポリゴン全部が入る範囲のY座標で繰り返す という手法です。

XP9831
質問者

お礼

回答ありがとうございます。 やはりBASICでポリゴンの実装はあまり現実的でないようですね。 速度的に厳しい気がしますが、LINE命令の方法でやってみます。

その他の回答 (1)

  • axsies
  • ベストアンサー率64% (38/59)
回答No.2

Zソートでポリゴンの前後関係がうまくいかないのは、どうしても避けられない現象です。 ポリゴン同士が交差してたり、3すくみになっていたり、etc...のような場合は、Zソートではうまくいきません。 質問者さんが図で描かれたような、一見うまくいきそうな場合でも、視点によってはうまくいかないケースもあります。 ↓のページの真ん中の図のような状況 http://sola.eee-craft.com/sola5/tips/zsort.html 完全に解決するにはZバッファ法かスキャンライン法を実装するしかありません。 なるべく、小さな、正多角形に近いポリゴンでメッシュを構成すれば、不正な順序で描画されるポリゴンを減らすことはできます。

関連するQ&A