10 2013 档案
摘要:delete the "close all documents" item of tab menu in vs2012 Tools -> Customize -> Commands -> Context menu -> Other Context Menus | Easy MDI Document
阅读全文
摘要:GLUT是OpenGL Utility Toolkit的意思.作者Mark J. Kilgard把它设计成跨平台的库.所以不用管x-window或者微软的windows系统.Kilgard先实现了x-window版本,然后Nate Robins移植到微软的windows系统下.感谢他们俩.
阅读全文
摘要:以下代码用glutPostRedisplay函数代替了原来的空闲函数的回调.
阅读全文
摘要:直到所有源代码都使用显示函数作为空闲函数.这意味着当没有任何事件要处理的时候GLUT会调用显示函数,也就是说,它会尽可能频繁的调用显示函数.
这个一个建立交互程序的简单方法.当你的回调函数处理完键盘事件后,显示函数会自动被调用,屏幕会被重绘.
阅读全文
摘要:先回顾一下之前的回调函数定义,当窗体和子窗体创建时定义的:
空闲函数 - renderSceneAll
主窗体的显示函数 - renderScene
子窗体1的显示函数 - renderScenesw1
阅读全文
摘要:重整函数的回调需要处理两件事:修改子窗体的大小,重新计算投影每个子窗体的投影矩阵.在我们的情况中,我们不需要渲染任何几何图案到主窗体,所以我们可以跳过重新计算投影矩阵这一步.
先来介绍修改大小和重定位子窗体的函数原型.
阅读全文
摘要:利用GLUT我们可以定义子窗体,例如切分主窗体到不同区域,每个子窗体有自己的OpenGL上下文和回调函数.一个可行的程序是可以同时提供几种相同场景的视觉.
为了创建子窗体,我们可以使用glutCreateSubWindow函数,原型如下:
阅读全文
摘要:下面代码以窗体模式启动.你可以在一堆给定的设置中选择用哪个进入游戏模式,也可以返回窗体模式.命令是用位图字体显示在屏幕上.
阅读全文
摘要:根据GLUT官网的说明,GLUT的游戏模式是为开启高性能全屏渲染而设计的.有些GLUT功能像弹出菜单和子窗体会因为增强性能而关闭.本节介绍GLUT的游戏模式.关于这个主题的教程和代码是可用的.由于我找不到官方文档,也没有其它教程关于这个主题,所以我不保证这节所有的内容都是对的.
阅读全文
摘要:该代码与位图字体的代码类似.区别是用了笔划字体来显示每个雪人上的数字,然后雪人是用正交投影来显示,还有一段用位图字体显示的文本.后面包含了每秒帧数的文本不受镜头移动的影响,它一直停留在屏幕的相同位置.
字体菜单也改成了用笔划字体代替位图字体.
阅读全文
摘要:你的程序实际上跑得多快? 有时我们我们改了一个小地方却不确定效果有没有表现出来,即它们如何影响每秒显示的帧数.本节我们会来看怎么使用GLUT来计算出每秒的帧数.注意这不能看作是真是测试数据,它只是个参考值.
阅读全文
摘要:笔划字体是用线条生成的.跟位图字体相反,笔划字体看上去像三维对,例如,字体可以旋转,测量和转化.
本节我们将会使用GLUT函数来生成一些笔划字体到屏幕.基础函数是glutStrokeCharacter.原型如下:
阅读全文
摘要:一般用法下,位图字体只能以二维的形式显示信息给用户.例如,一个简单的例子,我们想显示应用程序每秒的帧数.这些信息可以驻留在同一个位置,即使用户移动镜头.除此之外,用二维的正交投影比透视投影更容易计算这些位置,因为我们可以指定用像素表示该位置.
阅读全文
摘要:以下代码使用了位图字体.它在每个雪人的上方显示一个数字.该数字可以用鼠标右键的弹出菜单来设置.
阅读全文
摘要:位图字体一般是二维字体.虽然我们会把它放到三维世界,但这些字体没有厚度,也不能渲染和测量,只能翻译.除此之外,字体会一直面向镜头,像一张广告牌一样.虽然这个可以看作是潜在的缺点,但另一方面看我们也不用考虑字体的方向问题.
本节我们会演示GLUT函数如何显示位图文本到屏幕.这里用到glutBitmapCharacter函数来写入字符.原型如下:
阅读全文
摘要:这里我们准备包含一些前面几节展示过的素材.我们准备添加菜单到应用程序,子菜单和菜单交换.
直接复制粘贴下面代码到你的项目.鼠标右键会打开菜单.按键's'和'c'会生效到菜单选项.
阅读全文
摘要:GLUT甚至可以在应用程序过程中更改整个菜单.提供了两个函数: glutSetMenu和glutGetMenu.原型如下:
void glutSetMenu(int menu);
menu - 上一个创建菜单的索引值
该函数可以让我们切换菜单,例如在应用程序上下文中切换.
阅读全文
摘要:肯定会有菜单需要被修改的状况出现.GLUT运行我们修改和删除菜单项.修改菜单项的函数原型如下:
void glutChangeToMenuEntry(int entry, char *name, int value);
entry - 菜单项的索引值,介乎于1和菜单项总数之间
name - 新菜单项的名
value - 菜单项被选中时传递给回调函数的值
阅读全文
摘要:上一节我们介绍了如何创建普通菜单和如果绑定用户选定的菜单到处理事件.下面来介绍分层子菜单.
子菜单的创建和菜单用的是同一个函数.创建后插入到菜单的函数glutAddSubMenu原型如下:
阅读全文
摘要:弹出菜单也是GLUT的一部分.虽然没有实现所有的窗体系统的弹出菜单的功能,但是GLUT也完成了一些非常有用的部分.为应用程序添加菜单,并提供一个简单的途径来交互和用键盘选择选项,避免了记住所有快捷键的麻烦.
第一步我们必须先创建一个菜单.GLUT的glutCreateMenu函数原型如下:
int glutCreateMenu(void (*func)(int value));
func - 为新创建的菜单提供菜单事件的处理函数.
阅读全文
摘要:上一节的示例中我们用键盘更改镜头的方向.这一节我们用鼠标来代替.
当用户按下鼠标左键时我们会记录鼠标的X轴位置.当鼠标移动时我们会检测新的X轴位置,并利用位移差距设置一个deltaAngle变量.该变量会加到初始角度以计算镜头当前的方向.
鼠标点击时的X轴位置也需要变量来保存.
阅读全文
摘要:上一节我们讨论了怎么用GLUT的键盘函数跟OpenGL应用程序进行交互.现在来探讨鼠标的.GLUT的鼠标接口提供了一堆可选的事件来添加鼠标交互,来监测鼠标点击和鼠标移动.
监测鼠标点击事件
和键盘事件一样,GLUT提供了响应鼠标点击事件的注册回调函数.函数名是glutMouseFunc,也是在程序的初始化语句中被调用.原型如下:
void glutMouseFunc(void (*func)(int button, int state, int x, int y));
阅读全文
摘要:本节的最后一个示例是回顾.现在我们会使用键盘的高级特性.
方法是测试当键盘按下时开始运动.因此我们打算用glutIgnoreKeyRepeat关闭重复按键的回调函数.
当一个键被按下,我们设置一个非零的变量值.一旦按钮松开,该变量会置零.
阅读全文
摘要:本节我们会介绍另外4个处理键盘事件的函数.这些函数手把手的把我们从处理自动重复输入按键的问题中释放.
第一个函数允许我们关闭键盘自动重复输入.原型如下:
阅读全文
摘要:下面来看一个更有趣的GLUT应用.本节我们会绘制一个雪人世界,并直接用按键移动镜头.向左和向右键会在XZ切面围绕Y轴旋转镜头.反之,向上和向下键会在当前方向向前向后移动镜头.
实现代码已经在适当地方标上注释.首先我们要一些全局变量来保存镜头参数.这些变量会保存了镜头位置和目标方向的向量.我们还需要保存角度.由于y是常量,所以不用保存.
阅读全文
摘要:GLUT可以让应用程序自动监测键盘输入,包括普通按键和特殊按键,例如F1和向上键.本节我们来讨论怎样监测按键事件和如何响应.
目前为止你应该已经发现,需要GLUT处理对应的事件,必须先告知GLUT把事件绑定到指定函数.之前已经介绍了重绘事件,系统空闲事件和窗体更改大小事件.
同样的,下面来介绍键盘事件.我们要告知GLUT哪个函数是响应按键处理的.
阅读全文
摘要:前面章节我们已经创建了一个白色三角形的窗体.还没到高潮,现在开始感受OpenGL动画的乐趣.我们会让三角形旋转.
首先我们要告知GLUT应用程序当处于空闲时,渲染函数要被调用.这样可促使GLUT保持调用渲染函数来启用动画效果.GLUT提供一个函数glutIdleFunc来让你注册一个回调函数用于绑定应用程序空闲时事件.
阅读全文
摘要:上一章的例子创建了两个窗体,命令行窗体和OpenGL窗体.当改变窗体大小的时候,高宽比例改变,三角形就会扭曲.得到这样的效果的原因是我们没设置正确的视觉.视觉默认是声明宽高比为1并依此来绘图.所以当比例改变的时候,视觉会发生扭曲.因此,每次比例改变的时候视觉必须要重新计算.
GLUT提供了一个回调接口给窗体大小改变事件.此外,该函数在窗体初始化创建的时候也会被调用,所以即便你初始化的窗体不是正方形看上去也不会有问题.原型如下:
阅读全文
摘要:这一节开始从main函数入手.第一步是线初始化GLUT库和创建窗体.
GLUT进入事件处理循环之后会获得程序的控制权.GLUT会等待事件(event)发生,然后检查有没有绑定的函数来处理它.
所以在GLUT进入它的事件处理循环之前,我们要先告诉GLUT事件发生时需要调用哪个函数来处理.
阅读全文
摘要:你需要什么
要用GLUT库开发程序,你可以下载最新版本3.7.6.你可以下GLUT的源代码,也可以直接下Windows二进制文件(.h/.lib/.dll)
要用GLUT库开发C/C++程序,要用到以下三个文件:
glut.h - 这是你的程序要用到的包含头文件.一般放到C:\Program Files\Microsoft Visual Studio 11.0\VC\include\gl\目录下.
阅读全文
浙公网安备 33010602011771号