使用opengl语言实现鼠标左键取点显示并储存,并在点击右键时将点一一相连,在点击右键前不进行连线
时间: 2023-06-25 08:08:22 浏览: 81
以下是使用OpenGL语言实现鼠标左键取点显示并储存,并在点击右键时将点一一相连,在点击右键前不进行连线的代码示例:
```c++
#include <GL/glut.h>
#include <iostream>
#include <vector>
using namespace std;
// 定义窗口大小
int windowWidth = 800, windowHeight = 600;
// 定义存储点的数组
vector<pair<int, int>> points;
// 定义当前鼠标位置
int mouseX = 0, mouseY = 0;
// 定义是否进行连线的标志
bool connectPoints = false;
// 绘制场景
void drawScene() {
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, windowWidth, 0, windowHeight);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// 绘制点
glColor3f(1.0f, 0.0f, 0.0f);
glPointSize(5.0f);
glBegin(GL_POINTS);
for (int i = 0; i < points.size(); i++) {
glVertex2i(points[i].first, points[i].second);
}
glEnd();
// 绘制连线
if (connectPoints) {
glColor3f(0.0f, 1.0f, 0.0f);
glBegin(GL_LINE_STRIP);
for (int i = 0; i < points.size(); i++) {
glVertex2i(points[i].first, points[i].second);
}
glEnd();
}
glutSwapBuffers();
}
// 鼠标事件处理函数
void mouse(int button, int state, int x, int y) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
// 左键按下,添加点
points.push_back(make_pair(x, windowHeight - y));
glutPostRedisplay();
} else if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
// 右键按下,进行连线
connectPoints = true;
glutPostRedisplay();
}
}
// 鼠标移动事件处理函数
void mouseMove(int x, int y) {
mouseX = x;
mouseY = windowHeight - y;
}
// 主函数
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("OpenGL");
glutDisplayFunc(drawScene);
glutMouseFunc(mouse);
glutPassiveMotionFunc(mouseMove);
glutMainLoop();
return 0;
}
```
这段代码实现了鼠标左键取点显示并储存,右键点击时将点一一相连,在点击右键前不进行连线。在程序运行时,可以使用鼠标左键点击窗口中的任意位置添加点,右键点击时将所有点连接起来。
阅读全文