离屏渲染,OpenGL的三种渲染方式

离屏渲染,OpenGL的三种渲染方式,第1张

一. 离屏渲染触发的原理:APP在对图片进行渲染,合并的时候会触发离屏渲染,离屏渲染流程先把图层保存在帧缓冲区(offscreen Buffer)中,如果这个图层需要进行渲染.合并就会把图层存的数据通过顶点着色器.片元着色器,然后放在离屏缓冲区(offscreenBuffer)中,然后把其他的图层也是按照这种形式进行存储,然后把存放在离屏渲染缓冲区的图片取出来进行合并.渲染。如果不需要做渲染.合并的时候回直接渲染在屏幕上,然后直接从帧缓冲区中移除。而触发离屏渲染的方式有:maks,对图片进行裁剪,对颜色进行透明度的叠加,添加投影,采用光栅画,绘制文字的时候。都会触发离屏渲染。

二.在切圆角的时候。如果你只是设置了 self .type.layer.cornerRadius=2这个方法不会触发离屏渲染。只有在设置了 self .type.layer.masksToBounds = YES 这个方法的时候才会触发离屏渲染。因为 如果只设置了第一个方法 只是对layer层做了圆角设置。并没有多图片的内容进行裁剪。所以这个时候不会触发离屏渲染,如下图所示:

三.因为离屏渲染会使用额外的内存空间(离屏渲染缓冲区),所以离屏渲染会有性能问题。会比较容易形成掉帧,offscreenBuffer是有空间限制的(屏幕像素点的2.5),离屏渲染有自己的优势。离屏渲染在对于复杂图层进行渲染的时候很高效。在我们重复使用一个渲染效果的时候我们可以复用。

四,OpenGL三种渲染方式:1.Attributes(属性):通过这个方式我们可以把数据传到顶点着色器里面桥接到片元着色器中(属性只能把数据传输到顶点着色器中,不能传送到片元着色器中) Attributes方式我们只能传一些顶点数据、矩阵、纹理坐标等。2、Uniforms: 通过这个方式我们传一些固定的、不经常变动的一些数据。通过Uniforms方式 我们可以把数据传输到顶点着色器中,也可以把数据传输到片元着色器中。3、Texture Data(纹理数据),通过纹理数据可以传输到顶点着色器和片元着色器中,但是纹理数据传到顶点着色器中是毫无意义的。所以我们再平时开发中都不会把纹理数据传输到顶点着色器中。

亲你好,1. 采样/纹理过滤 OpenGL中的过滤方式由多种,常用的两种:GL_NEAREST和GL_LINEAR。 GL_NEAREST(最近邻): 从图上可以看出,要采样这个坐标的颜色

2. 纹理环绕 OpenGL规定纹理坐标的范围是[0,1],

跟VC6一样的

一、下载并安装glut库 opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

Windows环境下安装GLUT的步骤:

1、将下载的压缩包解开,将得到5个文件

2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(Program Files\Microsoft Visual Studio\VC98\Include\GL文件夹”)。把解压得到的glut.h放到这个文件夹。

3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(Program Files\Microsoft Visual Studio\VC98\lib”文件夹)。

4、把解压得到的glut.dll和glut32.dll放到 *** 作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32)

二、vc工程配置:

1)创建一个工程。glut 是一个console project ,你创建的时候必须创建console 以对应 .

2)链接OpenGL libraries。在Visual C++中先单击Project,再单击Settings,再找到Link单击,

在“分类”(Category)组合框里选择“输出”(output) ,再在“入口点”(Entry-point symbol)文本框里键入“mainCRTStartup” ,对一个现有的控制台应用程序,有一个简单的办法把它转换成Win32应用程序,这样可以摆脱那个命令行窗口。

3)单击Project Settings中的C/C++标签,将Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击OK。 增加下面的文件到“对象/库模块"

(Object/library/modules):OpenGL32.lib glut32.lib glu32.lib (有时候不需要glut32.lib)

4)然后在stdafx.h文件中加入

#include <windows.h>

#include <GL/glu.h>

#include <GL/gl.h>

#include <GL/glut.h>

#include <GL/glaux.h>

注意:#include 是需要的,不引入的话有时会报错。 完成后,就可以编写你自己的程序了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11700758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存