問題タブ [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.

0 投票する
4 に答える
941 参照

objective-c - 複数の光源で照らされると、レイトレースされた球体に暗い線が表示されるのはなぜですか?

最初の交差点までしか機能しない単純なレイトレーサーがあります。シーンは 2 つの異なる光源で問題ないように見えますが、両方のライトがシーン内にある場合、一方の光源からの照明領域の中央にある場合でも、一方の照明領域が終了するところに暗い影ができます (特に、緑のボール)。「両方の光源に照らされた領域」から「1つの光源だけに照らされた領域」への移行は、「1つの光源だけによって照らされた領域」よりもわずかに暗いようです。

imgur.comが主催

照明効果を追加するコードは次のとおりです。

どうすれば正しく見えるようになりますか?

0 投票する
2 に答える
1123 参照

algorithm - 3D hex-like タイル マップでのレイトレーシング (LoS)

ご挨拶、

六角形のタイル マップの 3D バリアントを使用するゲーム プロジェクトに取り組んでいます。タイルは実際にはヘックスではなく立方体ですが、ヘックスのように配置されます (2D から 3D に外挿するために正方形を立方体に変えることができますが、ヘックスの 3D バージョンがないため)。詳細な説明ではなく、4x4x4 マップの例を次に示します。

(任意のタイル (緑) とそれに隣接するタイル (黄色) を強調表示して、全体がどのように機能するかを説明していますが、隣接機能は問題ではなく、既に解決されています。)

タイルを表す構造体型があり、マップはタイルの 3D 配列として表されます (Mapいくつかのユーティリティ メソッドを追加するためにクラスにラップされますが、あまり関係ありません)。各タイルは完全な立方体の空間を表すと想定されており、それらはすべてまったく同じサイズです。また、隣接する「行」間のオフセットは、タイルのちょうど半分のサイズです。

コンテキストはこれで十分です。私の質問は次のとおりです。
と の 2 点の座標が与えられた場合、Aとの間のB直線が交差するタイル (または、それらの座標) のリストを生成するにはどうすればよいですか?AB

これは後で、見通し線や充電パスの合法性などを判断するなど、さまざまな目的に使用されます。

ところで、これは役に立つかもしれません: 私のマップは (0,0,0) を参照位置として使用します。((y+z) mod 2) * tileSize/2.0マップの「ギザギザ」は、各タイルを「正常な」デカルト座標系での位置から右にオフセットすることとして定義できます。ギザギザでない行の場合は 0 になります。が 1の行の場合(y+z) mod 2、0.5 タイルが得られます。

私は、.Net Framework 4.0 をターゲットとする C#4 に取り組んでいます。しかし、特定のコードは本当に必要ありません。奇妙な幾何学/数学の問題を解決するためのアルゴリズムだけです。私はこれを無駄に解決するために数日間試みてきました。そして、「視覚化」するために紙に全体を描こうとしても役に立ちませんでした:( .

ご回答ありがとうございます。

0 投票する
2 に答える
1802 参照

matlab - Matlab-形状境界のエッジに直交してポイントを伝播します

バイナリイメージによって定義された形状境界のエッジに伝播したいポイントのセットがあります。形状の境界は、1px幅の白いエッジによって定義されます。

これらの点の座標は、2行n列の行列に格納されています。形状は凹状の境界を形成し、約2500ポイントで作られた穴はありません。形状の境界に伝播したいポイントが約80〜150あります。

一連の点から直交する方向に各点から光線を当てて、どの点で形状境界と交差するかを検出したいと思います。直交方向はすでに決定されています。必要な目的のために、ポイント1とポイント+ 1を使用して、ポイントに対して計算された等高線の法線を使用して計算されます。

これを行うための最良の方法は何でしょうか?使用できるレイトレーシングアルゴリズムのようなものはありますか?

よろしくお願いします!

編集:私は質問をより明確にすることを試み、問題を説明する画像を追加しました。画像では、灰色の線は形状の輪郭を表し、赤い点は伝播したい点を表し、緑の線は架空の直交投影光線を表しています。

代替テキストhttp://img504.imageshack.us/img504/3107/orth.png

別の編集:明確にするために、各ポイントの法線を計算するために使用されるコードを投稿しました。ここで、xtとytは、各点の座標を格納するベクトルです。通常の値を計算した後、linspace関数と要求された直交線の長さを使用して伝播できます。

0 投票する
1 に答える
2699 参照

c++ - vfptrを失う派生クラスオブジェクトへのポインタ

始めに、私はありふれた、単純なレイトレーサーを書こうとしています。私のレイトレーサーには、世界中に複数のタイプのジオメトリがあり、すべて「SceneObject」と呼ばれる基本クラスから派生しています。ここにそのヘッダーを含めました。

ご覧のとおり、他の場所に実装する仮想関数をいくつか含めました。この場合、派生クラスはSphereとTriangleの2つだけで、どちらも欠落しているメンバー関数を実装しています。最後に、実際の「レイトレーシング」部分を実行する静的メソッドでいっぱいのパーサークラスがあります。関連する部分のスニペットをいくつか示します

今のところ、私は本当のレイトレーシングの部分を放棄し、代わりに最初にヒットしたオブジェクトの色を返すだけです。お気づきのことと思いますが、光線がオブジェクトと交差したことをコンピューターが認識する唯一の方法は、Scene.intersect()を使用することです。これも含まれています。使用されるメンバー変数は「ベクトルオブジェクト」です。終了を参照してください

了解しました。問題が発生しました。まず、シーンを作成し、Parser :: trace()メソッドの外部のオブジェクトで埋めます。奇妙な理由で、私はRayをi = j = 0にキャストしましたが、すべてがうまく機能しています。ただし、2番目のレイがキャストされるまでに、シーンに保存されているすべてのオブジェクトはvfptrを認識しなくなります(つまり、仮想メソッドを除くすべてのSceneObjectメソッドにアクセスできます)。デバッガーを使用してコードをステップ実行したところ、getColor()の終了とループの継続の間のどこかで、すべてのvfptrへの情報が失われていることがわかりました。ただし、getColor()の引数を変更して、Sceneの代わりにScene&を使用すると、損失は発生しません。これは何のクレイジーなブードゥーですか?

要求に応じて、シーンのコード:

0 投票する
2 に答える
1054 参照

open-source - より優れたオープンソースレイトレーサーにはどのようなものがありますか?

オープンソースのレイトレーシングソフトウェアに関しては、どのようなオプションがあるのか​​疑問に思っています。例えば。Yafaray、POV-Ray、他に何がありますか?相対的なメリットについてのご意見もいただければ幸いです。

0 投票する
1 に答える
2163 参照

raytracing - レイマーチングなしのレイトレーシング メタボール

私が見たオンラインのすべての例では、メタボール (潜在的な関数のレベル セット) をレンダリングするときに、レイとメタボールの交点は常にレイマーチングによって検出されます。ポイントを明示的に決定するためのこれに代わるものはありますか?

0 投票する
2 に答える
835 参照

c++ - マルチスレッドレイトレーサーのノイズ

これは私の最初のマルチスレッド実装なので、おそらく初心者の間違いです。スレッドは、ピクセルの2行ごとのレンダリングを処理します(したがって、すべてのレンダリングは各スレッド内で処理されます)。スレッドが画面の上部と下部をそれぞれレンダリングする場合、問題は解決しません。

両方のスレッドが同じ変数から読み取られますが、これにより問題が発生する可能性がありますか?私が理解したことから、書くことだけが並行性の問題を引き起こす可能性があります...

同じ関数を呼び出すと、同時実行の問題が発生する可能性がありますか?そして繰り返しますが、私が理解したことから、これは問題ではないはずです...

両方のスレッドが同じ変数に書き込むのは、計算されたピクセルカラーを保存するときだけです。これは配列に格納されますが、その配列の同じインデックスに書き込むことはありません。これは問題を引き起こす可能性がありますか?

マルチスレッドのレンダリングされた画像 (スパム防止により、画像を直接投稿できなくなります。)

追伸 どちらの場合もまったく同じ実装を使用します。唯一の違いは、レンダリング用に作成された1つのスレッドと2つのスレッドです。

0 投票する
5 に答える
235 参照

math - フォトンが 3D 空間でポリゴンと衝突するかどうか、およびどこで衝突するかを決定する

問題は簡単です:

1) ポイント 1 (x,y,z) からポイント 2 (x,y,z) に移動する光子があり、どちらも 3D 空間のどこにでも配置できます。

2) x 軸および/または y 軸上でランダムに回転し、3D 空間の任意の場所に配置されたポリゴンがあります。

3) 次のことを見つけたい: a) 光子がポリゴンと衝突する場合、b) 衝突する場合、(x,y,z) はどこになるか?

問題の画像: http://dl.dropbox.com/u/3150177/Programming/3D/Math/Photon%20Path/Photon%20Path.png

これの目的は、フォトンのパスがポリゴンとの相互作用からどのように変更されるべきかを計算することです。

私は今この件について読んでいますが、誰かが私に有利なスタートを切ることができるかどうか疑問に思っていました. 前もって感謝します。

0 投票する
2 に答える
3218 参照

geometry - 三角交差アクセラレーション構造用のシンプルな C/C++ ライブラリ

私はレイトレーシングを行っており、アクセラレーション構造 (kd-tree、BVH など) を介して高速化したいと考えています。自分でコーディングしたくありません。私がこれまでに試したこと:

  • kd-tree を pbrt からヤンクします。内部依存関係が非常に多いため、すべての pbrt をコードに取り込まないと成功しませんでした。

  • CGAL の AABB ツリー。イライラすることに、これは交点のみを返すようです。ポイントがどの三角形から来たのかわからない場合、三角形に色を効率的に補間することはできません。「ポイント」の概念を色で拡張したいのですが、これはゼロから多くのテンプレート コードを作成しないと不可能のようです。

  • 自分で書いています。さて、私は独自のグリッド アクセラレーション クラスを作成しました。これは動作しますが、厄介で非効率的です。

したがって、誰かがこの目的に使用できる簡単なライブラリを提案できれば、本当に感謝しています! 必要なのは、三角形のスープと光線を与え、最も近い交点を見つけて、その三角形のインデックスを返すことだけです。

0 投票する
4 に答える
2362 参照

c++ - クラスのインスタンスのリストを保持する方法は?

私はC++でレイトレーサーを作成しており、シーン内のすべてのオブジェクトとの交差をチェックできる必要があります(最適化は後で行われます)。これを行うには、クラスインスタンスの実行リストを保持する必要があります。新しいインスタンスが作成されたときに更新されるポインターのリストは、初期化後に配列のサイズを増やす方法がないため、機能しません。組み込みの(C ++への)ソリューションがあれば本当に欲しいです。