ray

    0熱度

    1回答

    我已經嘗試了很多來自openframeworks論壇和文檔的代碼示例,但我無法得到一個來做我想做的事情。 我有一個ofRay(來自ofxRay)和一個of3dPrimitive的列表。我試圖弄清楚光線是否與原始圖像相交,如果是的話,要知道光線與「第一個」相交的原始圖像(如哪一個與屏幕最接近)。 void renderer::selectPrimitive(int x, int y, bool sh

    2熱度

    1回答

    我想混合raymarching和通常的幾何渲染,但我不明白如何正確比較射線與存儲在緩衝區中的深度值的距離。 在raymarching側,我已經從眼睛(紅點)開始射線。如果您只在固定的射線距離'T'上渲染碎片,則會看到一條曲線(在我的圖中爲黃色)。我明白這一點,因爲如果你從射線源Oa和Ob開始,並在T單位(Oa + T * Da和Ob + T * Db)期間遵循方向Da和Db,則只會看到中間的射線屏

    2熱度

    1回答

    這是許多類似的射線 - 三角形相交算法之一。我測試過的其他所有算法也會爲這些數字返回true,而射線顯然不會穿過三角形。光線從y = 0到y = 1,而三角形在y = 2.3時是平坦的。 這不是一個纏繞的問題,因爲它永遠不應該返回true(繞組問題可以解釋漏報,不誤報)。 所有在C或C++中重現的代碼都包含在這裏。 我錯過了什麼? #define vector(a,b,c) \ (a)[0] =

    6熱度

    1回答

    對於射線追蹤器項目,我一直在研究處理尋找光線和三角形(由三個頂點定義)之間相交的算法。到目前爲止,我發現Möller-Trumbore(MT)算法是普遍使用的。 所以我的問題是1)有沒有MT的替代品或算法被認爲是計算交叉點的最快方法? 2)如果是,MT是否被證明是最優的?或者有人可以想象發明更快的算法? 編輯:我現在看到我的問題是非常相似的Ray-triangle intersection

    2熱度

    1回答

    我有兩個任意點V1和V2。我定義了一條從V1到V2的射線,我想找到射線擊中飛機的確切位置。 當我運行我的代碼時,擊中位置落在錯誤的位置!正如你所看到的綠色球體顯示的射線碰撞位置不與V1和V2對齊。 using UnityEngine; using System.Collections; public class RaycastLearning : MonoBehaviour { // Us

    0熱度

    1回答

    [編輯]正如編程中的典型情況,我在發佈後不久就想出了它!看到我的答案,如果你有興趣:) 我正在使用C++光線跟蹤器,並希望得到一些幫助。我的場景中有兩盞燈,一盞點燈和一盞定向燈,還有一堆球體(以及一架飛機作爲「地板」)。 如果我運行任一光線存在的光線跟蹤器(但其他光線不存在),它會使陰影如預期般(見下圖)。 Directional light shadows image Point light s

    0熱度

    1回答

    我應該爲它創建一個函數和測試用例,它返回一個光線和一個球體的交點。如果有多個相交點(光線進出球體),那麼它應該返回最接近光線起點的點。我必須使用二次方程來做到這一點。這就是我現在所擁有的。 import vector_math import data def sphere_intersection_point(ray, sphere): pnt = data.Point(2*(ra

    -1熱度

    2回答

    我正在尋找算法來計算特定數組是順時針還是逆時針,還是都不是。如果有關係,我使用C#。 輸入變量是X位置,Y位置和任意方向上的歸一化(1單位長)Ray(X和Y分量列表,從-1到1),其源位於給定點。 輸出變量是某種類型,最多可以有3種狀態,例如返回可能性爲0,1或2的字節,以表示順時針,逆時針或不是。 此圖應該有所幫助: 光芒在綠色區域應逆時針返回,在紅色區域的光線應該返回順時針和藍色區域應該返回既

    0熱度

    1回答

    其實我使用下面的代碼來檢測鼠標和某個對象之間的碰撞。 我想要代碼捕獲多個GameObjects(不僅是第一個,但上面的那些)並將其存儲在列表中。我看了,但我有點困惑。 void Update() { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if(Ph

    0熱度

    3回答

    我在場景中有兩個遊戲對象,我將這個腳本分配給它們兩個。當我點擊其中任何一個時,If語句中與每個語句相關的代碼都會被執行兩次,如果我禁用它們中的一個,它會被執行一次。 void Update() { if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = Camera.main.Scree