OpenGL的多边形分割化
2013-09-27 21:32
253 查看
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 每个数据在整个数据中所占的比重
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 每个数据在整个数据中所占的比重
相关文章推荐
- [shell]妈咪,我找到了! -- 15个实用的Linux find命令示例
- openssl安装配置
- poj 2443 Set Operation (位操作)
- ACM网站
- 按键从Linux到Android
- Linux内核源码中两个宏定义likely,unlikely
- CentOS 挂载NTFS
- 编译工具
- C3P0的详细配置说明(com.mchange.v2.c3p0.ComboPooledDataSource)
- NGINX-RTMP复杂度分析
- log4j.properties配置详解
- Linux查看CPU和内存使用情况
- [置顶] linux内核启动1-启动参数(启动参数的获取和处理,分析setup_arch)
- LNK2001: 无法解析的外部符号 __iob问题的解决方法
- DropDownList控件学习
- Android 嵌入式 linux 去掉启动时闪烁的光标 和制作启动LOGO
- 查看linux内存、cpu
- vs2010配置OpenGL
- Linux Mint 15使用问题记录
- [置顶] Linux协议栈代码阅读笔记(一)