计算机图形学实验四 OpenGL的鼠标交互绘制

一、实验目的

1.掌握OpenGL的鼠标按钮响应函数。

2.掌握OpenGL的鼠标移动响应函数。

3.进一步巩固OpenGL的基本图元绘制基础。

二、实验内容

1.鼠标画草图——实现鼠标点到哪,线就画到哪。

思路:

1)在主程序注册鼠标响应和鼠标移动子函数:

glutMouseFunc(mymouse);

glutMotionFunc(mymotion);

放在display注册之后和mainloop之前。

  1. 在程序头部声明鼠标响应和鼠标移动子函数:
  2. void myMouse(int button,int state,int x,int y);
  3. void myMotion(int x,int y);
  4. 3)构造鼠标响应子函数:
  5. // 鼠标按钮响应事件
  6. void myMouse(int button,int state,int x,int y)
  7. {

//鼠标左键按下——确定起始点

//鼠标左键松开——画最后一个顶点,画线结束

}

4)构造鼠标移动子函数:

//鼠标移动时获得鼠标移动中的坐标

void myMotion(int x,int y)

{

//鼠标移动——线画到哪

}

5)修改显示函数Display():

//画直线程序框架

#include "stdafx.h"

#include <glut.h>

int ww,hh; //显示窗口宽和高

void Myinit(vold);

void Reshape (int w, int h);

void Display(void);

int APIENTRY tWinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPTSTR lpCmdLine,

int nCmdShow)

{

UNREFERENCED PARAMETER (hPrevInstance) ;

UNREFERENCED_PARAMETER(1pCmdLine) ;

char *argvl] = ("hello ". 

int argc = 2; // argv 中的字符串数

glutInit(6argc, argv) ; // 初始化 GLUT 库

glutInitWindowSize(800, 600) ; // 设置显示窗口大小

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); // 设置显示模式 (注意双缓存)glutCreateWindow(”鼠标画线小程序演示"); // 创建显示窗口

Myinit();

glutDisplayFunc(Display); // 注册显示回调函数

glutReshapeFunc(Reshape); //注册窗口改变回调函数

glutMainLoop(); //进入事件处理循环

return 0;

}

void Myinit(void)

{

glClearColor(0.0,0.0,0.0,0.0);

glLineWidth(3.0);

}

// 渲染绘制子程序

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); // 刷新颜色缓存区

g1Begin(GL_LINES);

glVertex2f(0,0);

glVertex2f(ww,hh);

glEnd();

glutSwapBuffers(); // 双缓存的刷新模式

}

void Reshape(int w, int h) // 窗口改变时自动获取显示窗口的宽w和高 h

{

glMatrixMode (GL_PROJECTION) ; // 投影矩阵模式

qlLoadIdentity(); // 矩阵堆栈清空

glViewport(0, 0, w, h); // 设置视区大小

g1uOrtho2D(0, w, 0, h); // 设置裁剪窗口大小

ww=W;

hh=h;

}

}

  1. 鼠标画线。阅读OpenGL鼠标画线程序,能够实现在绘制窗口用鼠标交互绘制若干条直线,鼠标左键首先按下确定直线的起始点,鼠标左键按下同时移动,看到画线过程,鼠标左键松开时确定直线的终点,可重复画多条直线。
  2. 思路:
  3. 1)写出画静止若干条直线程序框架,坐标用变量替代。
  4. 2)在主函数里注册鼠标按钮响应函数和鼠标移动响应函数。
  5. 3)在鼠标按钮响应子函数里给出鼠标按钮响应事件。
  6. 4)在鼠标移动响应子函数里给出鼠标移动响应事件。
  7. 5)读懂程序并分析程序,保留程序。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值