簡體   English   中英

貝塞爾曲線 OpenGL 根據 2d 空間移動 3d 空間

[英]Bezier Curves OpenGL Move 3d Space According to 2d space

我試圖從邏輯上考慮以下問題:

以代表 2d 用戶生成的貝塞爾曲線的方式在 3d 空間中移動對象。

截至目前,用戶可以創建自己的貝塞爾曲線(可以在右側看到 - 我通過着色器渲染它並可以訪問每個控制點的 x、y)。 截至目前,它有 4 個可移動的控制點。

在此處輸入圖像描述

我似乎想不出將這條 2d 曲線轉換為 3d 空間運動的方法。 試圖實現以下目標:

在此處輸入圖像描述

從大量谷歌搜索中,我確實找到了一些資源,但他們都有關於如何將 2d 點轉換為 3d 空間的信息,這不是我想要的。

感謝任何試圖幫助的人,目前迷路了。 我不需要代碼,但在解決此類問題時需要更多實際幫助。

愉快的一天。

在二維平面中,一個點由它的兩個基向量的一個或多個組合定義。 (如果兩個基向量不正交,則可能有更多組合)

要將點投影到三維平面上,您需要將二維向量b1b2嵌入三維空間並應用平移t (如果需要)。 一般來說,這個矩陣看起來像:

[ b1x b2x tx ]
[ b1y b2y ty ]
[ b1z b2z tz ]

然后將 (x,y, 1 ) 乘以上面的矩陣。 如果乘以 (x,y,0),則忽略平移,這通常不是您想要的。

幸運的是,如果你堅持使用軸對齊的平面,這會簡單得多。 如果我們選擇 z=0 平面,那么基向量是 (1,0,0) 和 (0,1,0),平移是 (0,0,0)。 然后矩陣變為

[ 1 0 0 ]
[ 0 1 0 ]
[ 0 0 0 ]

並且 (x,y,1) 乘以該矩陣就是 (x,y,0)。
換句話說,您可以簡單地執行以下操作:

vec2 bezier_2d = bezier(t);
vec3 bezier_3d = vec3(bezier_2d.x, bezier_2d.y, 0);
vec3 box_pos = original_pos + bezier_3d * scale;

其中bezier(t)計算給定時間步的貝塞爾函數值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM