OpenGL的多邊形分割化

來源:互聯網
上載者:User

OpenGL的工具庫GLU提供了三維處理的常用工具狀態機器(這裡之所以成為工具狀態機器是因為其操作方式和OpenGL很類似),對於多邊形的分割化我主要想介紹的是裡面的幾個重要的概念:

1.多邊形的環繞規則,對於複雜的多邊形,咱們首先要確定的是應該如何來確定環繞線的走向,這樣咱們才可以確定出我們所需要繪製的部分,那部分圖形是多邊形的內部,那部分是多邊形的外部。

2.多邊形分割化的回調,這裡主要說說GLU_TESS_COMBINE這個參數的使用。

   gluTessCallback(tobj, GLU_TESS_COMBINE, 
                   (void(__stdcall *)())combineCallback);

void CALLBACK combineCallback(GLdouble coords[3], 
                     GLdouble *vertex_data[4],
                     GLfloat weight[4], GLdouble **dataOut )
{
     GLdouble *vertex;
     int i;
     std::cout<<"combineCallback is called"<<std::endl;
     vertex = (GLdouble *) malloc(6 * sizeof(GLdouble));
  
     vertex[0] = coords[0];
     vertex[1] = coords[1];
     vertex[2] = coords[2];
     for (i = 3; i < 7; i++)
        vertex[i] = weight[0] * vertex_data[0][i] 
                    + weight[1] * vertex_data[1][i]
                    + weight[2] * vertex_data[2][i] 
                    + weight[3] * vertex_data[3][i];
     *dataOut = vertex;

}

coords是計算出來的交點

vertex_data是頂點附加資料(也就是顏色、法向量等)(取的是最大的資料個數,例如顏色r,g,b,a所以這裡的數組的個數為4)

weight 每個資料在整個資料中所佔的比重



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.