位置: 编程技术 - 正文

[置顶] 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纹理贴图图片位置)

  • 外地预缴的附加税怎么算
  • 增值税出口退税款缴纳企业所得税吗
  • 研发费用加计扣除是什么意思啊
  • 医院怎么开发票
  • 分公司独立核算企业所得税缴纳
  • 在建工程试运行收入和成本怎么处理
  • 工程结算怎么结转收入
  • 公司改变工资结构变相降工资怎么办
  • 三个月工资一次扣税多少
  • 品牌使用费的账务处理
  • 契税和车辆购置税的异同
  • 专用增值税发票怎么作废
  • 增值税专用发票和普通发票的区别
  • 增值税进项税额是什么意思
  • 稳岗补贴能享受多久
  • 公司注销需要注意的会计科目
  • 物流车辆挂靠账务怎么处理?
  • 文化交流活动开展方案
  • 跨年应收账款账务错误怎么调整
  • 原材料座椅报废怎么处理
  • b4纸张尺寸
  • 生产测试是指什么
  • 客户回款扣除的费用
  • 鸿蒙超级终端搜不到
  • dolby audio设置
  • 税款申报成功但没有缴款怎么办
  • 配股的基本含义是什么
  • win10怎么看已安装的驱动
  • 资产处置收益的项目有哪些
  • javascript遇到的问题
  • 装电脑系统的方法和步骤
  • 21年最新cpu
  • 收到退回多付款现金流量支付购买商品支付
  • 施工单位工程款支付程序
  • vue引入echarts柱状图
  • 用php做一个表格
  • 盘亏应交税费
  • 建筑业营改增后税务问题
  • ValueError: The device should not be ‘gpu‘, since PaddlePaddle is not compiled with CUDA问题解决(Paddle)
  • 投标文件中财务报表包括哪些内容
  • 给员工报销
  • 公司汽车折旧计算方法用那种
  • 最通俗易懂的电动力学教材
  • 对外捐赠的会计处理企业会计准则和小企业会计准则
  • mysql主要支持哪些数据类型?
  • 织梦cms要钱吗
  • 企业资本包括
  • 季度预缴纳税申报表利润总额
  • 海外工作工资税收问题
  • 收回上年度拨款怎么做账
  • 利润表研发费用和管理费用
  • 营改增后不动产转让增值税
  • 跨年后发票作废
  • 设备投入安装会计分录怎么写
  • 应收票据贷方余额
  • 没有外币账户可以收外币吗
  • 可供出售金融资产公允价值变动
  • 年终奖通常怎么计算
  • sql server创建备份
  • win8的文件夹选项在哪里
  • win7控制台怎么打开
  • win10预览版21301bug
  • Mac怎么强制关闭窗口
  • fedora怎么联网
  • window10重启按什么键
  • javascriptcall和apply
  • js引入css文件
  • css渲染规则
  • jqgrid getrowdata
  • [置顶]JM259194
  • 举例详解民法典第994条
  • HAL code debug
  • jquery中的基本选择器有哪些
  • shape form的区别
  • 安卓微信自带聊天背景图片高清
  • javascript面向对象精要pdf
  • jquery弹出页面窗口
  • 国家电子税务局云南省电子税务局
  • 广西电子税务局怎么报税
  • 办理供票资格申请
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设