(二)(2)OpenGL绘制方形,方向键控制其走向

一、主要流程

在这里插入图片描述
基本图元连接方式
在这里插入图片描述

主要需实现两部分
1)正方形绘制
2)键盘方向键控制正方形走向,并处理好边缘问题

正方形绘制

  • 定义顶点要坐标轴的距离
GLfloat blockSize = 0.1f; //为在一个规范坐标下的一个相对值 [-1, 1]
  • 定义正方形4个顶点坐标
GLfloat vVerts[] = {
   
        -blockSize,-blockSize,0.0f,
        blockSize,-blockSize,0.0f,
        blockSize,blockSize,0.0f,
        -blockSize,blockSize,0.0f
};
  • 修改setupRC函数中图元的连接方式
//修改为GL_TRIANGLE_FAN ,4个顶点
    triangleBatch.Begin(GL_TRIANGLE_FAN, 4);

键位控制效果

有两种实现方式

  • 更新坐标方式
  • 矩阵方式
    手动更新坐标方式,适合顶点少的时候,一个个去更新,要是顶点较多的时候就需要一个可以批量更新的方式,通过矩阵实现多个顶点同时更新

更新坐标方式

执行流程:
在这里插入图片描述
假设正方形如下图:
在这里插入图片描述

  • 定义移动步长
GLfloat stepSize = 0.025f; //为在一个规范坐标下的一个相对值 [-1, 1]
  • 根据键位方向,更新相对移动点坐标,计算出其他几个点的坐标
  • 做碰撞处理,防止图片移到边框外边
    防碰撞处理:
    在这里插入图片描述
    具体实现代码:
void SpecialKeys(int key, int x, int y){
   
    
    GLfloat stepSize = 0.025f;
    
    GLfloat blockX = vVerts[0];
    GLfloat blockY 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用OpenGL绘制方形,需要先设置OpenGL视口和投影矩阵,然后通过顶点数组指定正方形的顶点坐标,最后使用OpenGL绘制函数进行渲染。下面是一个使用OpenGL ES 2.0绘制方形的示例代码: ```c // 顶点着色器代码 const char* vertexShaderCode = "attribute vec4 a_Position;\n" "void main() {\n" " gl_Position = a_Position;\n" "}\n"; // 片段着色器代码 const char* fragmentShaderCode = "precision mediump float;\n" "void main() {\n" " gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n" "}\n"; // 正方形的顶点坐标 const float squareVertices[] = { -0.5f, 0.5f, 0.0f, // 左上角 0.5f, 0.5f, 0.0f, // 右上角 -0.5f, -0.5f, 0.0f, // 左下角 0.5f, -0.5f, 0.0f // 右下角 }; // 加载着色器代码并编译链接着色器程序 GLuint program = createProgram(vertexShaderCode, fragmentShaderCode); // 获取顶点位置属性的位置 GLint positionLocation = glGetAttribLocation(program, "a_Position"); // 创建并绑定VBO GLuint vbo; glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); // 将顶点坐标数据复制到VBO中 glBufferData(GL_ARRAY_BUFFER, sizeof(squareVertices), squareVertices, GL_STATIC_DRAW); // 启用顶点属性并指定顶点属性指针 glEnableVertexAttribArray(positionLocation); glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, 0); // 清空屏幕并设置背景颜色 glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // 绘制方形 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); // 解绑VBO并禁用顶点属性 glBindBuffer(GL_ARRAY_BUFFER, 0); glDisableVertexAttribArray(positionLocation); ``` 其中,`createProgram`函数用于加载着色器代码并编译链接着色器程序,`glGetAttribLocation`函数用于获取顶点位置属性的位置,`glGenBuffers`和`glBindBuffer`函数用于创建并绑定VBO,`glBufferData`函数将顶点坐标数据复制到VBO中,`glEnableVertexAttribArray`和`glVertexAttribPointer`函数启用顶点属性并指定顶点属性指针,`glClearColor`和`glClear`函数用于清空屏幕并设置背景颜色,`glDrawArrays`函数用于绘制方形,`glBindBuffer`和`glDisableVertexAttribArray`函数用于解绑VBO并禁用顶点属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值