- ベストアンサー
BASICで3Dポリゴンの描画
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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座標で繰り返す という手法です。
その他の回答 (1)
- axsies
- ベストアンサー率64% (38/59)
Zソートでポリゴンの前後関係がうまくいかないのは、どうしても避けられない現象です。 ポリゴン同士が交差してたり、3すくみになっていたり、etc...のような場合は、Zソートではうまくいきません。 質問者さんが図で描かれたような、一見うまくいきそうな場合でも、視点によってはうまくいかないケースもあります。 ↓のページの真ん中の図のような状況 http://sola.eee-craft.com/sola5/tips/zsort.html 完全に解決するにはZバッファ法かスキャンライン法を実装するしかありません。 なるべく、小さな、正多角形に近いポリゴンでメッシュを構成すれば、不正な順序で描画されるポリゴンを減らすことはできます。
お礼
回答ありがとうございます。 やはりBASICでポリゴンの実装はあまり現実的でないようですね。 速度的に厳しい気がしますが、LINE命令の方法でやってみます。