使用opengl语言实现鼠标左键取点,并在点击右键时绘制。
时间: 2023-06-26 20:07:25 浏览: 128
opengl中鼠标拾取操作
5星 · 资源好评率100%
以下是使用OpenGL实现鼠标左键取点并在点击右键时绘制的示例代码,你可以参考一下:
```c++
#include <GL/glut.h>
#include <iostream>
using namespace std;
int width = 600, height = 600;
int point[2];
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
glVertex2i(point[0], point[1]);
glEnd();
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
point[0] = x;
point[1] = height - y; // 坐标系转换
}
else if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
{
glColor3f(1.0, 0.0, 0.0); // 设置绘制颜色为红色
glPointSize(5.0); // 设置点的大小为5像素
display(); // 调用绘制函数
}
}
void init()
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, width, 0, height);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(width, height);
glutCreateWindow("Mouse Test");
init();
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
```
在这个示例代码中,我们用到了OpenGL的以下函数:
- `glBegin(GL_POINTS)`:指定绘制点的类型为点。
- `glVertex2i(x, y)`:指定点的坐标为`(x, y)`。
- `glEnd()`:表示点的绘制已经结束。
- `glColor3f(r, g, b)`:设置绘制颜色为`(r, g, b)`。
- `glPointSize(size)`:设置点的大小为`size`像素。
在`init()`函数中,我们设置了清屏颜色为白色,并将投影矩阵设置为二维正交投影矩阵。
在`mouse()`函数中,我们首先判断鼠标事件的类型和状态。如果是左键按下事件,我们将当前的鼠标坐标`(x, y)`保存到`point`数组中。如果是右键按下事件,我们设置绘制颜色为红色,点的大小为5像素,并调用`display()`函数来绘制点。
在`main()`函数中,我们设置了窗口的大小和标题,并将绘制函数和鼠标事件处理函数注册到GLUT中,然后启动GLUT的主循环。
注意,在这个示例代码中,我们使用了固定的窗口大小和坐标系范围,因此你需要根据自己的需求修改相关参数。另外,这个示例代码只能绘制一个点,如果你需要绘制多个点,可以使用容器来保存所有点的坐标,然后在绘制函数中遍历容器并逐个绘制点。
阅读全文