您的位置:首页 > 移动开发 > Cocos引擎

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: