【转】我的opengl编程学习(二)(混合、深度测试、雾化、
12 混合
混合的底层原理是:如果不开启混合,那么对于帧缓存中的同样一个片断,后来的颜色将会覆写原有的颜色,而开启混合,则会在后来的颜色到来时利用混合因子重新计算该颜色而不是简单的覆写。其中后来的颜色叫做源颜色,而缓存中原来存在的颜色叫做目的颜色。
glEnable(GL_BLEND)打开混合开关,这样ALPHA值就可能会起作用了(如果你使用这个作为因子的话)
用 glBlendFunc()来产生源颜色和目的颜色的混合因子,有各种产生方法,最后总的混合颜色=源颜色×源颜色的混合因子+目的颜色×目的颜色的混合因子
下面是几个我左的各种混合参数的例子
0 1混合,就是只保留第一个framebuffer上面的东西,后面的绘制都看不见了
1 0混合
用后来的帧缓存替换前面的帧缓存,只有后面帧的信息
将目的和源的AILPHA都设为常量0.5的混合
src 1-src混合
后面的帧的混合系数采用后面帧的颜色值
其实就是颜色越浅的地方透明度越高,好像更加虚幻
13深度测试
在设计到消隐到情况(可能发遮挡),都要开启深度测试
Glenable(depth_test),硬件上就是打开了深度缓存区,当有新的同样XY坐标的片断到来时,比较两者的深度,并且在初始化时打开深度,并且绘制每一帧前要gl_clear(gl-depth-bit)(这根clear_buffer_bit类似,而且同样要设置clear_deppth_bitd 值,用glClearDepth(GLclampd depth),一般设为1,这将背景设为最深,这是默认的,通常不用写)
14 雾
首先glEnable(GL_FOG)
然后用glFog*()设置雾的衰减因子的计算模型和强度和颜色还有雾的范围(还可以用glHint()来设置雾的质量
最要呕注意雾的绘制要再绘制被雾影响的物体之前
15多边形平移
再OPENGL中有时为了绘制一个又高亮的轮廓的多边形,或者有时为了做贴花效果,就要将一个多边形和另一个线框叠加,这样有时会产生叠加部分颜色的冲突或不稳定,为了解决这个问题,可以采用多边形平移,它可以将其中一个的深度信息做一个合理的平移,使前后区分,步骤是:
首先用glEnable(GL_POLYGON_OFFSET_xx)打开平移开关;
然后glPolygonOffset(factor, units)产生平移的距离,平移距离等于m * factor + r * units,这里M是一个多边形本身深度变化的最大值,通常可以都设为1
16显示列表
-1.产生一个列表:用n=glGenLists (×)产生一个独一无二的LIST标识号,然后用glNewList(theTorus, GL_COMPILE);
这里面的第二个参数可以是GL_COMPILE和GL_COMPILE_AND_EXCUTE,二者的区别是前者在产生列表时不执行绘制,只在calllist的时候绘制,而后者是在产生列表时就立即绘制,一般采用 GL_COMPILE会提高渲染性能
绘制代码;
glEndList();产生列表
使用列表,用glCallList(n)绘制那个列表的内容
-2列表中可以存放的内容:
Matrix operations Raster bitmaps and images Lights, material properties, and lighting models Textures Polygon stipple patterns
使用列表而不是做成函数的好处是,使用函数要每次进行很多矩阵运算,而列表中实际只是存放这些运算的结果,值进行了一次运算,每次调用结果
-3 glIsList,判断一个数是否被作为列表标识符
glDeleteLists,删除一个标识符范围的列表
-4 绘制多个列表:
glListBase(base);//定义当前在绘制多个列表时的基础标识号的值
glCallLists(len, GL_BYTE, s);//绘制LEN个列表,并且S为列表的偏移量的指针,绘制的列表的号=BASE+S里的偏移
17
glPushAttrib()和glPopAttrib()用来存储一组状态值,如颜色、各种状态的开关等
18 Pixels, Bitmaps, Fonts, and Images
-1 OPENGL中所指的BITMAP实质就是二值图像(不局限于黑白),每个像素只有一位,当为1时,将绘制当前设定当颜色,为0时不绘制。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/leonwei/archive/2009/03/27/4029328.aspx
【转】我的opengl编程学习(二)(混合、深度测试、雾化、相关推荐
- Android OpenGL ES 学习(二) -- 图形渲染管线和GLSL
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- OpenGL入门学习[二] 绘制简单的几何图形
OpenGL入门学习[二] 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形 我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念 ...
- 【Scheme】Scheme 编程学习 (二) —— 基础
[Scheme]Scheme 编程学习 (二) -- 基础 文接前一节内容 : [Scheme]Scheme 编程学习(一) -- 概述 本文章可以跟视频课程一起看,做了一些补充说明 原视频地址: B ...
- Opengl编程学习笔记(五)——从FRAGMENT到PIXEL(framebuffer 帧缓存)
1.帧缓存包括颜色.scissor.alpha.stencil.depth这些缓存,所以帧缓存不是一片缓存,而是所有这些缓存的组合,帧缓存它对应了屏幕上的每一个pixel(不是真正的pixel,而是一 ...
- opengl教程 linux,绘制基本的几何图形 - OpenGL编程学习实战教程_Linux编程_Linux公社-Linux系统门户网站...
第2章.编写一个的钟表程序 第一节.绘制基本的几何图形 矩形.三角形.圆形等这些都是经典的几何图形,他们都由线构成的(圆形看成是有很多根短线收尾相连围成的),而线都是点构成的.想起了某一年狗血的高考题 ...
- .NET网络编程学习(二)
System.Net.Sockets有很多类,其中最重要的就是Socket类. Socket类 public class Socket : IDisposable Socket 类为网络通信提供了一套 ...
- c++面向对象高级编程 学习二 带指针的类
带指针的类,必须要自己写拷贝构造和赋值构造 拷贝构造:参数和类的类型一样的构造函数 赋值构造:重写操作符=,且其参数和类的类型一样 class String {public: String(const ...
- openGL编程学习(3):太阳、地球、月亮(含自转和公转)和航天飞机
太阳.地球和月亮的显示 sphere.h #include <cmath> #include <vector> #include <glm\glm.hpp> cla ...
- OpenGL编程入门学习
OpenGL编程入门学习 非常详细的教程,很适合初学者 本文转自:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html === ...
- Android OpenGL ES 学习(十二) - MediaCodec + OpenGL 解析H264视频+滤镜
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
最新文章
- linux boost filesystem程序链接,在Linux中链接Boost库
- 怎么添加新项目到svn服务器,用eclipse+svn插件,上传新项目到svn服务器
- CTFshow 信息收集 web12
- centos系统下安装python3以及pip3
- 新手学习Linux——搭建个人论坛
- SQL SERVER数据库 查询sql 多表联查 top命令
- matlab设计模拟带通滤波器
- 关于理财的一点点学习成果(先写这些吧)
- 详解:路由器性能的各项指标
- 基于RT1052的FlexSPI读写FLASH(W25Q256JV)
- JavaScript基础--ECMAScript部分--李南江
- 在多树联动和动态生树的情况下给树上添加新节点
- 天正菜单栏不见了怎么显示出来_天正建筑菜单栏不见了怎么调出来? _ 设计学院_设计软件教程自学网...
- 贪吃蛇 (自我修改添加)
- vue3.0+vite跑项目遇到的问题
- 如何在网页中嵌入播放器
- 【C语言】 Static关键字的用法和详解(太细了!!!)
- 数据库设计学习①:数据库设计简介
- 红米1联通版_标注:2013023_官方线刷包_救砖包_解账户锁
- 传奇开服教程,传奇开服需要学多久? 开传奇sf需要准备什么呢? 开传奇需要多少本钱?---开服流程
热门文章
- iStack详解(三)——iStack多主检测方式
- CentOS7网络快速解决
- CTFHUB Web前置技能 题解记录(HTTP部分)
- 深度强化学习DQN(Deep Q Network)原理及例子:如何解决迷宫问题,附源码
- (Spring Cloud微服务实战-书中之坑)spring cloud zuul统一处理业务异常,并且需要响应状态为200...
- 这家保险公司的第三朵云为什么选择Power?
- 思考,基于高密度闪存的存储系统未来到底是一个什么样子?
- 【网络原理】期末复习笔记 第一章 概述
- 前端常用功能记录(一)
- hadoop(2.5) 分布式部署