OpenGL面细节
来源:互联网 发布:陕西师大网络远程教育 编辑:程序博客网 时间:2024/05/02 01:26
【原文:http://blog.sina.com.cn/s/blog_8e0502b7010198o5.html】
在OpenGL中面的基本单位是凸多边形。而一般绘制时,多边形的正面、反面两个面均以填充形式进行绘制。下面介绍绘制方式可以如何改变。(材质贴图内容太多以后再展开写)
下面给出一个实例,来看看这三个函数的具体功能:
——————————————————————————————————————
依然将下面的代码插入第一节程序glFlush();之前
glPolygonMode(GL_FRONT,GL_POINT);//正面点形式
glBegin(GL_QUADS); //画
glEnd(); //形
glPolygonMode(GL_FRONT,GL_LINE); //正面轮廓形式
glBegin(GL_QUADS); //画
glEnd(); //形
glPolygonMode(GL_FRONT,GL_FILL); //还原默认值
glBegin(GL_QUADS); //画
glEnd(); //形
glPolygonMode(GL_FRONT,GL_LINE); //正面轮廓形式
glEnable(GL_CULL_FACE); //启用面剔除功能
glCullFace(GL_FRONT); //只剔除正面
glBegin(GL_QUADS); //画
glEnd();
glCullFace(GL_BACK); //只剔除背面
glBegin(GL_QUADS); //画
glEnd();
glCullFace(GL_FRONT_AND_BACK); //两面剔除
glBegin(GL_QUADS); //画
glEnd();
glFrontFace(GL_CW); //反转顶点方向
glPolygonMode(GL_FRONT,GL_LINE);
glCullFace(GL_FRONT); //只剔除正面
glBegin(GL_QUADS); //画
glEnd();
glCullFace(GL_BACK); //只剔除背面
glBegin(GL_QUADS); //画
glEnd();
glCullFace(GL_FRONT_AND_BACK); //两面剔除
glBegin(GL_QUADS); //画
glEnd();
glDisable(GL_CULL_FACE); //禁用剔除功能
——————————————————————————————————————++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 运行程序:
第一行,依次是点、轮廓和填充形式。
第二行,启用剔除设定正面是填充、背面轮廓,依次剔除正面、背面和两面。
第三行,启用并设定反转,依次剔除正面、背面和两面。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
——————————————————————————————————————
将下面的代码插入第一节程序glFlush();之前
GLubyte polygon[] = { //看得出这数组是个“面”字吗?下面用二进制翻译一下
0x00,0x00,0x00,0x00, //0000 0000 0000 0000 0000 0000 0000 0000
0x00,0x00,0x00,0x00, //0000 0000 0000 0000 0000 0000 0000 0000
0x00,0x00,0x00,0x00, //0000 0000 0000 0000 0000 0000 0000 0000
0x0E,0x00,0x00,0x70, //0000 1110 0000 0000 0000 0000 0111 0000
0x0F,0xFF,0xFF,0xF0, //0000 1111 1111 1111 1111 1111 1111 0000
0x0F,0xFF,0xFF,0xF0, //0000 1111 1111 1111 1111 1111 1111 0000
0x0F,0xFF,0xFF,0xF0, //0000 1111 1111 1111 1111 1111 1111 0000
0x0E,0x38,0x1C,0x70, //0000 1110 0011 1000 0001 1100 0111 0000
0x0E,0x38,0x1C,0x70, //0000 1110 0011 1000 0001 1100 0111 0000
0x0E,0x38,0x1C,0x70, //0000 1110 0011 1000 0001 1100 0111 0000
0x0E,0x3F,0xFC,0x70, //0000 1110 0011 1111 1111 1100 0111 0000
0x0E,0x3F,0xFC,0x70, //0000 1110 0011 1111 1111 1100 0111 0000
0x0E,0x3F,0xFC,0x70, //0000 1110 0011 1111 1111 1100 0111 0000
0x0E,0x38,0x1C,0x70, //0000 1110 0011 1000 0001 1100 0111 0000
0x0E,0x38,0x1C,0x70, //0000 1110 0011 1000 0001 1100 0111 0000
0x0E,0x38,0x1C,0x70, //0000 1110 0011 1000 0001 1100 0111 0000
0x0E,0x3F,0xFC,0x70, //0000 1110 0011 1111 1111 1100 0111 0000
0x0E,0x3F,0xFC,0x70, //0000 1110 0011 1111 1111 1100 0111 0000
0x0E,0x3F,0xFC,0x70, //0000 1110 0011 1111 1111 1100 0111 0000
0x0E,0x38,0x1C,0x70, //0000 1110 0011 1000 0001 1100 0111 0000
0x0E,0x38,0x1C,0x70, //0000 1110 0011 1000 0001 1100 0111 0000
0x0F,0xFF,0xFF,0xF0, //0000 1111 1111 1111 1111 1111 1111 0000
0x0F,0xFF,0xFF,0xF0, //0000 1111 1111 1111 1111 1111 1111 0000
0x0F,0xFF,0xFF,0xF0, //0000 1111 1111 1111 1111 1111 1111 0000
0x00,0x0F,0x00,0x00, //0000 0000 0000 1111 0000 0000 0000 0000
0x00,0x0F,0x00,0x00, //0000 0000 0000 1111 0000 0000 0000 0000
0x00,0x07,0x80,0x00, //0000 0000 0000 0111 1000 0000 0000 0000
0x3F,0xFF,0xFF,0xFC, //0011 1111 1111 1111 1111 1111 1111 1100
0x3F,0xFF,0xFF,0xFC, //0011 1111 1111 1111 1111 1111 1111 1100
0x3F,0xFF,0xFF,0xFC, //0011 1111 1111 1111 1111 1111 1111 1100
0x00,0x00,0x00,0x00, //0000 0000 0000 0000 0000 0000 0000 0000
0x00,0x00,0x00,0x00 //0000 0000 0000 0000 0000 0000 0000 0000
};
glEnable(GL_POLYGON_STIPPLE); //启用点画多边形功能
glPolygonStipple(polygon); //定义polygon数组为当前点画模式
glBegin(GL_QUADS); //画
glEnd(); //形
glDisable(GL_POLYGON_STIPPLE); //关闭点画多边形功能
——————————————————————————————————————
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
运行程序:
很犀利的一百个“面”字。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
——————————————————————————————————————
glBegin(GL_TRIANGLES); //给出一个凹多边形
glEnd();
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);//改用轮廓形式,重画
glBegin(GL_TRIANGLES);
glEnd();
glBegin(GL_TRIANGLES); //使用glEdgeFlag()后,重画
glEnd();
——————————————————————————————————————
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
运行程序:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
本节知识点:
1、面细节简介
2、相关函数的使用
0 0
- OpenGL面细节
- OpenGL表面纹理细节(转)
- opengl镜面反射
- opengl画点线面
- OpenGL镜面效果
- OpenGL 镜面反射光
- IOS面试题一些细节
- OPENGL固定图形渲染管线操作细节
- OpenGL 绘制几何图形的一些细节问题
- OpenGL/glsl实现bumpmaping的各种细节
- OPENGL固定图形渲染管线操作细节
- OpenGL学习十八:多重细节层
- OpenGL入门实例(3)-多边形细节
- OpenGL---绘制几何图形的一些细节
- OpenGL ES 镜面光照
- OpenGL-绘制点、线、面
- OpenGL核心技术之面剔除
- OpenGL鱼眼球面投影
- 小H超级推广王更新升级有哪些变化
- stm8l 低功耗 halt_active模式
- System Error Code 111 The file name is too long的一种可能的解决方式
- 【问题解决】ubuntu中vim下按上下左右键时输入A、B、C、D的问题
- Strange Clock(3248)
- OpenGL面细节
- 成员变量和局部变量的区别
- 1、Android Studio创建android项目
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- ACdream 1431Sum vs Product
- Android动态生成课程表 详解
- Android Studio 快捷键
- 多功能按键设计——利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按
- 随便看看