分别通过按下键盘的A,D,W,S键 控制矩块左右上下移动 opengl c++
时间: 2023-09-03 12:07:29 浏览: 42
首先,你需要使用OpenGL和C++编写程序。然后,你需要使用键盘回调函数来检测按下的按键,并通过移动矩形来响应按键事件。
以下是一个简单的实现:
1. 首先,定义一个矩形类,包含矩形的位置和大小信息。
```cpp
class Rectangle {
public:
float x, y; // 矩形左下角的坐标
float width, height; // 矩形的宽度和高度
Rectangle(float _x, float _y, float _w, float _h) {
x = _x;
y = _y;
width = _w;
height = _h;
}
void draw() {
glBegin(GL_QUADS);
glVertex2f(x, y);
glVertex2f(x + width, y);
glVertex2f(x + width, y + height);
glVertex2f(x, y + height);
glEnd();
}
void move(float dx, float dy) {
x += dx;
y += dy;
}
};
```
2. 然后,定义一个全局矩形对象,并在初始化函数中初始化它。
```cpp
Rectangle rect(0.0f, 0.0f, 0.2f, 0.2f);
void init() {
// 初始化OpenGL
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
```
3. 在主循环中,使用键盘回调函数来检测按下的按键,并移动矩形。
```cpp
void keyboard(unsigned char key, int x, int y) {
switch (key) {
case 'a':
case 'A':
rect.move(-0.1f, 0.0f);
break;
case 'd':
case 'D':
rect.move(0.1f, 0.0f);
break;
case 'w':
case 'W':
rect.move(0.0f, 0.1f);
break;
case 's':
case 'S':
rect.move(0.0f, -0.1f);
break;
}
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
// 绘制矩形
glColor3f(1.0f, 1.0f, 1.0f);
rect.draw();
glFlush();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 400);
glutInitWindowPosition(100, 100);
glutCreateWindow("Moving Rectangle");
init();
glutKeyboardFunc(keyboard);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
这样,你就可以通过按下键盘上的A、D、W、S键来控制矩形的左右上下移动了。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)