問題タブ [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.
graphics - 2Dシルエットを回転させることにより、3Dモデルを作成およびレンダリングする最も簡単な方法
3Dオブジェクトを作成するために軸を中心に回転させたいシルエット(たとえば、チェスの駒)の白黒の2D図面があります。
次に、ある種のレイトレーシングソフトウェアを使用して、その3Dオブジェクトを複数の角度からレンダリングし、各角度を個別のファイルに保存します。
自動的に(繰り返し)行う最も簡単な方法は何ですか1.2D図面からベクトルパスを取得します2.回転させて3Dモデルを作成します3.レイトレーサーにインポートします
- 私はまだ特定のレイトレーサーを選択していませんが、Sunflowが私の目に留まりました。
- テクスチャリング/バンプマッピングは素晴らしいですが、必須ではありません
c++ - Unittest++: 複数の可能な値のテスト
現在、C++ で単純なレイ トレーサーを実装しています。OrthonormalBasis という名前のクラスがあります。これは、1 つまたは 2 つの指定されたベクトルから 3 つの直交単位ベクトルを生成します。次に例を示します。
Unittest++ フレームワークですべてのメソッドをテストしています。問題は、有効な正規直交基底に対して複数の可能な解があることです。たとえば、このテスト:
ベクトル v と w は負の 1 を持つこともあり、それでも有効な正規直交基底を表しているため、成功することも失敗することもあります。複数の期待値を指定する方法はありますか? または、それを行う別の方法を知っていますか?
メソッドをデバッグするために、実際の値と期待される値を標準出力に出力して、このソリューションが機能しないようにすることが重要です。
floating-point - POVray: 表面に接触するだけのオブジェクトの素敵なマージを確実に作成する方法は?
私がしていること
prism
すべてのプリズムが一緒になってより大きな六角形を作るように、六角形の断面と中央のプリズムを囲む n 層のプリズムをアルゴリズムで描画するシーンがあります。
ここで、プリズムの各列は次の列から sqrt(3)/2 の倍数だけずれています (1 つのプリズムの寸法が <1,sqrt(3)> であるため、sin(120/2°) = sqrt(3) )/2)。
プリズムの寸法に対する結果の位置の浮動小数点値は、オブジェクト間のギャップがゼロになるように常に正確に一致するとは限りません。したがって、全体を で包み込み、merge
透明なガラス状のマテリアルを割り当てると、滑らかで均一な形状になりません。n の値に応じて、マージ オブジェクト内のエッジ、または一部のサーフェスの影、またはその両方で、ぎくしゃくした奇妙さが得られます。
これは、ASCII アートでシーンを説明するコードの先頭にあるコメント ブロックのスニペットです。
コード全体はここに貼り付けるには長すぎますが、ここで入手できます。私は下手なコーダーであり、POVray には#for
ループがないため、おそらく読むのも非常に苦痛です。
私の質問
- 表面に接触するだけで重ならない数学的に配置されたオブジェクトをマージする際に、float 値の予測不可能性と不正確さをどのように説明すればよいですか?
- これはPOVrayで私が望むように動作するはずですか?
- 私はここで非常に愚かなことをしていますか?
raytracing - レイトレーシング/フォン
レイトレーシングとフォンやグーローのようなシェーディングテクニックの違いはわかりません。
3Dモデリングの場合、これらのアルゴリズムから選択する必要があります。そうでない場合は、両方を同じアルゴリズムで実装できます。
ありがとうございました。
vector - ベクトル、頂点、エッジ、光線、線、および線分の実装に関する非常に一般的な質問
これは、レイ (および/またはライン セグメントやエッジなど) と、レイ トレーシング操作を実行している/実行していないソフトウェア レンダリング 3D エンジンにおけるそれらの場所に関する大きな一般化された質問です。私は基本を学んでいますが、このことについてあまり知らないことを最初に認めたので、親切にしてください. :)
光線の代わりにパラメータ化された線が使用されないのはなぜだろうか (または??)。インターネット上のいくつかの cpp ファイルを見回したところ、いくつかのリソースで Ray.cpp オブジェクトが定義されていることがわかりました。1 つは頂点とベクトル、もう 1 つはポイントとベクトルを使用しています。法線またはベクトルのみで無限線を定義し、その線に沿って交点を定義して、その無限線のサブセットとして線分を作成できると確信しています。この方法で行を実装している現在のエンジンはありますか、それとももっと良い方法がありますか?
さらに複雑さ (または単純さ?) を追加するために、ウィキペディアは、ベクトル空間では、線分の端点はしばしばベクトルであり、特に u -> u + v であると述べています。すでに定義された無限の線と交差していますが、これの実装を見つけることができず、これを 3D エンジンに適用するときの私の考えの有効性について疑問に思います。Flash 3D エンジン、Papervision を見ると、さらに複雑になります。 Ray クラスを調べたところ、パラメーターとして 6 つの個別の数値を取り、それらを 2 つの異なる Number3D (Papervision の Vector に相当するもの) のデータ型として返します?!?
これらの低レベルの部分を実際の定義に従って実装する正しい方法を実際に使用するものの実装を見ることに非常に興味があります。
opengl - レイキャスティング:射影行列を適切に適用する方法は?
私は現在、正常に動作する GLSL でのレイキャスティングに取り組んでいます。とにかく、正射影から透視投影に移行したいのですが、適切に行う方法がわかりません。レイキャスティングで射影マトリックスを使用する方法に関する良いリンクはありますか? マトリックスを何に適用する必要があるのか さえわかりません(おそらく、何らかの形でレイの方向に?)。今、私はこのようにしています(疑似コード):
しかし今は、gluPerspective 関数と同様に機能する projMatrix を使用して、アスペクト比、fov、近距離および遠距離の平面を簡単に定義できるようにしたいと考えています。基本的に、誰かが私に同様のプロジェクトマトリックスを設定するためのコードのチャンクを提供できgluProjection
ますか? 次に、それを rayDirection で乗算するのが正しいかどうか教えてください。
c++ - Phong スペキュラー シェーディングで色域オーバーフローが発生する原因は何ですか?
現在、C++ で基本的なレイトレーサーを実装しています。これまでのところ、マット マテリアル (アンビエントおよびディフューズ BRDF を使用) は期待どおりに機能します。
スペキュラ ハイライトを追加すると、完全なPhong モデルが得られます。これは、まさに私がやろうとしたことです。
残念ながら、鏡面反射定数 ks と指数のあらゆる種類の値で、ガマット オーバーフローが発生します。下記は用例です。
画像:http://dl.dropbox.com/u/614366/cornell_1.png
画像:http://dl.dropbox.com/u/614366/cornell_2.png
画像:http://dl.dropbox.com/u/614366/cornell_3.png
コードの関連する抜粋を次に示します。
raycast.cpp で
phong.cpp で
specular.cpp で
sphere.cpp で
エラーが発生する可能性のあるアイデアはありますか?そのような結果につながる可能性のある要因は何ですか?
前もってありがとう、パトリック。
3d - ボクセルの octree が与えられた場合、滑らかな表面でどのようにレンダリングしますか?
ほとんどの 3D ボクセル モデルは実際にはかなり低解像度であることに気付きましたが、何らかの補間ですべて滑らかにレンダリングされています。
レイ トレーシングが行われた場合、スムーズにレンダリングするために使用されるアルゴリズムは何ですか? 誰かがこのトピックに関する本を提案できますか?
math - 交差レイと立方ベジエ三角形の検出と検出
モデル エディターを作成しているときに、レイ トレーシングを有効にする以外に、レイと三角形のベジエ パッチの間の交点について非常に適切な近似を見つけたいいくつかの操作について考えることができます。
これを行う方法?私はいくつかの方法を知っていますが、おそらくもっと良い方法があります。
正確な使用例: マウスで詳細な形状を描画するための基準面として、1 つのベジェ三角形パッチを使用したい場合があります。私も、そのようなパッチから分割ポイントを特定したいと思うかもしれません。
そのための C ソース コードがあれば、それも見たいと思うかもしれません。おそらく、自分のコードをローリングする代わりに使用することさえできます。
graphics - レイ生成の不整合
カメラの「目」からカメラの目から少し離れた表示面まで光線を生成するコードを作成しました。
ul
は表示面の左上隅であり、は表示面lr
の左下隅です。それらは次のように定義されます。
ここで、org
はradius
ビューイングプレーンとカメラアイの間の距離であるビューイングプレーンの中心でdx
ありdy
、ビューイングプレーンの中心からのxおよびy方向の変位です。
このConstructRayThroughPixel(...)
関数は、目が(0,0,0)にあるカメラに対して完全に機能します。ただし、カメラが別の位置にある場合、画像に必要なすべての光線が生成されるわけではありません。
何がうまくいかない可能性がある提案はありますか?たぶん私の方程式に何か問題がありますか?
助けてくれてありがとう。