簡體   English   中英

OpenGL 4 - 三角帶立方體的 UV 坐標

[英]OpenGL 4 - UV Coordinates for Triangle Strip Cube

我有一個用三角形條制成的立方體,我正在嘗試為它找到 UV 坐標。

vert = new VBO<Vector3>(new Vector3[] {
            new Vector3(1, 1, 1), 
            new Vector3(0, 1, 1), 
            new Vector3(1, 1, 0),
            new Vector3(0, 1, 0),
            new Vector3(1, 0, 1),
            new Vector3(0, 0, 1),
            new Vector3(0, 0, 0),
            new Vector3(1, 0, 0)
       });
ind = new VBO<uint>(new uint[] { 3, 2, 6, 7, 4, 2, 0, 3, 1, 6, 5, 4, 1, 0 }, BufferTarget.ElementArrayBuffer);

有誰知道他們會是什么?

簡短回答:您可以為 UV 坐標分配任何值,即使它們重疊(盡管這通常是不可取的)。 只要您為每個頂點坐標創建一個 UV 坐標。 如果您對重疊沒問題,您可以將 8 個 Vector2(s) 聲明為您的 UV 坐標,並為它們分配 -1 和 1 之間的任何值。

長答案:

這一切都取決於您索引坐標的方式。

UV 坐標告訴您如何將 2D 紋理的 2D 多邊形區域映射到 3D 模型幾何體。 每個頂點坐標都應該有一個 UV 坐標,如果您的 UV(s) 和頂點使用相同的索引(這對於您的頂點坐標來說似乎不是最佳的)。

索引指定您的哪個坐標(三角形的 3 個索引,正方形的 4 個索引)與 2D(紋理)或 3D(模型)多邊形相關。 頂點坐標的定義方式,除非您以每 3 個頂點定義一個三角形的方式復制每個頂點,否則您必須使用索引來指示 8 個頂點中的哪個是多邊形。 例如,索引 { 0、1 和 3} 表示立方體頂部的右上-后(此處為后,意思是 Z 軸正方向上的進一步)三角形。

對頂點和 UV 使用相同的索引數組會出現問題。 如果按原樣索引模型,模型面不會有任何問題,但某些 UV 面會與其他先前定義的 UV 面重疊。 這是因為某些面的頂點將與紋理空間另一側的其他頂點共享。 把你的立方體想象成一個十字架,把它放在一起,你要把底座繞回到頂部。 如果立方體的幾何形狀僅存在於 2 維中(就像在 UV 坐標中一樣),則不能這樣做。

在這種情況下,看似最好的解決方案是使用立方體投影,我還不知道該怎么做。 所以,我會推薦我所理解的下一個最佳解決方案:

復制任何會導致 UV 面相互纏繞的頂點(十字的基部)和可選的會導致紋理應用於頂點坐標的方式過度失真的頂點; 頭部的 2 個外部頂點、“臀部”(?) 和十字架的手臂將進一步間隔開,需要紋理扭曲以產生所需的輸出。

這樣做應該會導致您擁有 10 個頂點坐標、10 個 UV 坐標和 36 個索引,其中每 3 個索引定義一個三角形( 12 triangles )。

請記住,有多種方法可以實現您的要求,因此建議進行更深入的研究。

先前描述的坐標和索引對齊的視覺表示。 (固定Z軸)

這表示將索引 0 和 1 處的頂點和 UV 坐標復制到索引 8 和 9。頂點坐標 8 和 9 與頂點 0 和 1 保持相同的 3D 位置值,而 UV 坐標 8 和 9 位於 Y 軸的下方軸比坐標 6 和 7。

我忘了把它放在示例圖像中,但示例中的索引是:

int indices[] = {
    0, 1, 2,
    1, 2, 3,
    2, 3, 4,
    3, 4, 5,
    0, 2, 4,
    0, 4, 6,
    1, 3, 5,
    1, 5, 7,
    4, 5, 6,
    5, 6, 7,
    6, 7, 8,
    7, 8, 9
}

這將為您提供 12 個模型空間三角形和 12 個 UV 三角形,其中每 3 個索引是一個三角形。

編輯:根據@Rabbid76 提供的鏈接,14 個頂點和 UV 坐標會更好,因為你不會得到失真。 我提到的方式只是另一種方式,它有起伏(更多失真,稍微減少內存使用)。

暫無
暫無

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

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