- 締切済み
3Dの網目
碁盤の目を斜めから見ると遠い部分ほど網目が小さく歪んで見えますよね あのような網目を表示するプログラムを書きたいのですが、 なにをどう調べたらよいのか解りません。 やはりOpenGLとかを使うことになるのでしょうか。 どなたか手掛かりだけでも構わないので、 進むべき方向だけでも教えていただけないでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- komi1341
- ベストアンサー率65% (25/38)
追記。 > どんな計算をすればよいものやら検討つきません。 > 微分・積分とか・・ですかね・・ 真面目に3Dの計算を自前でやるなら行列計算ですが、今回のように簡易的に描きたいのであれば、直線の式を駆使すればできそうです。中学レベルの数学ですね。 あとは、紙にそれっぽい網目を描いてみて定規で寸法を計算し、座標値の見当をつけるという手もあります。正確さをそれほど求めないなら、これが一番手っ取り早いかもしれません。
- komi1341
- ベストアンサー率65% (25/38)
単純に網目だけを描きたいのですね。 やっぱり数式を使った方が楽なんですが、数式を載せても解説が面倒そうなのでやめておきます。そのかわり、やっつけ的に座標を計算する考え方を書いてみます。 奥に行くほど網目が縦・横ともに狭くなり、手前に行くほど広くなる、というのは感覚的に分かりますよね。マス目の広さを変えるには、横幅、縦幅を変える、つまりxy値を位置に応じて変えていけばいいんです。 例えば、まずのっぺらな(奥行き方向に傾きのない平面の)網目が描ける座標値を用意します。そして中央の横線より上(奥)にくる座標のxy値を、中央から遠ざかるに従って-1、-2、…とずらしていきます。逆に中央より下(手前)にくる座標は+1、+2、…としていくんです。 もしそれだと斜め具合が足りないと感じたら、+1、+2ではなく+2、+4のように変化量を調整するとか、xとyの変化量を別々にしてみるとか、いろいろ試行錯誤してみればそのうちそれっぽくなると思います。 数学というのは、そういう計算を簡単な式で表せる便利なツール、というだけですので、数学が苦手でも、発想と試行錯誤でなんでもできると思いますよ。
- komi1341
- ベストアンサー率65% (25/38)
大別すると、方法は2種類ですね。 1.2D描画機能でがんばる 画面の奥に行くに従って各座標が画面中央に寄っていくような計算式を自前で考えて網目を描画すればいいです。数学が得意ならそれほど難しくはないでしょう。 2.3Dで描く 碁盤をぐるぐる動かせるようにしたいとか、碁盤に合わせて木目調の画像を貼り付けたいとかいうなら、3Dで描いた方が楽でしょうね。 JavaでやるならJava3DというAPIがSUNから提供されています。あとはJOGLという、Javaの描画画面にOpenGLとほぼ同じ命令文で3D描画ができるAPIもあります。OpenGLを知っている人なら、後者を使う方が楽かもしれません。 他にも2つ3つJava用の3D APIがあった気がしますが、失念してしまいました。とりあえず取っ掛かりになればと思います。
お礼
回答ありがとうございます。 1.2D描画機能でがんばる そうしたいのはやまやまなんですが、私、数学脱落組なもので・・ どんな計算をすればよいものやら検討つきません。 微分・積分とか・・ですかね・・ 2.3Dで描く 私が描きたいのは、平面の網目なんですが、 いろいろ見たサンプルでは立体物であったり、面は塗りつぶされていたりで、しっくりくるものが見つかりません。 うーむ、2D、3Dの2方面でがんばってググってみます。 ありがとうございました。
お礼
遠ざかるにつれ、線と線の間隔がどのぐらいずつ狭まっていくかの算出方法を見つけました。 手前の線と奥の線の間を3等分するのであれば、 1.それぞれの線を3分割し、分割点どおしを直線で結ぶ 2.手前の線と奥の線とを対角線で結ぶ 3.1の線と2の線の交点を通るように手前の線と平行になる線を引く ほほぉ、なるほど・・連立方程式? 確かに中学生レベルですね。 試してみます。 ありがとうございます。