OpenGL分格化和二次方程表面
来源:互联网 发布:加密狗写入软件 编辑:程序博客网 时间:2024/05/17 23:44
原文点击打开链接
分格化
opengl只能对凸多边形进行渲染,所以对于凹多边形和有空洞的多边形需要进行分格化处理
步骤:
1.gluNewTess()创建一个分格化对象
2. 调用几次gluTessCallback()注册几个用于在分格化时执行必要操作的回调函数,
3. gluTessProgerty()指定分格化属性
4. 指定一个或多个多边形轮廓线来创建和渲染经过分格化的多边形
5.复用分格化对象或gluDeleteTess删除分格化对象
1.gluNewTess()创建一个分格化对象
2. 调用几次gluTessCallback()注册几个用于在分格化时执行必要操作的回调函数,
3. gluTessProgerty()指定分格化属性
4. 指定一个或多个多边形轮廓线来创建和渲染经过分格化的多边形
5.复用分格化对象或gluDeleteTess删除分格化对象
分格化属性
gluTessProperty(GLUtesselator* tessobj, GLenum property, GLdouble value);
property value default value function
GLU_TESS_BOUNDARY_ONLY GL_TRUE分格化为线框多边形 GL_FALSE绘制填充多边形
GLU_TESS_TOLERANCE 表示距离 0 多边形两点距离小于公差值value时合并
GLU_TESS_WINDING_RULE GLU_TESS_WINDING_ODD 决定那部分位于内部和外部
gluGetTessProperty()获取属性值
gluTessNormal()控制分格化的多边形环绕方向。
gluTessNormal()控制分格化的多边形环绕方向。
定义多边形
void gluTessBeginPolygon(GLUtesselator* tessobj, void * user_data);
void gluTessEndPolygon(GLUtesselator* tessobj);
在两个函数之间进行多边形绘制,系统自动进行分格化,并按照指定的gluTessCallback和gluTessProperty进行处理。user_data会直接传递给带有DATA的回调函数。
void gluTessBeginPolygon(GLUtesselator* tessobj, void * user_data);
void gluTessEndPolygon(GLUtesselator* tessobj);
在两个函数之间进行多边形绘制,系统自动进行分格化,并按照指定的gluTessCallback和gluTessProperty进行处理。user_data会直接传递给带有DATA的回调函数。
gluTessBeginContour(GLUtesselator* tessobj);
gluTessEndContour(GLUtesselator* tessobj);
开始和结束一条闭合的轮廓线
gluTessEndContour(GLUtesselator* tessobj);
开始和结束一条闭合的轮廓线
gluTessVertex(GLUtesselator* tessobj, GLdouble coords[3], void* vertex_data);
指定多边形顶点。coords包含了三维顶点,vertex_data包含了顶点坐标,表面法向,纹理坐标, 颜色信息等所有回调函数可能用到的数据。
指定多边形顶点。coords包含了三维顶点,vertex_data包含了顶点坐标,表面法向,纹理坐标, 颜色信息等所有回调函数可能用到的数据。
删除分格化对象;
void gluDeleteTess(GLUtesselator* tessobj);
void gluDeleteTess(GLUtesselator* tessobj);
提高分格化性能建议:
1. 把分格化操作的输出存储在显示列表或其他用户结构中
2. 使用gluTessNormal()提供多边形法向
3. 一个线程的情况下,使用一个分格化对象渲染大量多边形。
1. 把分格化操作的输出存储在显示列表或其他用户结构中
2. 使用gluTessNormal()提供多边形法向
3. 一个线程的情况下,使用一个分格化对象渲染大量多边形。
二次方程表面
使用分格化实现二次方程表面绘制
步骤:
1. gluNewQuadrix()创建二次方程对象
2. 指定绘图属性
a. gluQuadrixOrientation()控制环绕方向,区分内外部分
b. gluQuadricDrawStyle选择把物体渲染为点,线或填充多边形
c. 对于使用光照的表面,gluQuadricNormals为每个顶点指定法线
d. 对于进行纹理贴图的表面,gluQuadricTexture生成纹理坐标
3. gluQuadricCallback注册错误回调函数
4. 根据需要调用二次方程表面渲染函数gluSphere(), gluCylinder(), gluDisk(), gluPartialDisk().
5. gluDeleteQuadric()销毁对象,可以复用该对象。
步骤:
1. gluNewQuadrix()创建二次方程对象
2. 指定绘图属性
a. gluQuadrixOrientation()控制环绕方向,区分内外部分
b. gluQuadricDrawStyle选择把物体渲染为点,线或填充多边形
c. 对于使用光照的表面,gluQuadricNormals为每个顶点指定法线
d. 对于进行纹理贴图的表面,gluQuadricTexture生成纹理坐标
3. gluQuadricCallback注册错误回调函数
4. 根据需要调用二次方程表面渲染函数gluSphere(), gluCylinder(), gluDisk(), gluPartialDisk().
5. gluDeleteQuadric()销毁对象,可以复用该对象。
- OpenGL分格化和二次方程表面
- 分格化和二次方程表面
- OpenGL从1.0开始--光照和表面绘制函数
- OpenGL表面纹理细节(转)
- 《高效学习OpenGL》 之 隐藏表面消除
- 二次方程
- 什么是一元一次方程和一元二次方程
- 《高效学习OpenGL》 之 管理二次方程对象 gluNewQuadric(),gluDeleteQuadric(),gluQuadricCallback()
- OpenGL ES 颜色缓冲 深度测试 表面剔除
- OpenGL从1.0开始--纹理与表面细节
- openGL之深度测试、表面剔除、剪裁---openGL学习笔记(五)
- 表面的意思和真正的意思
- 《高效学习OpenGL》 之 控制二次方程对象的属性 gluQuadricDrawStyle(),gluQuadricOrientation(),gluQuadricNormals(),gluQu()
- 《高效学习OpenGL》 之 二次方程图元 gluSphere(),gluCylinder(),gluDisk(),gluPartialDisk()
- Win32 OpenGL编程(13) 隐藏表面消除(深度测试)及雾效果
- Chromium硬件加速渲染的OpenGL上下文绘图表面创建过程分析
- 用多边形近似球体表面(icosphere)的Mesh数据的生成并使用openGL绘制
- 一元二次方程(if语句和do...while语句)
- java基础之高级应用
- Android中shape的使用
- Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
- 【Win8系统RP输入法切换方法】
- RedHat5.8下ORALCE11g 安装
- OpenGL分格化和二次方程表面
- iOS多线程编程指南
- 免费使用的图表控件XML/SWF Charts 5.08
- 黑马程序员__7K面试题之交通灯管理系统
- 发邮件代码
- hdu 1067 BFS + hash
- 黑马程序员——交通灯管理系统
- [C/C++]_[十六进制字符串转换数值并写入文件]
- Permutation Sequence