color4b颜色中的第四个参数的值域是多少?为什么不是0-1

怪医黑杰克之生命的四个奇迹中的第四个是什么,麻烦给一下名字,因为他没有播完_百度知道excel公式vlookup中的四个数据填写什么?_百度知道该系列其他文章
OpenGL ES2.0教程(4):使用VBO索引
在文章中,我们介绍了uniform和模型-视图-投影变换,相信大家对于OpenGL ES 2.0应该有一点感觉了。在这篇文章中,我们不再画三角形了,改为画四边形。下篇教程,我们就可以画立方体了,到时候就是真3D了。为什么三角形在OpenGL教程里面这么受欢迎呢?因为在OpenGL的世界里面,所有的几何体都可以用三角形组合出来。我们的四边形也一样,它可以用两个三角形组合出来。你的第一个四边形首先,因为OpenGL里面没有直接绘制四边形的命令的,所以我们需要画两个三角形来拼成一个四边形。这样的话,这样的话我们一共需要6个顶点。这6个顶点的坐标如下所示:float&vertercies[]&=
&&&&&&&&{&-1,-1,
&&&&&&&&1,&-1,
&&&&&&&&-1,&1,
&&&&&&&&-1,&1,
&&&&&&&&1,1,
&&&&&&&&1,&-1};此时,我们还需要修改glDrawArray和CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES宏,如下所示://注意3个顶点,变成了6个顶点,这里一定要改成6,否则OpenGL只会画3个顶点
glDrawArrays(GL_TRIANGLES,&0,&6);&
glBindVertexArray(0);
//这里的6是可选的,改成6可以更好地与cocos2d-x引擎融合
CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1,&6);此时,运行程序,你会发现只有一个三角形。那是因为我们的顶点属性color只有3份,现在6个顶点了,所以也需要6份颜色数据。另外,为了显示好看,这里把6个颜色统一修改成绿色:&float&color[]&=&{&0,&1,0,&1,
&&&&&&&&&&&&&&&&&&&0,1,0,&1,
&&&&&&&&&&&&&&&&&&&0,&1,&0,&1,
&&&&&&&&&&&&&&&&&&&0,&1,0,&1,
&&&&&&&&&&&&&&&&&&&0,1,0,&1,
&&&&&&&&&&&&&&&&&&&0,1,&0,&1};同时,记得把教程中设置的uniform u_color也重置一下:float&uColor[]&=&{1.0,&1.0,&1.0,&1.0};
glUniform4fv(uColorLocation,1,&uColor);此时,编译并运行,你会得到一个纯绿色的四边形:怎么样,画4边形不过如此吧,只需要多准备点数据就行啦。另外,注意一下三角形的顶点顺序。不过,细心的读者立马就会发现,我们的顶点数据里面有两个顶点是重复的。这其实是一种内存浪费。假设我们现在渲染一个复杂的模型,它可能包含几千个三角形,如果采用这种方式,那不知道要浪费多少内存。接下来,我们要介绍一种方法,使用索引数组来重用顶点数据。使用VBO索引推荐大家先看看,相信大家看完之后应该知道怎么实现了。1)修改原始顶点数据把vertercies修改为下面的样子:float&vertercies[]&=
&&&&&&&&{&-1,-1,
&&&&&&&&1,&-1,
&&&&&&&&-1,&1,
&&&&&&&&1,1};从上面的顶点数据可以看出,这4个点刚好就是normalized device space的四个边界的顶点。2)指定2个三角形的索引我们需要为两个三角形指定索引数据,如下所示:GLubyte&indices[]&=&{&0,1,2,&&//第一个三角形索引
&&&&&&&&&&&&&&&&&&&&2,3,1};&//第二个三角形索引3)创建索引缓冲区并绑定索引数据到缓冲区GLuint&indexVBO;
glGenBuffers(1,&&indexVBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,&indexVBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,&sizeof(indices)&,&indices,&GL_STATIC_DRAW);这里索引缓冲区与之前的GL_ARRAY_BUFFER的创建与使用方式是一样的。4)最后,我们把glDrawArray替换成glDrawElements(GL_TRIANGLES,&6,&GL_UNSIGNED_BYTE,(GLvoid*)0);第一个参数:指定绘制基本图元的类型,这里我们指定的是三角形第二个参数:需要绘制的元素个数,即索引的数量,我们一共是6个索引第三个参数:指定索引数据的类型,注意必须是 GL_UNSIGNED_BYTE和GL_UNSIGNED_SHORT中的一个。推荐用GL_UNSIGNED_BYTE。第四4个参数:指定开始绘制的第一个索引数据在缓冲区的偏移。此时,编译并运行,我们还是得到了和之前一样的四边形。改进顶点数据结构现在顶点属性包含位置(position)和颜色(color),将来还会有法线(normal),纹理坐标(texture coordinate)等数据。如果每一种类型的顶点数据都分开来存放,一来不利于管理,二来也会产生内存碎片。在本小节中,我将向大家介绍如何使用一个结构体来封装这些数据。这也是cocos2d-x里面所用的方法,比如一个Quard的定义如下:struct&V3F_C4B_T2F
&&&&//!&vertices&(3F)
&&&&Vec3&&&&&&&&&&&&&&&&&//&12&bytes
&&&&//!&colors&(4B)
&&&&Color4B&&&&&&&&&&&&&&&&&&&&//&4&bytes
&&&&//&tex&coords&(2F)
&&&&Tex2F&&&&&&&&texC&&&&&&&&&&&//&8&bytes
};仿照上面的结构体,我们也定义一个结构体Vertex,用来表示顶点的数据,目前它里面包含位置和颜色:typedef&struct&{
&&&&&&&&float&Position[2];
&&&&&&&&float&Color[4];
&&&&}&V下面是我们的顶点数据定义:Vertex&data[]&=
&&&&&&&&{{-1,-1},{0,1,0,1}},
&&&&&&&&{{1,-1},{0,1,0,1}},
&&&&&&&&{&{-1,1},{0,1,0,1}},
&&&&&&&&{{1,1},{0,1,0,1}}
&&&&};注意,我们画四边形需要4个顶点,所以,需要四份Vertex数据。接下来,我们指定Vertex Shader如何读取这些属性:glVertexAttribPointer(positionLocation,
&&&&&&&&&&&&&&&&&&&&&&&&&&2,
&&&&&&&&&&&&&&&&&&&&&&&&&&GL_FLOAT,
&&&&&&&&&&&&&&&&&&&&&&&&&&GL_FALSE,
&&&&&&&&&&&&&&&&&&&&&&&&&&sizeof(Vertex),
&&&&&&&&&&&&&&&&&&&&&&&&&&(GLvoid*&)offsetof(Vertex,Position));
&&&&//set&for&color
//&&&&glGenBuffers(1,&&colorVBO);
//&&&&glBindBuffer(GL_ARRAY_BUFFER,&colorVBO);
//&&&&glBufferData(GL_ARRAY_BUFFER,&sizeof(data),&data,&GL_STATIC_DRAW);
&&&&GLuint&colorLocation&=&glGetAttribLocation(program-&getProgram(),&&a_color&);
&&&&glEnableVertexAttribArray(colorLocation);
&&&&glVertexAttribPointer(colorLocation,
&&&&&&&&&&&&&&&&&&&&&&&&&&4,
&&&&&&&&&&&&&&&&&&&&&&&&&&GL_FLOAT,
&&&&&&&&&&&&&&&&&&&&&&&&&&GL_FALSE,
&&&&&&&&&&&&&&&&&&&&&&&&&&sizeof(Vertex),
&&&&&&&&&&&&&&&&&&&&&&&&&&(GLvoid*&)offsetof(Vertex,Color));这里,我们需要指定glVertexAttribPointer的第5个参数和第6个参数。下图告诉我们Vertex Shader是如何读取属性的:注意,我们这里把colorVBO的生成和绑定代码注释掉了,因为已经不需要了。编译并运行,这时候你还是会看到一个绿色的四边形。结语从本例中可以看到,VBO可以一次性传递所有的顶点数据给vertex shader(目前是position和color,以后还有法线和纹理坐标),然后使用glVertexAttribPointer按一定的规则去取数据就行了。至于几何图元如何组装,可以交给索引VBO去解决,最后调用glDrawElements来完成实际的绘制。另外如果我们只想画纯色的四边形,那么建议不要使用attribute,直接使用uniform并把该uniform的值传给gl_FragColor就行了。这个就留给读者自行去实验啦。点击本教程源码。推荐阅读:
来源网址:
pushMatrix和popMatrix到底是起到什么作用,求解释啊
请问一下,这个源代码在我的机器上运行会崩溃,
cocos2d 设置了CC_TEXTURE_ATLAS_USE_VAO=1,不设置这个也会崩溃。。。
debug下显示的崩溃函数是:glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE,(GLvoid*)0);
Niekq 13:25:38
回复 同样的问题
mingcai0000 11:39:40
先给个赞~大神辛苦了~
aboduo 00:20:05
最后这个插图是不是给错了,这个应给是上个教程的配图,这篇讲的顶点结构组织方式跟这个图配不上啊, 没求证,只是感觉
为什么不用GL_TRIANGLE_FAN呢?
七夜狐 17:33:43
回复 子龙是为了讲东西啊,不是为了让大家学会画三角形。为了让大家理解概念。用三角形比较简单,好理解
tanyongdahaoren 17:31:58
先给个赞~大神辛苦了~
评论内容不能为空。
技术咨询邮箱:
沪ICP备号-5可以讲一下第二问的第二个空为什么会有aa吗? 第四问第二个空为什么是1:3?_百度知道四年级语文第四个月月考试卷及答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
四年级语文第四个月月考试卷及答案
上传于||文档简介
&&试​卷
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 color4b参数 的文章

 

随机推荐