2

原点と方向ベクトルはありますが、光線を追跡して衝突をチェックする方法がわかりません...

これが光線の写真です。約6ブロック出ています

Vector3f cam = camera.getPosition();
Vector3f dir = getDirection();

dir.x *= 40;
dir.y *= 40;
dir.z *= 40;

Vector3f dest = new Vector3f(cam.x + dir.x, cam.y + dir.y, cam.z + dir.z);


public Vector3f getDirection()
{
    Vector3f vector = new Vector3f();

    float rotX = camera.yaw;
    float rotY = camera.pitch;

    vector.y = (float) -Math.sin(Math.toRadians(rotY));

    float h = (float) Math.cos(Math.toRadians(rotY));

    vector.x = (float) (h * Math.sin(Math.toRadians(rotX)));
    vector.z = (float) (-h * Math.cos(Math.toRadians(rotX)));

    return vector;
}

gluUnProjectを使ってみましたが、少しは機能しましたが、ブロックの面を選んだときのように、あまり正確ではありませんでした。

ところで:私はチャンクにディスプレイリストを使用していて、そのディスプレイリスト内にブロッククワッドをレンダリングしているだけです。60FPSを取得します。私は検索と検索を行ってきましたが、レイトレーシングやレイピッキングで何も見つかりません...ありがとう!

4

1 に答える 1

1

あなたの質問は非常に不正確です。
あなたのシーンはグリッドで構成されているように見えるので、「3D Digital Differential Analyzer」を調べることをお勧めします:
http://www.cse.chalmers.se/edu/course/_MY_MISSING_COURSE_2012/_courses_2011/TDA361_Computer_Graphics/grid.pdf
および:
http://en.wikipedia.org/wiki/Digital_differential_analyzer_%28graphics_algorithm%29

于 2013-02-21T16:22:09.417 に答える