位置: 编程技术 - 正文

[置顶] 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 设计模式
  • 有关预收账款的会计科目
  • 什么是重大会计事务所
  • [error] Error: Fail to open IDE 问题解决
  • nodemon卸载
  • 餐费进什么科目
  • centos7安装keepalived
  • timedatectl命令用法
  • 研发部门的房租物业费进什么科目
  • 应付职工薪酬如何确认
  • 劳务派遣差额征税的账务处理实例
  • 无票收入怎么做
  • 帝国cms会员注册天数自动升级会员组
  • 软件服务费可以全额抵扣吗?
  • 电脑管理费用入什么账户
  • 融资租赁业务需要什么条件
  • 受托机构名称填什么
  • 现金流量表现金净增加额负数
  • 两者有什么区别用英语怎么说
  • 经营性罚款和行政性罚款的区别
  • 车辆购置税的计税价格为不含增值税的全部价款
  • 一般纳税人增值税结转账务处理
  • 涉税信息声明怎么提供
  • 工程项目立项前的安全评估
  • 费用利润率计算公式是怎样的?
  • 个人账户转公司账户附言写什么
  • 房地产开发企业会计制度
  • 劳务外包存在的法律风险
  • 水果店的账务处理
  • 组织机构代码证图片
  • mysql uuid分页优化
  • mysql事件调用存储过程
  • win8蓝屏解决方法
  • mm pp dpps进程
  • win8优化驱动器
  • 四步清理手机垃圾的方法
  • linux系统编译命令
  • win8分屏快捷键
  • win7无法更改工作组
  • android studio ndk开发教程
  • 图文详解地理图册电子版
  • 搭建入门
  • nodejs 模块
  • linux搭建php运行环境
  • python signal模块
  • zigzag源码
  • python中的字符串可变吗
  • html5videojs
  • jquery操作表单
  • Android之Broadcast与BroadcastReceiver
  • 税务工会费缴费标准
  • 个税申报表明细怎么打印
  • 税务网上申报怎样操作
  • 如何挑选烟叶等级
  • 应缴财政专户款属于资产类吗
  • 网上办税服务厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设