第三章 用户接口与交互式技术用户接口设计
3.1 用户接口设计
一个好的图形用户接口应具备以下特点:
易于被用户理解并接受;
易于操作、使用;
高效率、可靠性和实用性。
一致性原则:
一致性原则是指在设计系统的各个环节时,应遵从统一和简单的规则,保证不出现例外和特殊的情况,无论信息显示还是命令输入都应如此。
按用户认为最正常、最合乎逻辑的方式去做,这比保持单纯的一致性更重要。
减少记忆量:
用户接口的操作应该组织得容易理解和记忆。
重要的原则是唤醒用户的识别而不是记忆。
逻辑输入设备——拾取设备
拾取设备:拾取设备用于选择场景中即将进行变换、编辑和处理的部分。
3.2略
3.3 交互式绘图技术
基本交互绘图技术:
回显 约束 网格 引力域 橡皮筋技术 草拟技术 拖动 旋转 形变
三维交互技术:
三维图形数据的输入
三维定位
三维定向
3.4 OpenGL实现橡皮筋技术
橡皮筋技术的实现方法:
利用颜色的异或操作,对原有图形并不是擦除,而是再绘制一条同样的直线段并与原图形进行异或操作,此时原图形会从屏幕上消失;
利用双缓存技术,绘制图形时分别绘制到两个缓存,交替显示。
鼠标实现
鼠标响应函数
glutMouseFunc
鼠标移动相应函数
glutMotionFunc
glutPassiveMotionFunc
键盘实现
键盘相应函数
glutKeyboardFunc
3.5 OpenGL实现拾取操作
设置拾取缓冲区
void glSelectBuffer(GLsizei n, GLunint *buff);
进入选择模式
GLint glRenderMode(GLenum mode);
名字堆栈操作
初始化名字堆栈(glInitNames)
将一个名字压入堆栈(glPushName)
替换名字堆栈的栈顶元素(glLoadName)
将栈顶元素弹出(glPopName)
设置合适的变换过程
gluPickMatrix(xPick, yPick, widthPick, heightPick, *vp);
为每个图元分配名字并绘制
切换回渲染模式
分析选择缓冲区中的数据
3.6 OpenGL中的菜单功能
菜单注册函数
glutCreateMenu(ProcessMenu);
在菜单中加入菜单项
void glutAddMenuEntry(char *name, GLint value);
将菜单与某个鼠标按键关联
void glutAttachMenu(button);
#include <gl/glut.h>
int iPointNum = 0; //已确定点的数目
int x1=0,x2=0,y1=0,y2=0; //确定的点坐标
int winWidth = 400, winHeight = 300; //窗口的宽度和高度
void Initial(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
}
void ChangeSize(int w, int h)
{
winWidth = w; winHeight = h;
glV