C++ cocos2dx(3.2)中的自定义openGL图形
我正试图在cocos2dx上用openGL在屏幕上画一个三角形。目前,我已经对cocos的节点对象进行了子类化,我在其中进行绘图 在最新版本的cocos2dx中,我无法覆盖C++ cocos2dx(3.2)中的自定义openGL图形,c++,opengl-es,cocos2d-x,C++,Opengl Es,Cocos2d X,我正试图在cocos2dx上用openGL在屏幕上画一个三角形。目前,我已经对cocos的节点对象进行了子类化,我在其中进行绘图 在最新版本的cocos2dx中,我无法覆盖draw()函数,而是尝试覆盖draw(Renderer*Renderer,const Mat4&transform,uint32_t flags)并向呈现器添加自定义命令,如下所示 const GLfloat vertices[9] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5
draw()
函数,而是尝试覆盖draw(Renderer*Renderer,const Mat4&transform,uint32_t flags)
并向呈现器添加自定义命令,如下所示
const GLfloat vertices[9] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
void MyNodeSubclass::draw(Renderer* renderer, const Mat4 &transform, uint32_t flags){
CustomCommand *_customCommand = new CustomCommand();
_customCommand->init(_globalZOrder);
_customCommand->func = CC_CALLBACK_0(MyNodeSubclass::drawTriangle, this);
renderer->addCommand(_customCommand);
}
void MyNodeSubclass::drawTriangle(){
glEnableVertexAttribArray(GLProgram::VERTEX_ATTRIB_POSITION);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 3, GL_FLOAT, GL_FALSE,0, vertices);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
和我的加载着色器方法
void MyNodeSubclass::loadOurShaders(){
GLProgram* myShader = new GLProgram();
myShader->initWithFilenames("shader.vert", "shader.frag");
myShader->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
myShader->link();
myShader->updateUniforms();
}
我在屏幕上看不到三角形。但我可以通过使用openGL交换drawTriangle函数中的内容(而不是顶点),来绘制cocos2dx基本对象(多边形、点、线)
这里缺少什么?在名为
vVertices
的变量中包含顶点数据,该变量保存顶点坐标,但使用变量顶点
指定顶点属性。它们是一样的吗?对不起,这是一个打字错误,它的意思是“顶点”贯穿始终。此外,仔细观察,三角形似乎在屏幕上出现了很短的时间(不到一秒钟),然后消失了。知道会发生什么吗?