2010-12-03 4 views
2

これはプログラミング問題よりも数学的な問題です。Visual Basic .Net 3D Engine

Visual Basic .Netを使用して非常に基本的な3Dエンジンを作成しました。追加のz軸を使用して画面上に線を表示します。エンジンは動作しますが、ラインの一部が0より下になると、それが崩れてラインが再び反転して描画されます。

y = (point.y/z) + offset.y + camera.y 
x = (point.x/z) + offset.x + camera.x 

誰もが、それはz = 0の軸と交差する場合にのみ行の一部を描画する方法を考え出すことができます:

これは、ポイントを算出する方法ですか?

(ソースコード)http://www.mediafire.com/?ww77q26ywj3a5ry

+0

MediaFireのリンクが使用できなくなりました。 –

答えて

2

あなたは、z> 0のすべてを描きたいゼロ以下のすべてはカメラとZ ==ゼロの背後にあるので、あなたがゼロで割ることができないので、これは爆破されます。 10000値が画面に表示されません十分な大きさのものである場合は( 'C#のをscuseが、これはとにかく同じである必要があります)

y = z > 0 ? (point.y/z) + offset.y + camera.y : 10000; 
x = z > 0 ? (point.x/z) + offset.x + camera.x : 10000; 

:だから私はこれを行うだろう。

あなたのz軸が反対方向に向いている場合、あなたはこれをしたいでしょうが:

y = z < 0 ? -1*(point.y/z) + offset.y + camera.y : 10000; 
x = z < 0 ? -1*(point.x/z) + offset.x + camera.x : 10000; 
+0

あなたはただMath.Sign(z) – Evgeny

+0

を使用することができますが、それでも問題は解決しません。なぜなら、z => 0の場合とz = <0の場合の2つの点があるため、線が消えるだけです。どうすればこの問題を回避できますか? – PlyPencil

+0

これらのポイントの1つはカメラの背後にあり、もう1つは前面にあります。あなたはz = 0のxとyの点を見つけるために線形補間をしなければなりません。 – Kell