問題タブ [raytracing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 透視投影とレイトレーシング/レイキャスティングの効率
非常に一般的な質問があります。多数のオブジェクト (それぞれ約 300 点 (x、y、z) を持つ 30 ~ 50 個の閉じた多角形 (z) で構成される) の境界点を決定したいと考えています。ポリゴンの座標系の原点から x、y および z 軸 (アルファ、ベータ、ガンマ) を中心に回転する固定ビューポートを使用しています。
私が見ているように、透視投影またはレイトレーシングの 2 つの可能性があります。透視投影では、各ポイントの位置がビューポートの内外にあるかどうかを判断するために、多数の行列演算が必要になるようです。または、多数のポイントが与えられた場合、ビューポート ピクセルをオブジェクトにレイトレースする方がよいでしょうか? つまり、交差があるかどうかを判断し、次に交差がオブジェクト内またはオブジェクト外で発生するかどうかを判断します。どちらの場合も、この結果を 0 (外側) または 1 (内側) として、ビューポートを表す 200x200 の整数行列に書き込みます。
楽しみにありがとう
java - 任意のカメラを指定してレイをキャストする方法は?
私はレイトレーサーを書いています(それが違いを生む場合は左手座標を使用します)。原則を独学するためなので、OpenGL や被写界深度などの複雑な機能は (まだ) 使用していません。カメラの位置と向きは任意です。location
、 、look_at
、およびの 3 つのベクトルでそれらを示します。これらは同等の POV-Ray ベクトルsky
のように動作します。その「フィルム」にも と があります。(長さは からまでの距離によって暗示されます。)width
height
focal
position
look_at
私の問題は、光線をキャストする方法がわからないことです。光線がどこに到達するかを示すvx
との2 つの量があります。vy
どちらも -1 から 1 まで変化します。どちらも -1 の場合、カメラの位置から「フィルム」の左上隅に光線をキャストしています。両方とも 1 の場合、右下。どちらも 0 の場合は中央。そして残りは明らかです。
私は光線の方程式を導出するためのベクトル演算に精通していません。その方法の説明をいただければ幸いです。
math - 光線平面の交点を重心座標に変換するにはどうすればよいですか?
私の問題:
2つの3Dポイントを取得して、それらを1つの軸にロックするにはどうすればよいですか?たとえば、両方のz軸が0になるようにします。
私がやろうとしていること:
シーンに3D座標のセットがあり、ピラミッドが付いたボックスを表しています。別の3D座標で表されるカメラもあります。シーン座標からカメラ座標を減算して正規化し、カメラを指すベクトルを返します。次に、カメラポイントの後ろにある平面と光線平面の交差を行います。
ここで、O(原点)はカメラの位置、Dはシーンポイントからカメラへの方向、tは光線がカメラポイントから平面と交差するのにかかる時間です。
それが意味をなさない場合は、ここに大まかな図面があります:
私は広範囲にわたって検索しましたが、私が知る限り、これは「ピンホールカメラ」を使用して呼ばれています。
問題は私のカメラの回転ではありません、私はそれを排除しました。問題は、交点を重心(uv)座標に変換することです。
x軸の平行移動は次のようになります。
z軸の平行移動は次のようになります。
私の質問は、光線平面の交点をx軸とz軸の両方の重心座標に変えるにはどうすればよいですか?
filtering - レイトレーシングのテクスチャ縮小フィルター?
誰かが紙/アルゴリズム/リソース/レイトレーサーでテクスチャ縮小フィルター(テクセルがピクセルより小さい場合に適用される)を実装する方法を教えてくれるものを教えてもらえますか?
ありがとう!
tree - KD ツリー トラバーサル (レイトレーシング) - ケースがありませんか?
raytracer で 3D KD-Tree をトラバースしようとしています。ツリーは正しいですが、ブルート フォース アプローチを使用する場合と比較してエラーが発生するため、トラバーサル アルゴリズムに問題があるようです (いくつかの小さな表面領域が無視されるようです)。
注: 問題の光線はどの軸にも平行ではありません。
これは私のトラバーサルアルゴリズムです:
私はすべての異なるケースでグラフィックを作成しました:
(出典: cycovery.com )
ケースがありませんか?
お手伝いありがとう!
raytracing - レイトレーシングシャドウの問題
レイトレーサーのシャドウレイに問題があります。
次の2枚の写真をご覧ください
3D sMax:
代替テキストhttp://neo.cycovery.com/shadow_problem.gif
私のレイトレーサー:
代替テキストhttp://neo.cycovery.com/shadow_problem2.jpg
シーンは非常に明るい光で照らされ、後ろから輝いています。非常に明るいので、シェーディングにグラデーションはなく、白または暗い(露出オーバーのため)だけです。
両方の画像は3DStudioMaxを使用してレンダリングされ、両方ともまったく同じジオメトリを使用します。1つのケースでは、法線が三角形全体に補間されます。
次に、表面の赤い点について考えます。滑らかでないバージョンの場合、それは暗い領域にあります。これは、光源が三角形とは反対を向いているため、この三角形からは光源が見えないことを意味します。ただし、平滑化されたバージョンでは、補間された法線がそのポイントで光が見えることを示唆しているため、明るい領域にあります(三角形の実際のジオメトリは光源とは反対を向いていますが)。
私の問題は、レイトレーシングされたシャドウが入ってくるときです。シャドウレイが赤い点からシーンに照射され、光源が見えるかどうかをテストする場合(シャドウイングを決定するため)、シャドウレイは交差点を返します。法線が補間されるかどうか(交差はジオメトリにのみ依存するため)。したがって、ピクセルは暗くシェーディングされます。
3dsamxはケースを正しく処理しています-レンダリングされた画像はレイトレースシャドウをオンにして生成されました。ただし、レイトレーシングされたシャドウをオンにすると、自分のレイトレーサーでこの問題が発生します(レイトレーシングされたシャドウがシャドウにあるポイントを決定するため、レイトレーサーでは、どちらの場合もポイントが暗くなります)。解決方法がわかりません。それ。
誰かがこの問題とその対処方法を知っていることを願っています。
ありがとう!
opengl - OpenGLgluUnProjectオブジェクトセクション
gluUnProjectを使用してレイをシーンにキャストし、そこにプリミティブを追加しています。私がやろうとしているのは、既存のプリミティブを正確に選択することです。したがって、球が3つある場合は、1つをクリックして削除できます。
解決策は、光線がオブジェクトと交差しているかどうかを確認し、キャストの原点に最も近いかどうかを確認することになると思います。これまでの私の解決策は原始的であり、すべてのオブジェクトを境界キューブで囲んでいます。とにかく、次のように球を使用してこれを正確に行う方法はありますか。
また
最後に、GLUTでOpenGLを使用しています。
みんなありがとう、ローレンス
geometry - 光線/球の交点の二次方程式を設定するには?
私はレイ トレーサーの計算を研究していますが、この件に関して読んだほぼすべての記事で行われている遷移に従っているわけではありません。これは私が持っているものです:
球の式:
(X - Cx)^2 + (Y - Cy)^2 + (Z - Cz)^2 - R^2 = 0
ここで、R は半径、C は中心、X、Y、Z は球のすべての点です。
線の式:
X + DxT、Y + DyT、Z + DzT
ここで、D は線の正規化された方向ベクトル、X、Y、Z は線上のすべての点、T は線上のある点のパラメータです。
直線の成分を球の方程式に代入すると、次のようになります。
(X + DxT - Cx)^2 + (Y + DyT - Cy)^2 + (Z + DzT - Cz)^2 - R^2 = 0
私はその時点まですべてをフォローしていますが(少なくとも私はそうしていると思います)、私が読んだすべてのチュートリアルは、それを説明せずにそこから2次方程式にジャンプします(これはサイトの1つからコピーされているため、用語は私の例とは少し異なります):
A = Xd^2 + Yd^2 + Zd^2
B = 2 * (Xd * (X0 - Xc) + Yd * (Y0 - Yc) + Zd * (Z0 - Zc))
C = (X0 - Xc)^2 + (Y0 - Yc)^2 + (Z0 - Zc)^2 - Sr^2
二次式を使用して T を解く方法を取得しますが、上記の式から二次方程式に到達する方法がわかりません。それは私が長い間忘れていた一般的な数学の知識の一部にすぎないと思いますが、「二次方程式の設定方法」をグーグルで調べても、実際には何も得られませんでした.
完全に理解できないコードを書くのは好きではないので、先に進む前にこのステップに到達する方法を理解したいと思っています。
performance - 高速レイトレーシングアルゴリズムに関するリソースを求める
まず、この大まかな質問を申し訳ありませんが、あまり詳細を紹介したくないので、記事、ライブラリ、ヒントなどの関連リソースをお願いします。
私のプログラムでは、光線と三角形の交点(数百万の光線と三角形があります)を集中的に計算する必要があります。私の目標は、可能な限り高速にすることです。
私がしたことは:
私が知っている最速のレイトライアングルアルゴリズムを使用してください。
Octreeを使用します(Game Programming Gem 1、4.10。4.11から)
octreeアルゴリズムで使用される効率的で堅牢なレイボックス交差アルゴリズムを使用します。
これらの優れたアルゴリズムを適用する前よりも高速ですが、高速になる可能性があると思います。高速化できる可能性のある場所に光を当ててください。
ありがとう。
algorithm - 線分が球と交差するかどうかをテストする
線分(つまり、2点間)が球と交差するかどうかを判断しようとしています。セグメントが球の表面と交差するかどうかだけで、交差の位置には関心がありません。このための最も効率的なアルゴリズムが何であるかについて誰かが何か提案がありますか?(交差位置には興味がないので、通常の光線と球の交差アルゴリズムよりも単純なアルゴリズムがあるかどうか疑問に思います)