簡體   English   中英

如何在Android opengl es2.0中將一個平面多邊形拉伸到3d對象?

[英]How to extrude one flat polygon to 3d object in android opengl es2.0?

我有一個2d平面多邊形數據。 字符串s4 =“ 375.7,216.8 384.4,234.1 397.1,231.6 419.4,275.1”;
我可以在android opengl es中顯示2d圖片。 但是現在我需要將其拉伸到3d對象。 很多朋友建議我根據他們的創造

方式:將頂點數組中的每個頂點添加(0,0,z),然后將結果添加到頂點數組中,總共2 * n個頂點。 因此,在您的示例中,您將頂點(0,0,z),(10,0,z),(10,10,z),(0,10,z)添加到頂點數組中...

float []頂點=新的float [sarr.length * 6]; short []索引=新的short [(sarr.length-2)* 6 + sarr.length * 6];
.....但是我無法獲得正確的結果。

誰可以提供代碼來幫助我在android中進行擠壓?

假設您有一個頂點向量和一個索引向量。

向量頂點 向量索引;

步驟1:現在,您首先需要創建拉伸曲面,該曲面是在拉伸距離上相同曲面的副本,並將三角形反轉以面向相反的方向。

unsigned int originalVertexCount = vertices.size();
unsigned int originalIndexCount = indices.size();
for (int i = 0; i < vertices.size(); i++) {
    Vertex v = vertices[i];
    v.z += extrude;
    vertices.push_back(v);
}

索引就是這樣創建的。

for (int i = 0; i < indices.size(); i+=3) {
    unsigned int ind1 = indices[i + 0] + originalVertexCount;
    unsigned int ind2 = indices[i + 1] + originalVertexCount;
    unsigned int ind3 = indices[i + 2] + originalVertexCount;
    indices.push_back(ind3);
    indices.push_back(ind2);
    indices.push_back(ind1);
}

下一步是填充曲面的側面。

for (int i = 0; i < originalVertexCount; i++) {
    int nextIndex = i + 1;
    if(i + 1 > originalVertexCount)
        nextIndex = 0;
    unsigned int ind1 = indices[i];
    unsigned int ind2 = indices[i] + originalVertexCount;
    unsigned int ind3 = indices[nextIndex] + originalVertexCount;
    indices.push_back(ind1);
    indices.push_back(ind2);
    indices.push_back(ind3);
    unsigned int ind4 = indices[nextIndex] + originalVertexCount;
    unsigned int ind5 = indices[nextIndex];
    unsigned int ind6 = indices[i];
    indices.push_back(ind4);
    indices.push_back(ind5);
    indices.push_back(ind6);
}

該代碼沒有經過100%的測試,但是應該可以正常工作,因為該概念與我們在應用程序中用於生產目的的概念相同。 另外,此拉伸是針對z軸的,您可以根據需要在其他軸上應用相同的拉伸。

暫無
暫無

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

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