橡皮筋技术:
如果大家用绘图软件画过直线,你就会发现选中那些直线、椭圆、矩形画图工具后,在画布上单击拖动就能画出我们所需尺寸的对应图形,十分方便,这就是所谓的橡皮筋技术。
实现橡皮筋技术的关键函数:
当然是鼠标响应函数了,OpenGL提供了以下几种响应鼠标事件的函数:
-
鼠标按下或者松开的响应函数:
glutMouseFunc(MousePlot);
参数MousePlot是对应的回调函数,可以随便取名字,但是参数一定是下面四个:
void MousePlot(GLint button,GLint action,GLint xMouse,GLint yMouse)
每个参数可取的值:
(1)你按的是鼠标的哪个键(左中右)
button:GLUT_LEFT_BUTTON、GLUT_RIGHT_BUTTON、GLUT_MIDDLE_BUTTON
(2)对应事件(鼠标按下还是松开)
action:GLUT_DOWN/GLUT_UP
(3)鼠标的位置
xMouse到窗口左侧的距离yMouse到窗口顶部的距离,这里要注意这个yMouse,因为OpenGL的窗口是以左下角为坐标原点绘制图形的,所以yMouse是鼠标到底部的距离, 所以我们处理鼠标的y坐标时应该是用窗口高度减去yMouse来表示鼠标到顶部的距离。 -
按下鼠标移动鼠标时的响应函数
glutMotionFunc(MouseMove);
其参数仍是回调函数void MouseMove(GLint xMouse,GLint yMouse) -
未按下鼠标移动鼠标时的响应函数
glutPassiveMotionFunc(PassiveMouseMove);
其参数仍是回调函数void PassiveMouseMove(GLint xMouse,GLint yMouse)
首先我们用鼠标来实现:
实现效果:

下面代码实现的功能有:
(1)单击一点松开鼠标再移动鼠标可以任意控制直线方向,再单击可以画一条直线
(2)右键清屏
屏幕上没有画或者画了都可以单击鼠标左键重新选第一个点
#include <GL\freeglut.h>
int iPointNum=0;//已确定点的数目
int x1=0,y1=0,x2=0,y2=0;//确定的点的坐标
int Width=400,Height=300;
////////////////////////////////////////////////
//用户初始化函数
void myinit(void)
{
//your initialization code
glClearColor(1.0f,1.0f,1.0f,1.0f);
}
//窗口大小变化时的回调函数
void myReshape(int w, int h)
{
Width=w;
Height=h;
//设定视区
glViewport(0, 0, w, h);
//设定透视方式
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,Width,0.0,Height);
}
//每桢OpenGL都会调用这个函数,用户应该把显示代码放在这个函数中
void display(void)
{
//设置清除屏幕的颜色,并清除屏幕
glClear(GL_COLOR_BUFFER_BIT

本文介绍橡皮筋技术在OpenGL中的实现方法,通过响应鼠标事件,实现在画布上自由绘制直线。文章详细解释了如何使用OpenGL提供的鼠标响应函数,包括鼠标按下、松开、移动等事件,以及如何利用这些事件绘制直线。
1666

被折叠的 条评论
为什么被折叠?



