0

レイ キャスティング技術とフォン イルミネーションを使用して球体をレンダリングするプログラムを Java でゼロから作成しようとしていますが、少し迷っています。

phong 方程式の係数の背後にある概念は理解していますが、ベクトル値を取得する方法と、これらすべてとレイ キャスティングとの関係を理解し​​ていません。

画面の中央に球体をレンダリングしたいとしましょう。その位置と半径があるので、(cx、cy、r) です。今どこから始めればいいですか?ベクトル値を正確に取得するにはどうすればよいですか? 私の考えは次のとおりです(疑似コード)

int cx = window width/2
int cy = window height/2
int r = 30;
for(i = 0 -> window height) {
    for(j = 0 -> window width) {
        if( (j-cx)^2 + (i-cy)^2 < r^2) {
            //point inside
            Color c = phong(arguments..)
            draw pixel j,i with color c
        }

    }
}

しかし、これが正しいかどうかはわかりません。正しい場合は、まず法線のベクトル値を取得するにはどうすればよいですか?

正しい方法で私を指すことができますか?何度もグーグルで試しましたが成功しませんでした、よろしくお願いします

4

1 に答える 1

0

法線を計算するためのベクトルは、通常、実際の幾何学的オブジェクトのテッセレーション (近似) から取得されます。つまり、球をたとえば三角形に分割します。次に、各三角形 (p1、p2、p3) は独自の法線ベクトル ((p2-p1)×(p3-p1) を持ちます。

フォン シェーディング メソッドは補間であり、(理想的には) 線をぼかすことで、真の球体ではなく三角形を描いていることがわかりますただし、側面の角には役に立ちません。:(

テッセレーションの 1 つの方法は、ベジエ サーフェス パッチを使用して球体を近似することです。これを適切な小さなサイズに分割し、三角形に単純化します。ここでの私の質問は、この作業を行ってティーポットを描画することを探っています (ほとんどが回転面であり、球体とは異なります)。

于 2013-02-17T19:36:30.183 に答える