OpenGL入门案例——可移动的正方形

本文介绍了使用OpenGL创建一个可移动正方形的流程,包括特殊函数注册以响应键盘移动,以及两种实现方式:通过更改顶点数据和使用矩阵变换。重点讲解了RenderScene和SpecialKeys函数的作用,并提供了相关代码示例。
摘要由CSDN通过智能技术生成

在配置环境的时候,我们最后看是否配置成功的时候贴了一段代码,其实那个就是用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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值