OpenGL里用gluTessBeginPolygon画带孔和凹多边形需要非常注意的一个问题!
2015-11-18 21:49
716 查看
OpenGL一般用glBegin(GL_POLYGON)来画多边形,但是只能画凸多边形。对于带孔的或凹多边形,OpenGL也提供了一种“细分”的方法,其一般步骤如下:
[cpp] view
plaincopy
gluTessBeginPolygon(tobj, NULL);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluTessEndContour(tobj);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);
这里v1-v7分别表示代表多边形边的点,类型为GLdouble*。注意的地方就在这里,v1-v7一定要在gluTessEndPolygon(tobj)执行之前空间不被释放,一般地,在开始gluTessBeginContour(tobj)之前多边形的点就应该已经指定了!!!
下面这段代码就是一个典型的错误(这里的data只是一个临时变量):
[cpp] view
plaincopy
gluTessBeginContour(tobj);
for (i = 0; i < NVERTICES; ++i) {
GLdouble data[3];
data[0] = vertex[i][0];
data[1] = vertex[i][1];
data[2] = vertex[i][2];
gluTessVertex(tobj, data, data);
}
gluTessEndContour(tobj);
转自:http://blog.csdn.net/wonggonghong/article/details/16189337
[cpp] view
plaincopy
gluTessBeginPolygon(tobj, NULL);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluTessEndContour(tobj);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);
这里v1-v7分别表示代表多边形边的点,类型为GLdouble*。注意的地方就在这里,v1-v7一定要在gluTessEndPolygon(tobj)执行之前空间不被释放,一般地,在开始gluTessBeginContour(tobj)之前多边形的点就应该已经指定了!!!
下面这段代码就是一个典型的错误(这里的data只是一个临时变量):
[cpp] view
plaincopy
gluTessBeginContour(tobj);
for (i = 0; i < NVERTICES; ++i) {
GLdouble data[3];
data[0] = vertex[i][0];
data[1] = vertex[i][1];
data[2] = vertex[i][2];
gluTessVertex(tobj, data, data);
}
gluTessEndContour(tobj);
转自:http://blog.csdn.net/wonggonghong/article/details/16189337
相关文章推荐
- Linux 文件方式手动设置IP(慕课网笔记)
- C/S 与 B/S两种架构区别整理汇总
- open函数的O_CREAT与O_EXCL
- 【Linux】——实用命令
- 新手必知linux基础知识
- Velt中的Makefile自动生成
- shell入门-grep-3-egrep
- 卡尔曼滤波+opencv 实现跟踪人脸 小demo
- zabbix 监控 Vmware ESXI
- centos挂载ntfs
- Apache的prefork模式和worker模式
- Spark学习--spark-shell使用
- CentOS6.5下二进制多实例安装mysql-5.6.27
- Spark学习(一)---Spark-shell使用
- MVP+Dagger2+Retrofit实现更清晰的架构
- linux学习第一天----virtual安装ubuntu
- sh_shell的基础语法1
- linux下全屏窗口管理器screen
- 单点登录
- hadoop文件输出为txt格式