位置: 编程技术 - 正文

[置顶] openGL学习笔记四 : 关于颜色, 大小, 虚线, 多边形反转, 镂空, 使用位图([置顶]马粥街残酷史)

编辑:rootadmin

推荐整理分享[置顶] openGL学习笔记四 : 关于颜色, 大小, 虚线, 多边形反转, 镂空, 使用位图([置顶]马粥街残酷史),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:[置顶]电影名字《收件人不详》,[置顶]津鱼.我爱你,[置顶]从lv2开始开挂的原勇者候悠闲的异世界生活,[置顶]电影名字《收件人不详》,[置顶]游戏名:chivalry2,[置顶]游戏名:chivalry2,[置顶]游戏名:chivalry2,[置顶]电影名字《收件人不详》,内容如对您有帮助,希望把文章链接给更多的朋友!

转载请保留出处,,,, 这个标题我都不知道该怎么起了, 如果没有标题, 请不要在意这些细节。。。。。

我们看看上次我们画的点、以及线, 我们&#;乎忘了说如何设置点的大小( 哦, 不对, 我&#;乎是说了后面来说的。。。。), 现在我们来看看

一 设置点的大小和线的粗细

void glPointSize (GLfloat size);//设置点的大小, 默认为一个像素

void glLineWidth (GLfloat width);//设置线的宽度

注意, 这两个函数都要在glBegin()之前使用, 在glBegin()之后使用无效

而且必须要开启反走样(glEnable(GL_LINE_SMOOTH);)了之后才可以使用小数哦

看看代码:

二 设置颜色

估计小伙伴们都猜到了吧

void glColor3f (GLfloat red, GLfloat green, GLfloat blue);//设置颜色

void glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);//设置颜色, 带透明通道

不过这里的参数不是[0,], 而是[0,1]。线性映射等浮点&#;表示的最大&#;映射到1.0(全强度),和零映射到0.0(零点强度)。

采用f和d做后缀的函数,以1.0表示最大的使用。采用b做后缀的函数,以表示最大的使用。采用ub做后缀的函数,以表示最大的使用。采用s做后缀的函数,以表示最大的使用。采用us做后缀的函数,以表示最大的使用。

小伙伴们都注意一下哈, 如果需要使用透明通道, 必须要打开ALPHA混合器,并指定源与目标的混合方式。看这几句代码

void glEnable(GLenum cap);//用来开启各项功能

当然, 相对应的肯定就有关闭各项功能glDisable()

我们看看下面的参数

类型&#;说明GL_ALPHA_TEST根据函数glAlphaFunc的条件要求来决定图形透明的层度是否显示。具体参见glAlphaFuncGL_AUTO_NORMAL执行后,图形能把光反射到各个方向GL_BLEND启用颜色混合。例如实现半透明效果GL_CLIP_PLANE0 ~ GL_CLIP_PLANE ~ 根据函数glClipPlane的条件要求  启用图形切割管道。这里指六种缓存管道GL_COLOR_LOGIC_OP启用每一像素的色彩为位逻辑运算GL_COLOR_MATERIAL执行后,图形(材料)将根据光线的照耀进行反射。  反射要求由函数glColorMaterial进行设定。GL_CULL_FACE根据函数glCullFace要求启用隐藏图形材料的面。GL_DEPTH_TEST启用深度测试。  根据坐标的远近自动隐藏被遮住的图形(材料)GL_DITHER启用抖动GL_FOG雾化效果  例如距离越远越模糊GL_INDEX_LOGIC_OP逻辑操作GL_LIGHT0 ~ GL_LIGHT ~ 启用0号灯到7号灯(光源)  光源要求由函数glLight函数来完成GL_LIGHTING启用灯源GL_LINE_SMOOTH执行后,过虑线段的锯齿GL_LINE_STIPPLE执行后,画虚线GL_LOGIC_OP逻辑操作GL_MAP1_COLOR_根据函数Map1对贝赛尔曲线的设置,  启用glEvalCoord1,glEvalMesh1,glEvalPoint1  生成RGBA曲线GL_MAP1_INDEX根据函数Map1对贝赛尔曲线的设置,  启用glEvalCoord1,glEvalMesh1,glEvalPoint1  生成颜色索引曲线GL_MAP1_NORMAL根据函数Map1对贝赛尔曲线的设置,  启用glEvalCoord1,glEvalMesh1,glEvalPoint1  生成法线GL_MAP1_TEXTURE_COORD_根据函数Map1对贝赛尔曲线的设置,  启用glEvalCoord1,glEvalMesh1,glEvalPoint1  生成文理坐标GL_MAP1_TEXTURE_COORD_根据函数Map1对贝赛尔曲线的设置,  启用glEvalCoord1,glEvalMesh1,glEvalPoint1  生成文理坐标GL_MAP1_TEXTURE_COORD_根据函数Map1对贝赛尔曲线的设置,  启用glEvalCoord1,glEvalMesh1,glEvalPoint1  生成文理坐标GL_MAP1_TEXTURE_COORD_根据函数Map1对贝赛尔曲线的设置,  启用glEvalCoord1,glEvalMesh1,glEvalPoint1  生成文理坐标GL_MAP1_VERTEX_根据函数Map1对贝赛尔曲线的设置,  启用glEvalCoord1,glEvalMesh1,glEvalPoint1  在三维空间里生成曲线GL_MAP1_VERTEX_根据函数Map1对贝赛尔曲线的设置,  启用glEvalCoord1,glEvalMesh1,glEvalPoint1  在四维空间里生成法线GL_MAP2_COLOR_根据函数Map2对贝赛尔曲线的设置,  启用glEvalCoord2,glEvalMesh2,glEvalPoint2  生成RGBA曲线GL_MAP2_INDEX根据函数Map2对贝赛尔曲线的设置,  启用glEvalCoord2,glEvalMesh2,glEvalPoint2  生成颜色索引GL_MAP2_NORMAL根据函数Map2对贝赛尔曲线的设置,  启用glEvalCoord2,glEvalMesh2,glEvalPoint2  生成法线GL_MAP2_TEXTURE_COORD_根据函数Map2对贝赛尔曲线的设置,  启用glEvalCoord2,glEvalMesh2,glEvalPoint2  生成纹理坐标GL_MAP2_TEXTURE_COORD_根据函数Map2对贝赛尔曲线的设置,  启用glEvalCoord2,glEvalMesh2,glEvalPoint2  生成纹理坐标GL_MAP2_TEXTURE_COORD_根据函数Map2对贝赛尔曲线的设置,  启用glEvalCoord2,glEvalMesh2,glEvalPoint2  生成纹理坐标GL_MAP2_TEXTURE_COORD_根据函数Map2对贝赛尔曲线的设置,  启用glEvalCoord2,glEvalMesh2,glEvalPoint2  生成纹理坐标GL_MAP2_VERTEX_根据函数Map2对贝赛尔曲线的设置,  启用glEvalCoord2,glEvalMesh2,glEvalPoint2  在三维空间里生成曲线GL_MAP2_VERTEX_根据函数Map2对贝赛尔曲线的设置,  启用glEvalCoord2,glEvalMesh2,glEvalPoint2  在三维空间里生成曲线GL_NORMALIZE根据函数glNormal的设置条件,启用法向量GL_POINT_SMOOTH执行后,过虑线点的锯齿GL_POLYGON_OFFSET_FILL根据函数glPolygonOffset的设置,启用面的深度偏移GL_POLYGON_OFFSET_LINE根据函数glPolygonOffset的设置,启用线的深度偏移GL_POLYGON_OFFSET_POINT根据函数glPolygonOffset的设置,启用点的深度偏移GL_POLYGON_SMOOTH过虑图形(多边形)的锯齿GL_POLYGON_STIPPLE执行后,多边形为矢量画图GL_SCISSOR_TEST根据函数glScissor设置,启用图形剪切GL_STENCIL_TEST开启使用模板测试并且更新模版缓存。参见glStencilFunc和glStencilOp.GL_TEXTURE_1D启用一维文理GL_TEXTURE_2D启用二维文理GL_TEXTURE_GEN_Q根据函数glTexGen,启用纹理处理GL_TEXTURE_GEN_R根据函数glTexGen,启用纹理处理GL_TEXTURE_GEN_S根据函数glTexGen,启用纹理处理GL_TEXTURE_GEN_T根据函数glTexGen,启用纹理处理

这些东西会经常用到的。。。。。。。。

void glBlendFunc (GLenum sfactor, GLenum dfactor);//定义像素算法

三 关于多边形的正反面以及绘制方式

嗯 这个, 肿么说呢, 还是先看代码吧,,,直接讲会很空洞滴。。。

我们慢慢来看,

void glPolygonMode(GLenum face,GLenum mode);

作用是控制多边形的显示方式

参数一:确定显示模式将适用于物体的哪些部分,控制多边形的正面和背面的绘图模式

GL_FRONT表示显示模式将适用于物体的前向面(也就是物体能看到的面)GL_BACK表示显示模式将适用于物体的后向面(也就是物体上不能看到的面)GL_FRONT_AND_BACK表示显示模式将适用于物体的所有面一般我们都是顶点以逆时针顺序出现在屏幕上的面”为“正面”,另一个面即成为“反面”

参数二:确定选中的物体的面以何种方式显示(显示模式)

GL_LINE表示显示线段,多边形用轮廓显示GL_FILL表示显示面,多边形采用填充形式参见上面的两个正方形当然, 还有一个GL_POINT只显示定点(估计也没啥用。。。。。)

void glFrontFace(GLenum mode);

[置顶]
        openGL学习笔记四 : 关于颜色, 大小, 虚线, 多边形反转, 镂空, 使用位图([置顶]马粥街残酷史)

嗯, 这个函数的作用是设置正方形的正反面是如何决定的,

GL_CCW 表示窗口坐标上投影多边形的顶点顺序为逆时针方向的表面为正面。GL_CW 表示顶点顺序为顺时针方向的表面为正面。默认的情况下是GL_CCW, 我们也来看看GL_CW的效果

对吧, 反转了吧, 哦 对了这些函数也是要写在glBegin()前面哦。。。。

四 剔除多边形的表面

很多时候, 我们的东东会有前后遮挡的效果, 如果我们还是全部绘制了简直就是在浪费资源嘛,,,,所以我们把那些被遮挡的多边形可以剔除掉, 这样可以大大的提升我们程序的运行效率,,,

还记得我们刚刚说的glEnable()吗, 没错, 我们就要先使用他来开启剔除功能, 然后再使用glCullFace()来进行剔除(参数也是正面, 反面, 全部),,,

剔除只是影响多边形, 对点和直线没有影响

代码走起

五 虚线以及多边形镂空

嗯 老规矩了glEnable()开启虚线, glLineStipple()设置虚线的显示方式

void glLineStipple (GLint factor, GLushort pattern);OpenGL中设置直线的当前点画模式。pattern参数是由1或0组成的位序列,它们根据需要进行重复,对一条特定的直线进行点画处理。从这个模式的低位开始,一个像素一个像素的进行处理。如果模式中对应的位是1,就绘制这个像素,否则就不绘制。模式可以使用factor参数(表示重复因子)进行扩展,它与1和0的连续子序列相乘。因此,如果模式中出现了3个1,并且factor是2,那么它们就扩展为6个连续的1。必须以GL_LINE_STIPPLE为参数调用glEnable()才能启用直线点画功能。为了禁用直线点画功能,可以向glDisable()函数传递同一个参数。

就拿我们刚刚写的0x0F0F()来看, 如果第一个参数我们穿的是1, 那么就从低位往高位(从右往左)进行绘制, 1表示绘制, 0表示不绘制,绘制结果就是【先绘制四个, 再空四个, 再绘制四个, 再空四个】 如果我们穿的参数是2那么就是【先绘制八个, 再空八个, 再绘制八个, 再空八个】,以此类推。 看图

再来说说多边形的镂空

也是使用glEnable()开启镂空,使用glPolygonStipple()设置镂空模式, 先看代码后解释

这个数组是套用红宝书上面的的, 如果要我自己写一个出来, 我估计我会疯掉的

哈哈, 有木有觉得很神奇,,,我们竟然画了一堆苍蝇在屏幕上, 其实我们的那个数组就是一个苍蝇的图像。 我们来分析一下, 数组有个字节, 表示了一个x的矩阵型镂空的数据。数组里面的第一个字节表示了左下方从左到右的8个像素是否镂空, 以此类摧。。。

用这个图可以表示出来

我们再来看看没有镂空的效果

就是这个吊样子。。。。。

如果每次都让我们程序来做这样的数组, 我估计程序员真的会疯掉吧, 我们来看看简单的方法, 首先打开你的画板工具(就是电脑自带的那个 )随便画一幅画, 保存单色位图的bmp

好了, 我们现在来使用这张位图

是不是我们画的图片也加载出来了啊,,,,注意了, 图片的位置一定要和执行文件放在一块啊, 毕竟人家是好基友嘛, 今天我们就到这里了。。。

每天积累一点点, 总有一天你会成为大神的

OpenGL:纹理基础总结 当前光栅位置:当前光栅位置就是开始绘制下一幅位图/图像的屏幕位置。//左下角glRasterPos2f(GLfloatx,GLfloaty);glRasterPos3f(GLfloatx,GLfloaty,GLfloatz);1、4版本中,

OpenGL反弹球 //直接上代码,代码很简单,不用多说,VisualStudio运行可通过。#includestdafx.h#defineGLUT_DISABLE_ATEXIT_HACK#includestdlib.h#includestdio.h#includeGL/glut.hfloatx=-1.0;floaty

OpenGL学习-透视投影&照相机 透视投影执行透视除法,对观察者较远的物体进行缩短和收缩。投影到屏幕之后,可视区域后端和前端的宽度度量方式并不相同。因此,如果两个逻辑

标签: [置顶]马粥街残酷史

本文链接地址:https://www.jiuchutong.com/biancheng/373235.html 转载请保留说明!

上一篇:opengl 使用 vc6.0中win32控制台工程去掉控制台窗口(opengl visual studio)

下一篇:OpenGL:纹理基础总结(opengl纹理贴图图片位置)

  • 物流公司车子
  • 信用减值损失与坏账准备关系
  • 工商年报纳税总额怎么算
  • 采购的固定资产验收无误后直接安装使用
  • 企业走账的会计处理
  • 广告业服务收费交税的会计处理怎么做?
  • 企业厂房整改应该计入什么科目?
  • 商业汇票的样本
  • 材料盘亏税前扣除怎么算
  • 年底结账时利息收入怎么做处理?
  • 出售固定资产的税率是多少
  • 进口关税专用缴款书在哪里打印
  • 金税三期个人所得税税率
  • 实收资本的账务处理题目
  • 利润表中所得税费用为负数是什么意思
  • 为什么增值税发票综合服务平台进不去
  • 工行代收资金清算过渡户是什么?
  • 退税入其他收益需要再缴税吗
  • 少付的运费如何做分录
  • 押金算不算房租
  • 收到专票有误,已跨月未认证,销售方不红冲咋办
  • 事业单位收受礼品怎么处理
  • 网络限速数值
  • php清空数据表
  • deepin咋样
  • 消费税组成计税价格公式推导
  • 委托外单位加工发出的材料分录
  • window10电源选项
  • 网络看不到局域网图标
  • 物资销售经营范围
  • ChatGLM-6B (介绍相关概念、基础环境搭建及部署)
  • javascript局部变量
  • 购买用友财务软件
  • php中常见的错误类型有
  • php 文件上传类型限制
  • bert数据增强
  • 物流公司主营业务怎么写
  • 免税收入和免征
  • 费用报销单票据怎么填
  • 去年的预提费用今年进来了怎么入账
  • phpcms程序
  • sql获取第一条记录的内容
  • python 动态
  • 企业收到的国外发票可以入账吗
  • 酒店营业成本预算
  • 印花税只能到角吗
  • 增值税发票是记账联还是抵扣联
  • 企业所得税的扣除是什么意思
  • 税控盘解锁操作流程
  • 工业用地便宜
  • 一般纳税人之外还有什么
  • 专项应付款转入资本公积的规定
  • 货物已到发票未到怎么做账
  • 应收票据周转率公式
  • 会计工资标准
  • 应交增值税为什么在借方
  • 如何降低未分配利润的方法
  • 月末忘记结转怎么办
  • 设备租赁公司如何赚钱最快
  • 申请国家知识产权的条件
  • 没有销售收入月报怎么填
  • 酒店营业额下降的原因
  • 缴纳工会经费如何记账
  • sqlserver多表查询 索引
  • ubuntu 9.04 X3100 显卡开启3D特效
  • windows安装软件需要管理员权限
  • windows7怎么卸载
  • win8.1的ie浏览器
  • win10超级按钮
  • win10添加开机启动项
  • jquery 多选
  • python批量下载文件
  • nodejs教学视频
  • 查看shell脚本是否在运行
  • Android Http访问网络 学习(慕课网学习)
  • javascript的几种数据类型
  • 脚本 python
  • jquery中的each方法
  • 选择排序图解过程
  • 如何查询车辆购买的保险是哪家保险公司
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设