Opengl es 需要使用cocos2d-x绘制非矩形精灵的帮助吗
我在尝试绘制一些非矩形精灵时遇到问题。由于某些原因,图像在三角形条带上没有正确映射。有人能告诉我可能做错了什么吗?任何帮助都将不胜感激 以下是我得到的结果:Opengl es 需要使用cocos2d-x绘制非矩形精灵的帮助吗,opengl-es,cocos2d-x,Opengl Es,Cocos2d X,我在尝试绘制一些非矩形精灵时遇到问题。由于某些原因,图像在三角形条带上没有正确映射。有人能告诉我可能做错了什么吗?任何帮助都将不胜感激 以下是我得到的结果: class TestNode : public CCNode { public: CREATE_FUNC( TestNode ); virtual bool init() { CCNode::init(); m_texture = CCTextureCache::sharedTe
class TestNode : public CCNode
{
public:
CREATE_FUNC( TestNode );
virtual bool init()
{
CCNode::init();
m_texture = CCTextureCache::sharedTextureCache()->addImage( "Test/test.png" );
m_texture->retain();
setShaderProgram( CCShaderCache::sharedShaderCache()->programForKey( kCCShader_PositionTextureColor ) );
return true;
}
virtual void draw()
{
CC_NODE_DRAW_SETUP();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_PosColorTex );
ccGLBlendFunc( CC_BLEND_SRC, CC_BLEND_DST );
ccGLBindTexture2D( m_texture->getName() );
static ccVertex2F verts[4] = { {0.0f, 0.0f}, {256.0f, 0.0f}, {64.0f, 256.0f}, {192, 256.0f} };
static ccTex2F uvs[4] = { {0.0f, 1.0f}, {1.0f, 1.0f}, {0.0f, 0.0f}, {1.0f, 0.0f} };
static ccColor4B colors[4] = { {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255} };
glVertexAttribPointer( kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, verts );
glVertexAttribPointer( kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, uvs );
glVertexAttribPointer( kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, colors );
glDrawArrays( GL_TRIANGLE_STRIP, 0, (GLsizei)4 );
}
protected:
CCTexture2D* m_texture;
};
这是我正在使用的图像:
class TestNode : public CCNode
{
public:
CREATE_FUNC( TestNode );
virtual bool init()
{
CCNode::init();
m_texture = CCTextureCache::sharedTextureCache()->addImage( "Test/test.png" );
m_texture->retain();
setShaderProgram( CCShaderCache::sharedShaderCache()->programForKey( kCCShader_PositionTextureColor ) );
return true;
}
virtual void draw()
{
CC_NODE_DRAW_SETUP();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_PosColorTex );
ccGLBlendFunc( CC_BLEND_SRC, CC_BLEND_DST );
ccGLBindTexture2D( m_texture->getName() );
static ccVertex2F verts[4] = { {0.0f, 0.0f}, {256.0f, 0.0f}, {64.0f, 256.0f}, {192, 256.0f} };
static ccTex2F uvs[4] = { {0.0f, 1.0f}, {1.0f, 1.0f}, {0.0f, 0.0f}, {1.0f, 0.0f} };
static ccColor4B colors[4] = { {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255} };
glVertexAttribPointer( kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, verts );
glVertexAttribPointer( kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, uvs );
glVertexAttribPointer( kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, colors );
glDrawArrays( GL_TRIANGLE_STRIP, 0, (GLsizei)4 );
}
protected:
CCTexture2D* m_texture;
};
以下是我正在使用的代码:
class TestNode : public CCNode
{
public:
CREATE_FUNC( TestNode );
virtual bool init()
{
CCNode::init();
m_texture = CCTextureCache::sharedTextureCache()->addImage( "Test/test.png" );
m_texture->retain();
setShaderProgram( CCShaderCache::sharedShaderCache()->programForKey( kCCShader_PositionTextureColor ) );
return true;
}
virtual void draw()
{
CC_NODE_DRAW_SETUP();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_PosColorTex );
ccGLBlendFunc( CC_BLEND_SRC, CC_BLEND_DST );
ccGLBindTexture2D( m_texture->getName() );
static ccVertex2F verts[4] = { {0.0f, 0.0f}, {256.0f, 0.0f}, {64.0f, 256.0f}, {192, 256.0f} };
static ccTex2F uvs[4] = { {0.0f, 1.0f}, {1.0f, 1.0f}, {0.0f, 0.0f}, {1.0f, 0.0f} };
static ccColor4B colors[4] = { {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255} };
glVertexAttribPointer( kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, verts );
glVertexAttribPointer( kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, uvs );
glVertexAttribPointer( kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, colors );
glDrawArrays( GL_TRIANGLE_STRIP, 0, (GLsizei)4 );
}
protected:
CCTexture2D* m_texture;
};
==============
更新#1:
我发现:
我创建了一个使用texture2DProj()的新着色器。这是一个进步,但仍然不是我想要的。我不想要沿垂直轴的透视效果
新结果如下:
class TestNode : public CCNode
{
public:
CREATE_FUNC( TestNode );
virtual bool init()
{
CCNode::init();
m_texture = CCTextureCache::sharedTextureCache()->addImage( "Test/test.png" );
m_texture->retain();
setShaderProgram( CCShaderCache::sharedShaderCache()->programForKey( kCCShader_PositionTextureColor ) );
return true;
}
virtual void draw()
{
CC_NODE_DRAW_SETUP();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_PosColorTex );
ccGLBlendFunc( CC_BLEND_SRC, CC_BLEND_DST );
ccGLBindTexture2D( m_texture->getName() );
static ccVertex2F verts[4] = { {0.0f, 0.0f}, {256.0f, 0.0f}, {64.0f, 256.0f}, {192, 256.0f} };
static ccTex2F uvs[4] = { {0.0f, 1.0f}, {1.0f, 1.0f}, {0.0f, 0.0f}, {1.0f, 0.0f} };
static ccColor4B colors[4] = { {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255} };
glVertexAttribPointer( kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, verts );
glVertexAttribPointer( kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, uvs );
glVertexAttribPointer( kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, colors );
glDrawArrays( GL_TRIANGLE_STRIP, 0, (GLsizei)4 );
}
protected:
CCTexture2D* m_texture;
};