私はJavaを使用して、1995年の3Dゲームプログラミングのブラックアートに基づいた非常に原始的な3Dグラフィックエンジンを作成しています。画面に単色のポリゴンを描画し、カメラを「シーン」内で動かすことができるようになりました。一度に表示する半透明のピクセルが多すぎない限り、これらのピクセルをZで並べ替えることで、半透明のオブジェクトを適切に処理するZバッファーもあります。照明を追加したいところです。シンプルにしたいと思います。周囲光は十分にシンプルに見えますが、指向性ライトもかなりシンプルである必要があります。しかし、光源を動かして非常に原始的な影を落とす機能を備えたポイントライティングが本当に必要です(ほとんどの場合、壁を通して光が当たることは望ましくありません)。
私の問題は、これに取り組む最善の方法がわからないことです。一定の角度で光線を投じる点光源を想像します。これらの光線がポリゴンと交差すると、そのポリゴンを照らし、前進を停止します。ただし、複数の光源と複数のポリゴンがあり、それらすべての光線があるシーンについて考えると、非常に遅くなると思います。また、ポリゴンが光源から十分に離れていて、2つの光線の間にある場合の処理方法もわかりません。各光源に最大距離を与えます。十分な光線を与えた場合、その距離内に2つの光線が離れすぎてポリゴンを見逃すポイントはないはずですが、それはポリゴンの数に関する問題を増やすだけです。実行する計算。
あなたへの私の質問は:それらをスピードアップするために、または単にそれをより良く整理するために光源を指すためのいくつかのトリックがありますか?ネストされたforループの悪夢に見舞われるのではないかと心配しています。自分で書きたいので、openGLやDirect3Dなどのチートを使用できません。
これまでの私の結果をご覧になりたい場合は、こちらのYouTubeビデオをご覧ください。私はすでに悪いカメラの回転を修正しました。http://www.youtube.com/watch?v=_XYj113Le58&feature=plcp