前言
前面几篇的那么的多铺垫,到现在终于能直接写我们期待的按钮了,有了前面的准备应该不难写了,先来设计一下。
正题
1.首先我准备了两种按钮图片。
第一张是正常显示的图片,第二张是鼠标放上去的效果。然后在加载目录文件中添加这两个文件的名字。
2.我发现按钮类暂时不用添加任何新东西,但是还是需要创建一个新的类来代表这个是按钮,我们将按钮在之前的GameWindow类中加载。然后是一些列的加载代码。
void GameWindow::gameInit()
{
//按钮着色器
button_test.setProgram(GLSTD_TOOLS::SHADER[0]);
//按钮纹理
button_test.addAnim(GLSTD_TOOLS::TEXTURE[6]);
button_test.addAnim(GLSTD_TOOLS::TEXTURE[7]);
button_test.setCover(0);
//按钮顶点
button_test.setMesh(GLSTD_TOOLS::VERTEX[0].VAO,GLSTD_TOOLS::VERTEX[0].zoom,GLSTD_TOOLS::VERTEX[0].size);
//设置按钮位置
button_test.setPos(vec3(200,200,0));
}
还没有写按钮资源的组合文件,这里现在是测试,就直接写死资源下标了。
在添加render函数,在里面写绘制按钮的代码。
void GameWindow::Render()
{
button_test.draw();
}
这回我们的Run()函数就可以不用一直显示字符了。
void GameWindow::Run()
{
GLSTD_TOOLS::loadTexture("icon//texture_file.rfi");
GLSTD_TOOLS::loadVertex("vertex//vertex_file.rfi");
GLSTD_TOOLS::loadShader("shader//shader_file.rfi");
while(!glfwWindowShouldClose(window))
{
//渲染等函数
//捕获事件
glfwPollEvents();
//清除绘制缓冲区
glClear(GL_COLOR_BUFFER_BIT);
//渲染
Render();
glfwSwapBuffers(window);
}
}
这回可以编译一下看看了。
上次到现在我第一次编译的代码没有报错,也成功运行了,但什么都没有显示?
经过一系列的调试,我们最终看到了显示的按钮,现在来看,这还算不上一个按钮,只是一个图片而已。调试的时候用glGetError()函数,在你认为可能出错的GL函数后面或者某个代码段后调用,只要返回值不是0,就说明前面有错误。
经过几天的铺垫,我们终于看到了成果。
源码