jsjyjs.open.ha.cnggl es2怎么调换像素的位置

OpengGL ES系列笔记三
OpengGL ES系列笔记三
深度渲染缓存深度缓存是一个可选的输出缓存,并且与像素颜色渲染缓存相似,几乎所有的OpenGL ES都使用深度缓存,以为几乎所有的OpenGL ES应用都使用坐标系变换来改变渲染的视点。在大部分的情况下,一个深度缓存会消除对于三角形、线段、和点进行排序的需求。深度缓存的使用为GPU提供了一个用来保存计算出的深度的地方。之后这个缓存又被GPU利用来控制在像素颜色渲染缓存中的片元的置换。(因为在渲染片元的时候,会计算出片元的深度,如果深度小于深度缓存的深度,那么这个片元就用来代替在像素颜色渲染缓存中得那个片元位置的任何颜色,并且把计算出来的片元深度替代深度缓存里的深度。如果计算出来的片元深度更大,那么这个片元不会被渲染,依旧使用像素颜色渲染缓存里的片元)
GLKit与深度缓存
GLKit的GLKMatrix4MakeScale()函数创建了一个基础的变换矩阵,三个参数指定了xyz轴的相对单位长度,1.0f表示没有变化,aspectRatio表示单位长度变为这个值基本变换只存在四种基本变换:平移、旋转、缩放、透视。基本变换联合决定了一个新坐标系中得每一个顶点位置是怎样转换为参考坐标系中的一个位置的。单位矩阵定义一个与参考坐标系相同的坐标系的矩阵叫做单位矩阵。任意矩阵的级联操作中产生一个新的矩阵,这个新矩阵包含两个矩阵的所有变换。解析:一个矩阵A通过简单变换例如是平移,会产生一个平移矩阵,但是这个平移矩阵并是不最终的矩阵,要把A与这个平移矩阵进行级联产生新的A矩阵,这个A矩阵就是新的当前矩阵了。
矩阵平移:通过相对于参考坐标系的原点移动新坐标系的原点,平移定义了一个新的坐标系(注意记住平移原点就好了),平移不会影响新坐标轴相对于参考坐标系的长度和方向。GLKit简化了坐标的平移,提供了GLKMatrix4MakeTranslation(float tx,float ty,float tz)通过平移一个单位矩阵返回一个和定义了坐标系的新矩阵(平移矩阵)。tx/ty/tz分表表示新坐标系的原点距离原坐标系的原点在各个轴上移动的距离。函数GLKMatrix4Translate(GLKMatrix4 matrix,float x,float y,float z)返回参数矩阵(原坐标矩阵)(x,y,z)与GLKMatrix4MakeTranslation()产生的 一个级联。
平移坐标轴
平移矩阵生成
矩阵平移的过程分解
旋转旋转是通过相对参考坐标系坐标轴的方向旋转新坐标系的坐标轴来定义一个新的坐标系,旋转的坐标系与参考坐标系使用同一个原点,且坐标轴长度不会变化,变的只是坐标轴的方向。GLKit简化旋转过程,提供GLKMatrix4makeRotation(float angleRadians,float rx,float ry, float rz)函数生成一个旋转坐标矩阵。通过GLKMatrix4Rotate(GLKMatrix4 matrix,float angleRadians, float x , float y, float z)函数通过旋转座位一个参数传入的矩阵返回一个定义了一个坐标系的新矩阵
坐标轴旋转
缩放缩放是通过相对于参考坐标系的坐标轴的单位长度改变新坐标系的坐标轴的单位长度来定义一个新坐标系,缩放的坐标系与参坐标系的原点、方向一般不会改变,除非通过一个负值进行缩放会改变方向。同样,GLKit提供了GLKmatri4MakeScale(float x,float y,float z)函数通过扩大或者缩小一个单位矩阵的任意坐标轴的单位长度来返回一个定义了坐标系的矩阵。
矩阵缩放的分解过程
projectionMatrix 和 modelviewMatrixGLKBaseEffect的trnsform属性支持常见的三个不同矩阵-projectionMatrix 和modelviewMatrix和textureMatrix。GLKBaseEffect会级联modelviewMatrix和projectionMatrix以产生一个mdelviewPaojectionMatrix矩阵,这个矩阵会把顶点完全地变换到OpenGL ES默认坐标系中。默认坐标系直接映射到像素颜色渲染缓冲的片元中。
GLKMatrixStackGLKMatrixStack是GLKit提供的一个堆栈,用于存放4x4矩阵的,GLKMatrixStackPush函数会复制最顶部的矩阵到堆栈的顶部,GLKMatrixStackGetMatrix4()会返回最顶部的矩阵,GLKMatrixStackPop函数会移除堆栈最顶部的项,并把前一个顶部矩阵恢复到最顶部。应用会推入一个新矩阵到堆栈顶部,操作并使用它在OPengl ES中渲染几个图像,然后把它弹出堆栈并把上一个矩阵恢复到顶部。textureMatrix纹理矩阵,S和T坐标系的纹理与顶点的U和V坐标之间会有一个映射的过程,纹理矩阵的作用几时 在这个映射的过程添加转换。textureMatrix2d0:用于使用多重纹理时第一个纹理的纹理坐标的变换。textureMatrix2d1:用于保存使用多重纹理时第二个纹理的纹理坐标的矩阵。透视和平截头体OpenGL ES使用一个叫做视域的几何图形来决定一个场景生成的哪些片元将会显示在最终的渲染结果中,处于视域范围的将被显示,其余的被抛弃。视域有时也会被称为投影,一个立方体或者矩形视域叫做一个正射投影。利用一个正射投影对于视点距离没有影响。GLKit的GLKMatrix4MakeOrtho(GLFloat left,GLFloat right,GLFloat bottom,GLFloat top,GLFloat near,GLFloat far)函数会返回一个矩阵,这个矩阵定义了一个由left,right,bottom,top,near,far界定的视域。GLKMatrixMakeOrtho函数返回的矩阵通常与当前projectionMatrix级联来定义视域。当使用透视投影时,视域将不再是矩形,而是角锥体去了头部的平截头体,当投影到2D颜色渲染缓存中后,距离视点越远的对象越小,但是接近视点的对象仍然很大。GLKit的GLKMatrixMakeFrustrum()函数将创建一个包含透视的新变换矩阵。这个新矩阵通常会与当前projectionMatrix级联来定义视域。&>&Android3D游戏开发技术宝典-OpengGL ES2.0 吴亚峰著 pdf及源代码
Android3D游戏开发技术宝典-OpengGL ES2.0 吴亚峰著 pdf及源代码
上传大小:40MB
Android3D游戏开发技术宝典-OpengGL ES2.0 吴亚峰著 pdf及源代码,共5个包
综合评分:4.6(7位用户评分)
所需积分:
下载个数:83
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有2条
5个包,楼主真辛苦了!
不是很清晰,但是可以学习。
审核通过送C币
微信商城专辑
创建者:velada
Android初学者
创建者:haicheng20
android图表控件和RecyclerView相关demo
创建者:huchengzhiqiang
上传者其他资源上传者专辑
Android3D游戏开发技术宝典-OpengGL ES2.0 吴亚峰著 pdf及源代码5
Android3D游戏开发技术宝典-OpengGL ES2.0 吴亚峰著 pdf及源代码4
Android3D游戏开发技术宝典-OpengGL ES2.0 吴亚峰著 pdf及源代码3
Android3D游戏开发技术宝典-OpengGL ES2.0 吴亚峰著 pdf及源代码2
android 2.2 signapk
移动开发热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
Android3D游戏开发技术宝典-OpengGL ES2.0 吴亚峰著 pdf及源代码
会员到期时间:
剩余下载个数:
剩余C币:0
剩余积分:6726
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
Android3D游戏开发技术宝典-OpengGL ES2.0 吴亚峰著 pdf及源代码opengl(8)
OpenGL ES 1.1和OpengGL ES2.0的规范中,都定义了每种实现必须支持的最低标准。但是,在OpenGL ES规范中,对这些应该支持的性能的实现没有限制的那么死板。在OpenGL ES的规范中,有很多种方法可以扩展这些能力范围。在之后的章节“平台注意事项”,会详细讲解IOS中每个OpenGL ES的实现所具备的特定能力。一个实现的准确能力范围根OpengGL ES特定的实现版本,硬件平台以及运行在设备中的IOS版本有关系。
无论你选择构建OpenGL ES1.1还是OpengGL ES2.0的应用程序,你的应用程序应该做的第一件事,就是确定在目前的实现下所具备的准确的能力。为了做这些,你的应用程序需要设定当前上下文,然后调用一个或者更多的OpenGL ES的函数来取回实现的某些特定能力。在创建之后,上下文所具备的能力不能够被改变。一旦你的应用程序具备了这些能力,那么就可以根据这些能力适当的修剪绘制的代码。例如,根据执行提供的纹理单元数量,你可能会单次执行计算,执行多遍,或选择一个简单的算法。一个常用的方式,就是在你的应用程序中,为每一个渲染方式都设计一个类,并且这些类都拥有一个通用的父类。你运行时,你会根据上下文的能力实例化不同的类。
读取实现依赖的值
在OpenGL ES规范中定义了实现依赖值,这些值来定义OpenGL ES实现所具有的能力极限范围。例如,纹理的最大尺寸和纹理单元的个数是经常用到的实现依赖值,一个应用程序经常会确认这些值的。IOS设备支持PowerBR MBX图像硬件,最大的纹理尺寸是,而PowerVR SGX软件支持的最大纹理尺寸是。这两个尺寸都超过了64x64,这个是OpenGL ES规范中的最小尺寸要求。如果你的应用程序要超过这个最小尺寸的要求,那么就应该查询硬件设备是否支持你需要的尺寸。否则,你就需要导入一个更小的纹理或者使用一个不同的渲染策略。
规范提供了这些限制的很完善的清单,但是在OpenGL ES应用程序中只有一部分会用到。表 3-1 列出了OpenGL ES1.1和OpenGL ES2.0应用程序应该检测的值。
纹理的最大尺寸
GL_MAX_TEXTURE_SIZE &&&
深度缓存面的数量
GL_DEPTH_BITS &&&
模版缓存面的数量
GL_STENCIL_BITS
在OpenGL ES2.0的应用程序中,你的应用程序首先要读取放置在着色器上面的各种限制。所有的硬件设备都支持一个有限的属性值,传递给顶点和片段着色器。当你的应用程序实现时,超过了这些极限值,一个OpenGL ES 2.0的实现不会给你提供一个软件回退。所以你的应用程序要么就在规定的最小值上实现,要么就需要核对表3-2中的极限值,从而选择何时的值来使用着色器。
OpenGL ES2.0着色器
顶点属性的最大数量
GL_MAX_VERTEX_ATTRIBS &&&
统一顶点向量的最大数量
GL_MAX_VERTEX_UNIFORM_VECTORS &&&
统一片段向量的最大数量
GL_MAX_FRAGMENT_UNIFORM_VECTORS &&&
可变向量的最大数量
GL_MAX_VARYING_VECTORS &&&
在一个顶点着色器上纹理单元的最大数量
GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS &&&
在一个片段着色器上纹理单元的最大数量
GL_MAX_TEXTURE_IMAGE_UNITS
& &表 3-2 openGL ES 2.0的着色器的值
对于所有的向量类型,查询将返回四分量的浮点向量的数量
OpenGL ES 1.1的应用程序需要检查纹理单元的数量,和可用的裁剪平面的数量,如表3-3.
OpenGL ES1.1
到固定功能管道中可用的纹理单元的最大数量
GL_MAX_TEXTURE_UNITS &&&
裁剪平面的最大数量
GL_MAX_CLIP_PLANES &
& & & & & & &表 3-3 openGL ES 1.1的值
在使用他们之前核对扩展性
一个OpenGL ES的实现可以通过实现OpenGL ES的扩展来为OpenGL ES API增加一些函数的功能。在你打算用OpenGL ES的某个扩展特性时,你的应用程序必须检查这个扩展特性是否能用。唯一的例外是OES_framebuffer_object扩展,这个扩展性能在所有的OpenGL ES 1.1中都提供。在应用程序中,IOS使用framebuffer对象作为唯一一种绘制的帧缓冲。
清单 3-1 提供了如何检查扩展存在的代码
BOOL&CheckForExtension(NSString&*searchName)&&{&&//&For&performance,&the&array&can&be&created&once&and&cached.&&&&&&NSString&*extensionsString&=&[NSString&&stringWithCString:glGetString(GL_EXTENSIONS)&encoding:&NSASCIIStringEncoding];&&&&&&NSArray&*extensionsNames&=&[extensionsString&componentsSeparatedByString:@&&&&];&&&&&&return&[extensionsNames&containsObject:&searchName];&&}&&
& & & & & 清单 3-1 检查OpenGL ES的扩展
调用glGetError来测试错误
你的应用程序的调试版本,应该通过定期的调用glGetError功能函数的返回值,来找出错误。如果有一个错误从glGetError函数中返回,这就意味着没有正确的使用OpenGL ES的API,或者底层的实现不能执行所请求的操作。
要注意的是重复多次的调用glGetError函数会降低你应用程序的性能。在你程序的release版本时要慎重调用。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:120123次
积分:1475
积分:1475
排名:千里之外
转载:92篇
(1)(1)(3)(1)(1)(2)(4)(1)(1)(3)(4)(14)(16)(4)(4)(1)(6)(3)(1)(7)(3)(1)(12)(6)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'&>&Android3D游戏开发技术宝典 OpengGL ES2 0
光盘资料 吴亚峰著 part1
Android3D游戏开发技术宝典 OpengGL ES2 0
光盘资料 吴亚峰著 part1
上传大小:45MB
该资源是吴亚峰著的android 3d游戏开发书籍的光盘资料,该书籍是基于openg gl es2.0,对于想入门android游戏的开发人员是一个不错的选择
综合评分:4.1(11位用户评分)
所需积分:
下载个数:46
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有4条
学习open gl es 2.0 难得的中文资料
看过此作者其它书,有些重要的地方写的不清楚,只是有代码,而且部分代码无法运行。感觉作品粗糙
怎么part1和part2是一样的内容呢?
不错!对我学习有很大的帮助!
审核通过送C币
微信商城专辑
创建者:velada
Android初学者
创建者:haicheng20
android图表控件和RecyclerView相关demo
创建者:huchengzhiqiang
上传者其他资源上传者专辑
Roboto字体
Android3D游戏开发技术宝典 OpengGL ES2 0
光盘资料 吴亚峰著 part2
libgdx1.2版本
Unity3D游戏开发中文手册
代码大全2(中文清晰版)
移动开发热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
Android3D游戏开发技术宝典 OpengGL ES2 0
光盘资料 吴亚峰著 part1
会员到期时间:
剩余下载个数:
剩余C币:0
剩余积分:6726
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
Android3D游戏开发技术宝典 OpengGL ES2 0
光盘资料 吴亚峰著 part1

我要回帖

更多关于 openoffice 的文章

 

随机推荐