OpenGL的多边形分割化

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 每个数据在整个数据中所占的比重



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值