颜色、像素、帧缓存
来源:互联网 发布:https seo 编辑:程序博客网 时间:2024/05/16 18:23
缓存
1)颜色缓存:多重采样技术,动画中采用了双重缓冲技术
深度缓存:每个像素保留一个深度值,可以用来判断3维空间中物体的可见性
模板缓存:限制屏幕特定区域的绘制
2)缓存掩码:glDepthMask(GL_TRUE)则深度缓存可以写入, 此操作在将数据写入颜色、深度或者模板缓存区之前。
设置顶点的颜色和位置
void Initialize( )
{
glGenVertexArrays( NumVAOs, VAOs );
glBindVertexArray( VAOs[Triangles] );
struct VertexData {
GLubyte color[4];
GLfloat position[4];
};
VertexData vertices[NumVertices] = {
{{ 255, 0, 0, 255 }, { -0.90f, -0.90f }}, // Triangle 1
{{ 0, 255, 0, 255 }, { 0.85f, -0.90f }},
{{ 0, 0, 255, 255 }, { -0.90f, 0.85f }},
{{ 10, 10, 10, 255 }, { 0.90f, -0.85f }}, // Triangle 2
{{ 100, 100, 100, 255 }, { 0.90f, 0.90f }},
{{ 255, 255, 255, 255 }, { -0.85f, 0.90f }}
};
glGenBuffers( NumBuffers, Buffers );
glBindBuffer( GL_ARRAY_BUFFER, Buffers[ArrayBuffer] );
glBufferData( GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW );
ShaderInfo shaders[] = {
{ GL_VERTEX_SHADER, "media/shaders/gouraud/gouraud.vert" },
{ GL_FRAGMENT_SHADER, "media/shaders/gouraud/gouraud.frag" },
{ GL_NONE, NULL }
};
GLuint program = LoadShaders( shaders );
glUseProgram( program );
glVertexAttribPointer( vColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VertexData), BUFFER_OFFSET(0) );
glVertexAttribPointer( vPosition, 2, GL_FLOAT, GL_FALSE, sizeof(VertexData), BUFFER_OFFSET(sizeof(vertices[0].color)) );
glEnableVertexAttribArray( vColor );
glEnableVertexAttribArray( vPosition );
}
多重采样
glEnable(GL_MULTISAMPLE) //只是对几何图元边缘的平滑技术
1) glGetIntegerv() 来查询多重采样的缓存,以判断是否请求成功glGetMultisamplefv() 查询样本位置信息
2)在片元着色器中用sample in vec4 color;来声明
如果不能用sample关键字来修改片元着色器,通过使用采样着色的方式
glEnable(GL_SAMPLE_SHADING)
glMinSampleShading(0.5) //设置最小采样着色的比率
片元测试
剪切测试: glEnable(GL_SCISSOR_TEST) glScissor(x, y, width, height)
多重采样: glEnable(GL_SAMPLE_COVERAGE) glSampleCoverage()
模板测试: glEnable(GL_STANCIL_TEST) glStencilFunc() glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP) //没通过
深度测试: glEnable(GL_DEPTH_TEST) glDepthFunc(GL_NEVER) //GL_LESS
融混测试: glEnable(GL_BLEDN) glBlendFunc() glBlendFuncSeparate()
抖动: glEnable(GL_DITHER) 提升颜色的分辨率
逻辑: glEnable(GL_COLOR_LOGIC_OP) glLogicOp(GL_COPY)
注意:深度测试一般会涉及到多边形偏移问题,可设置多边形光栅化方式。
遮挡查询
在深度测试之后,用来判断一系列复杂的集合物体的可见性,它不需要渲染全部的几何信息,而是先渲染它的包围体,这样降低了渲染资源的消耗
glGenQueries(1, &v);
glBeginQueries(GL_SAMPLES_PASSED, Query);
glDrawArrays();
glEndQuery(GL_SAMPLES_PASSED);
glGetQueryObjectiv(); //获取查询结果
...
glBeginConditionalRender(); //条件渲染,用来判断遮挡查询是否得到了有效的片元
glDrawArrays()
gnEndConditionalRender()
图元反走样(抗锯齿)
glEnable(GL_LINE_SMOOTH)
glHint(GL_LINE_SOOTH_HINT,GL_FASTEST); 线段的反走样
GL_POLYGON_SMOOTH_HINT GL_NICEST
GL_TEXTURE_COMPRESSION_HINT GL_DONT_CARE
GL_FRAGMENT_SHADER_DERIVATIVE_HINT
仅仅简述,自己查找
帧缓存、渲染缓存
帧缓存将数据的拷贝消耗最小化,同时对性能进行优化。
渲染缓存中的数据只有关联到一个帧缓存对象之后才有意义,用于存储格式化的图像数据,缓存的格式和要求渲染的格式必须同
glGenRenderbuffers() //先创建渲染缓存对象
glBindRenderbuffer()
glRenderbufferStorage()
glGenFramebuffers() //再创建帧缓存对象
glBindFramebuffers()
glFramebufferRenderbuffer() //绑定
- 颜色、像素、帧缓存
- 像素与颜色
- 位图像素的颜色
- OpenCV改变像素颜色
- 修改Bitmap像素颜色
- OGRE更新像素缓存
- 【转】硬件像素缓存
- python 获取指定像素颜色
- 取像素颜色的方法
- MATLAB像素颜色的表达方式
- 获取像素颜色(cocos2dx3.0)
- opengl 获取像素点颜色
- UIImage 读取修改像素颜色
- php 获取图片像素颜色
- 灰度图像像素颜色亮度处理
- MATLAB像素颜色的表达方式(ZZ)
- 关于Bitmap像素颜色的判断
- HTML5特性 > Canvas >像素和颜色
- win10磁盘分区图文教程
- shape的使用
- webpack基础入门
- 【概率】极大似然MLE 和最大后验 MAP,最大熵Maximum Entropy
- 广告行业PMP
- 颜色、像素、帧缓存
- MPAndroidChart之LineChart双线绘制
- cocos2dx-3.6 开发技巧(二)回调函数以及动画的使用,触摸事件,android返回键,屏幕截屏
- 使用printf 打印数据的一个小小疑问,待解!
- [leetcode]240. Search a 2D Matrix II
- ubuntu和win10双系统安装教程
- node-sass报错解决方法
- 关于使用ExcelEngine在Windows中编译的补充
- KVC-KVO