cocos2dx中 Node 在shader使用v_texCoord
2016-02-22 23:11
411 查看
1. drawNode 的fsh中无法使用v_texCoord,原因在于
void DrawNode::drawPolygon{}函数中的给顶点数组赋值的时候,__t(v2fzero)赋值给了V2F_C4B_T2F的T2F,因此TexCoords都是0.0f;
for (int i = 0; i < count-2; i++)
{
V2F_C4B_T2F_Triangle tmp = {
{verts[0], Color4B(fillColor), __t(v2fzero)},
{verts[i+1], Color4B(fillColor), __t(v2fzero)},
{verts[i+2], Color4B(fillColor), __t(v2fzero)},
};
*cursor++ = tmp;
}
2. 在Sprite中,TexCoords的值是(0,0)到(1,1)。在函数void Sprite::setTextureCoords(Rect rect)中进行赋值。
_quad.bl.texCoords.u = left;
_quad.bl.texCoords.v = top;
_quad.br.texCoords.u = left;
_quad.br.texCoords.v = bottom;
_quad.tl.texCoords.u = right;
_quad.tl.texCoords.v = top;
_quad.tr.texCoords.u = right;
_quad.tr.texCoords.v = bottom;
3. 因此,想要在Node的shader中使用到v_texCoord,需要在调用gldrawarray的之前,绑定texCoords值。
typedef struct {
float Position[2];
float Color[4];
float TexCoords[2];
} Vertex;
Vertex _quad[6];
void VRMaskNode::initQuad()
{
_quad[0] = { { 0,0 },{ 0,1,0,1 },{0,0} };
_quad[1] = { { _visibleSize.width,0 },{ 0,1,1,1 } ,{1,0} };
_quad[2] = { { 0,_visibleSize.height },{ 0,1,1,1 },{ 0,1 } };
_quad[3] = { { 0,_visibleSize.height },{ 0,1,1,1 },{ 0,1 } };
_quad[4] = { { _visibleSize.width,0 },{ 0,1,1,1 } ,{ 1,0 } };
_quad[5] = { { _visibleSize.width,_visibleSize.height },{ 0,1,1,1 },{ 1,1 } };
}
GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION | GL::VERTEX_ATTRIB_FLAG_COLOR | GL::VERTEX_ATTRIB_FLAG_TEX_COORD);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION,
2, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, Position));
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_COLOR,
4, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, Color));
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_TEX_COORD,
2, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, TexCoords));
glDrawArrays(GL_TRIANGLES, 0, 6);
void DrawNode::drawPolygon{}函数中的给顶点数组赋值的时候,__t(v2fzero)赋值给了V2F_C4B_T2F的T2F,因此TexCoords都是0.0f;
for (int i = 0; i < count-2; i++)
{
V2F_C4B_T2F_Triangle tmp = {
{verts[0], Color4B(fillColor), __t(v2fzero)},
{verts[i+1], Color4B(fillColor), __t(v2fzero)},
{verts[i+2], Color4B(fillColor), __t(v2fzero)},
};
*cursor++ = tmp;
}
2. 在Sprite中,TexCoords的值是(0,0)到(1,1)。在函数void Sprite::setTextureCoords(Rect rect)中进行赋值。
_quad.bl.texCoords.u = left;
_quad.bl.texCoords.v = top;
_quad.br.texCoords.u = left;
_quad.br.texCoords.v = bottom;
_quad.tl.texCoords.u = right;
_quad.tl.texCoords.v = top;
_quad.tr.texCoords.u = right;
_quad.tr.texCoords.v = bottom;
3. 因此,想要在Node的shader中使用到v_texCoord,需要在调用gldrawarray的之前,绑定texCoords值。
typedef struct {
float Position[2];
float Color[4];
float TexCoords[2];
} Vertex;
Vertex _quad[6];
void VRMaskNode::initQuad()
{
_quad[0] = { { 0,0 },{ 0,1,0,1 },{0,0} };
_quad[1] = { { _visibleSize.width,0 },{ 0,1,1,1 } ,{1,0} };
_quad[2] = { { 0,_visibleSize.height },{ 0,1,1,1 },{ 0,1 } };
_quad[3] = { { 0,_visibleSize.height },{ 0,1,1,1 },{ 0,1 } };
_quad[4] = { { _visibleSize.width,0 },{ 0,1,1,1 } ,{ 1,0 } };
_quad[5] = { { _visibleSize.width,_visibleSize.height },{ 0,1,1,1 },{ 1,1 } };
}
GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION | GL::VERTEX_ATTRIB_FLAG_COLOR | GL::VERTEX_ATTRIB_FLAG_TEX_COORD);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION,
2, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, Position));
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_COLOR,
4, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, Color));
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_TEX_COORD,
2, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, TexCoords));
glDrawArrays(GL_TRIANGLES, 0, 6);
相关文章推荐
- 分析cocos2d-x在Android上的编译过程(1):cocco2d-x是怎样生成的Android的文件夹结构
- Cocos2dx-lua 播放音循环播放问题
- cocos2d-js进度条
- eclipse 中编译cocos2dx 代码,报错:Description Resource Path Location Type *** Android NDK: Aborting. . S
- Cocos2d-x 3.x控制器模式
- Cocos中在.h文件定义的指针类型变量不实例化会在析构时出现问题
- 拼接滚动地图-Quick-cocos2dx
- Cocos2D-x权威指南:核心类成员CCNode
- cocos2dx学习之路----第四篇(场景跳转)
- 收集Cocos2d提供的字体
- Cocos-x 3.2:从C++过渡到Lua
- cocos2d-x按钮CCControlButton的用法
- Cocos2dx-OpenGL ES2.0教程:编写自己的shader(2)
- iOS6 横屏项目自动旋转的问题解决 cocos2d
- Cocos2dx-OpenGL ES2.0教程:初识MVP(3)
- 使用CocosBuilder2.1结合cocos2d-x2.0.3创建动画场景
- 搭建cocos2d游戏引擎环境HelloWorld!
- Cocos2dx-OpenGL ES2.0教程:你的第一个立方体(5)
- Cocos2dx-OpenGL ES2.0教程:纹理贴图(6)
- Cocos2dx-OpenGL ES 2.0教程:你的第一个三角形(1)