位置: 编程技术 - 正文

[置顶] 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 ini
  • 未分配利润冲减其他应付款分录
  • 在途物资和材料采购属于存货吗
  • 出纳借方
  • 银行收取对公账户服务费有什么用
  • 工资总额包括哪些福利费
  • 支付本月物业费怎么做账
  • Vue3+element-plus 后台管理系统(含登陆注册功能页面)
  • 高薪员工辞退补偿金
  • 车辆违章罚款的钱上交到那了
  • 会计分录内容包括
  • 最小型笔记本
  • 个人出租商用房个人所得税
  • 商业汇票不带息到银行办理贴现公式
  • 什么是非征期税未报
  • php设计模式及使用场景
  • ros入门21讲
  • php shell_exec()
  • vue3响应式对象数组
  • mac datagrip
  • dedecms官网
  • 新建厂房如何计提折旧费用
  • 现金折扣什么时候冲减收入
  • wordpress主题安装好后怎么设置
  • 收到的销项负数发票如何申报
  • 去年的财务报表网上更正申报
  • 公益性捐赠支出怎么算
  • 公司聘用临时工需要买社保吗
  • 机动车统一发票怎么开
  • 仓库盘点后的数据怎么处理
  • 研发费用不能加计扣除的有哪些项目
  • 机械租赁公司挂牌流程
  • 行政单位合并财务怎么办
  • 民办非企业单位什么意思
  • 税后扣税
  • 享受研发费用加计扣除需要什么条件
  • 电子承兑非拒付会怎么样
  • Excel导入Sqlserver数据库脚本
  • 获取客户端所有cookie对象的方法
  • ghost重装步骤
  • win7资源管理器频繁崩溃
  • win1010586升级到最新
  • kcleaner是什么文件夹
  • windows7的安装步骤
  • unity Toggle Groud
  • unity3d官方
  • 深入剖析kubernetes pdf
  • perl处理特殊符号
  • android使用教程
  • python 数独破解器
  • JavaScript弹出对话框
  • jquery删除当前元素
  • css样式不能制作体积更小下载更快的网页
  • linuxssh免密登录
  • python,for循环
  • python win
  • 详解JavaScript对W3C DOM模版的支持情况
  • 如何搭建python项目架构
  • unity3d shader之God Ray上帝之光
  • 贵州省微企补助政策
  • 发票开票系统可以查询上一年发票吗?
  • 独立的法人企业
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设