位置: 编程技术 - 正文

OpenGL学习05-绘制实心物体(opengl绘制函数)

编辑:rootadmin

推荐整理分享OpenGL学习05-绘制实心物体(opengl绘制函数),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl图形绘制,opengl怎么画线,opengl绘制函数,opengl绘图工具,opengl绘制简单图形,opengl绘制ui,opengl绘制简单图形,opengl绘制简单图形,内容如对您有帮助,希望把文章链接给更多的朋友!

使用三角形或者多边形结合在一起,我们可以绘制实心物体(3D物体)。本篇中使用三角形绘制圆锥形。

下面测试第一个OpenGL程序:

运行结果,如下图:

(1)设置多边形颜色

颜色实际上是以顶点为单位指定的,而不是以多边形为单位。着色模式决定了多边形是单调着色(最后一个顶点的颜色就是作为整个多边形的填充颜色)还是渐变着色的(根据每个顶点的颜色进行平滑着色)。

glShadeModel(GL_FLAT);

告诉OpenGL用当前颜色(也就是这个多边形的最后一个顶点的颜色)填充这个多边形。这就是我们三角形扇中指定下一个顶点前简单的将颜色修改为红色或则绿色的原因。

glShadeModel(GL_SMOOTH);

告诉OpenGL根据每一个顶点对三角形进行渐变着色,相邻顶点颜色进行均和。

使用GL_SMOOTH着色方案效果,如下图:

(2)隐藏表面消除

按下一个箭头键,旋转这个圆锥体,可以发现一些令人不舒服的现象:这个圆锥看上去好像在度和-度之间来回摆动,而不是完整的旋转度。

之所以出现来回摆动现象的原因是圆锥的底面是在圆锥边花完后才进行绘制的,不管这个圆锥的方向如何,它的底总是出现在最前面,从而产生了来回摆动的幻觉。可以使用一种称为深度测试的特性来消除这种现象。

深度测试:当一个像素被绘制时,它将被设置一个&#;(z&#;),以表示它和观察者之间的距离。以后,当这个屏幕位置需要绘制另外一个像素时,新像素的z&#;就会和原先已经存在像素的z&#;比较;如果新像素的z&#;更高,他就更靠经观察者,因此位于以前那个像素的前面;反之,就不能遮住前面的像素。

启动深度测试:

glEnable(GL_DEPTH_TEST);

关闭深度测试:

OpenGL学习05-绘制实心物体(opengl绘制函数)

glDisable(GL_DEPTH_TEST);

在内部,深度测试的任务是由深度缓冲区实现的,它存储屏幕上每个像素的深度&#;,故每次渲染前需要清空深度缓存区,如下:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

GL_DEPTH_BUFFER_BIT代表的是深度缓存区。

(3)剔除隐藏表面,提高性能

如果一个表面被隐藏,就不应该绘制这个表面。这样可以获得更好的视觉效果;还能提高渲染的性能,因为每个被绘制的像素必须与以前的像素进行z&#;比较,如果知道一个表面不需要绘制,就不向硬件发送这个几何图形,就可以显著的提高性能。我们可以使用的剔除技巧之一是背面剔除,它用于消除一个便面的背面。

启动背面剔除:

glEnable(GL_CULL_FACE);

关闭背面剔除:

glDisable(GL_CULL_FACE);

效果如下图,左边开启了背面剔除,右边未开启背面剔除

当然为了更好的使用背面剔除功能,需要设置环绕方式,默认逆时针方向为正面,顺时针方向为背面;在程序中使用了绘图方式与默认方式相反(程序中三角扇形都是顺时针环绕的),故需要将顺时针设置为正面:

glFrontFace(GL_CW);

在绘制闭合物体或者实心物体时,背面剔除是非常有用的。

(4)多边形模式

多边形并不一定要用当前颜色进行填充。在默认情况下,多边形被绘制成实心的。但是,也可以改变这个行为,指定只绘制多边形外框,甚至只绘制点(只有顶点被绘制)。

void glPolygonMode (GLenum face, GLenum mode);

glPolygonMode 函数允许多边形作为实心图形、外框或者点进行渲染。另外,可以对多边形的两个面都应用这个渲染模式,也可以只对多边形的正面或则背面应用这个模式。

在上面程序中使用glPolygonMode(GL_BACK, GL_LINE);

运行结果,如下图:

OpenGL学习总结 OpenGL学习总结一.OpenGL是做什么的一种图形硬件的接口。而不是像C和C一样的编程语言,更像是一个运行库,提供一些预先封装的函数。二.OpenGL的主要

Opengl 导入3Dmax制作的.3ds模型 并显示出来 由于opengl并没有原始支持这种模型,所以导入是件麻烦事,但是又有很多的模型是这个式的,这次在做图形学大作业的时候,特别想用到。开始以为很

cocos2dx openGL cocos2dx之渲染树的绘制Cocos2d-x游戏的层次:导演类CCDirector直接控制渲染树的根节点--场景(CCScene),场景包含多个层(CCLayer),层中包含多个精灵(CCSp

标签: opengl绘制函数

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

上一篇:Qt_OpenGL:雾程序小测(qt5 opengl)

下一篇:OpenGL学习总结(opengl learn cn)

  • 安保服务税点
  • 股权收购收购方支付的期间损益计入
  • 企业里面不征税的发票能报销吗
  • 集团内部公司之间怎么称呼
  • 企业收到利息发票怎么做分录
  • 买金税盘发票能全额抵进项税吗
  • 当月发票不够用领用了下个月,下个月还能再领吗
  • 购买完货物又退回怎么办
  • 营业外支出税前扣除比例是多少
  • 出口退税如何开发票
  • 消防增值服务
  • 普通征税差额征税减按征税
  • 普通股资本成本计算方法
  • 企业报税网上申报
  • 小微企业免增值税到什么时候
  • 当月不抵扣的增值税发票在发票勾选时怎么操作
  • 汽车保险费里的钱能退吗
  • 跨年补计提工资汇算清缴
  • 待处理财产损益计入资产负债表哪里
  • 在建工程的工资计入哪里
  • 一般纳税人和小规模纳税人的区别
  • 房地产企业城市配套费
  • 预付账款收不回来摘要怎么写
  • 苹果系统更新在哪里找
  • 收到供应商发票分录应怎么写?
  • 电脑开机屏幕黑屏无信号
  • QQExternal.exe是什么进程?QQExternal.exe进程为什么被运行?
  • 差旅费是否可以所得税前扣除
  • 系统自带功能
  • Win10 1809 17763.2268 更新发布:附更新修复内容汇总
  • win11 build 22000.65
  • 小规模纳税人结转损益会计分录
  • 暂估入账的固定资产可以计提折旧吗
  • php时间函数代码
  • 新会计准则关于公司装修费
  • 一般纳税人增值税减免政策2023
  • php获取当前时间戳函数
  • 社保挂靠公司收费标准是怎样的
  • js中写php代码
  • jquery教程chm
  • 倾向得分匹配后怎么进行回归
  • 通用机打发票可以查验吗
  • 除了增值税发票还有什么票可以抵扣税
  • 人工费没有发票咋入帐
  • 非营利组织能否开社保账户
  • 结转费用类会计分录怎么写
  • 企业官网用什么系统
  • 为什么应交增值税要转入未交增值税
  • 政府奖励收入会计分录
  • 小额支出的两种形式
  • 保险理赔进项税额转出
  • 一般纳税人简易征收的适用范围
  • 民办非企业单位工会经费
  • 可以假设两种情形吗
  • 公司账户转法人个人账户需要交税吗
  • 什么是委托检验报告
  • 税金及附加如何预测
  • 车辆保险费算什么费用
  • 收到政府的奖励企业需要纳税吗?
  • 一次性伤残补助金是单位给的还是社保给的
  • 营改增小规模纳税人可以进行税额扣除
  • 用友软件中冲销凭证在哪
  • 其它综合收益包括
  • 累计扣税标准2021标准
  • 预付货款属不属于消费信用
  • 关于数据库连接池,下列说法错误的是
  • 屏蔽系统
  • Win10 Build 10565版Edge浏览器完整更新日志一览
  • win2003注册表空间不足
  • 要使用windows
  • excel2016默认字体
  • cocos2dx 3.1.1 win8+eclipse环境下android游戏开发环境搭建
  • 常用的批处理命令
  • python 管理内存
  • mare的用法
  • 女鬼照片
  • jquery操作文本可以使用什么方法
  • 江苏省国家税务局
  • 电子普通发票怎么查验真伪
  • 润泽一词出自哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设