在配置环境的时候,我们最后看是否配置成功的时候贴了一段代码,其实那个就是用OpenGL绘制的一个三角形,下面我们来看一下今天要实现的正方形移动的流程图
整体和绘制三角形流程差不多,只是自定义里面的函数实现是有差距的,正方形移动多了个特殊函数的注册,这个函数就是用来实现正方形根据键盘移动相对应顶点数据的更改。
这里要特别说明一下,以上是我们代码在main函数里面的顺序,但其实我们自定义函数程序执行的时候,是先执行setupRC()函数,再执行changeSize函数,最后执行RenderScene函数。
下面是代码部分,两种方法实现,第一种是以参照点为基准更改其它顶点数据来实现,第二种是通过矩阵变换换算实现。相关逻辑注释写的很清楚,我们最主要是要理解SpecialKeys函数和RenderScene函数
- 顶点计算方式
RenderScene函数代码
//开始渲染
void RenderScene(void)
{
//清除一个或一组特定的缓冲区
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
//设置一组浮点数来图形的验色
GLfloat vRed[] = {
1.0f,0.0f,0.0f,1.0f};
//传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标第在屏幕上渲染几何图形
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
//提交着色器
triangleBatch.Draw();
//将在后台缓冲区进行渲染,然后在结束时交换到前台
glutSwapBuffers();
}
SpecialKeys函数代码
void SpecialKeys(int key, int x, int y)
{
GLfloat stepSize =0.025f;//每部移动的距离
//以一个点为参照坐标 这里是以左上角A点为参照点
GLfloat blockX = vVerts[0];
GLfloat blockY = vVerts[1];
if(key == GLUT_KEY_UP){
blockY += stepSize;
}
if (key == GLUT_KEY_DOWN) {
blockY -= stepSize;
}
if (key == GLUT_KEY_LEFT) {
blockX -= stepSize;
}
if (key == GLUT_KEY_RIGHT) {
blockX += stepSize;
}
//触碰到边界处理
//最左边
if (blockX < -1) {
blockX =