位置: 编程技术 - 正文

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

  • 资源税的计税依据含增值税吗
  • 增值税发票丢失可以用复印件入账么
  • 小微企业印花税减免最新政策
  • 速达3000货品怎么入库
  • 应付余额是负数怎么理解
  • 建筑 分包
  • 处置固定资产增值税和所得税报税能一致吗
  • 当月勾选认证的原材料与当月领用的原材料区别
  • 受委托加工物资双方账务处理怎么做
  • 进项发票失控账务处理
  • 找贴现公司贴现有风险吗
  • 融资租赁流程
  • 印花税必须每个月零申报吗
  • 租的厂房再转租怎么开票抵扣
  • 现代服务业要满足什么条件才转一般纳税人
  • 获客成本怎么计价
  • 现金折扣若缴纳增值税,怎么进行会计处理?
  • 现金流量表编制依据和方法
  • 开办费摊销时间税法规定
  • 承兑汇票怎么换算
  • 金融企业同期同类贷款利率计算
  • 劳务外包业务外包的区别
  • 我的初级奋斗经历作文
  • 医疗服务免税发票怎么开
  • 运输费用入成本还是销售费用
  • 土地使用税和房产税
  • 路由器死机的表现
  • 招待客户住宿费可以抵扣进项税吗合理吗
  • macbookpro如何检测
  • win10新版本21h1
  • 中投公司投资的股票
  • fxssvc.exe
  • 预收房租需要缴纳个税么
  • 废品损失的核算方式主要有
  • element html
  • 变动成本法计算营业利润
  • php引用返回用法怎么用
  • 新政府会计制度科目解读
  • vue $route
  • php 短信验证码
  • ls -all命令
  • 自建的不动产
  • 社保滞纳金计入个人账户吗
  • 通行费发票电子化 机场路
  • 残疾人报税怎么报
  • 提供营业执照范本图片
  • python unittest和pytest
  • 免税产品出口是否可以退税
  • 销售产品的运输费会计分录
  • sql2008附加数据库错误3456
  • 收到进账发票分录
  • 医院要发票
  • 走逃发票账务处理
  • 筹建期的开办费开业后如何处理
  • 可供出售金融资产有哪些
  • 售后回租融资是利好还是利空
  • 退回拨款会计分录怎么做
  • 资产损失扣除
  • 无形资产什么时候开始计提折旧
  • 建筑公司项目
  • win8.1使用技巧
  • 使用删除命令删除硬盘文件后
  • ami 2.17.1254bios设置图解教程
  • mac文档怎么传给winds
  • 苹果电脑怎么归类app
  • securecrt设置英文
  • 新版电脑装win7
  • android入门视频教程
  • srslte源码分析
  • android源码分析实录
  • u3d中文版本
  • jquery图片轮播无缝连接
  • 如何防止蟑螂爬到床上
  • JavaScript基本语法与页面对象的应用
  • Intent传List、Map
  • 天津违规养犬的处罚依据
  • 旅游景区可免交土地使用税
  • 2020年海南个人所得税新规定
  • 电子发票开具之前有销售方字样,为什么开具出来就不显示了?
  • 地税局开的发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设