FreeGlut使用指南

大部分的函数可以根据名称分辨作用:主要是几个大类

已经添加了几个新的回调,并且还没有实现Silicon Graphics硬件特有的几个回调。大多数或所有新回调都列在GLUT版本4的"GLUT.h"头文件中,但没有出现在文档中。新回调包括常规和特殊键释放回调、操纵杆回调、菜单状态回调(有一个参数,与有三个参数的菜单状态回调不同)、窗口状态回调(也有一个变量)和窗口位置回调。不支持的回调是两个Tablet回调。如果用户需要不受支持的回调,他应该联系freeglut开发团队。

添加了新的函数来呈现完整的字符串(包括回车),而不是一次呈现一个字符。更多的函数返回字符串的宽度和字体高度,位图字体以像素为单位,笔划字体以OpenGL为单位。

添加了两个功能来渲染线框和实心菱形十二面体。此外,著名的纽厄尔茶壶附带的原装茶杯和茶匙的实体和线框版本。由于这些几何函数经常用于教学目的,因此现在可以使用glutSetOption(GLUT_geometry_VISUALIZE_NORMALS,true/false)来可视化每个顶点的法向量。最后,为了支持使用着色器绘制这些对象,添加了三个函数,用户可以通过这些函数提供"坐标"、"法线"和"纹理坐标"顶点属性的地址:glutSetVertexAttribCoord3、glutSetVerexAttripNormal和glutSetVitexAttritTexCoord2。纹理坐标仅为摘要生成。

Initialization Functions

glutInit

glutInitWindowPosition

glutInitWindowSize

glutInitWindowPosition和glutInitTindowSize函数为freeglut将来创建的窗口指定所需的位置和大小。

glutInitDisplayMode

glutInitDisplayString

glutInitErrorFunc

glutInitWarningFunc

Event Processing Functions

glutMainLoop:glutMainLoop函数进入事件循环。

glutMainLoopEvent:glutMainLoopEvent函数处理freeglut事件循环中的单个迭代。

glutLeaveMainLoop:glutLeaveMainLoop函数导致freeglut停止其事件循环。

Window Functions

glutCreateWindow

glutCreateSubwindow

glutDestroyWindow

glutSetWindow

glutGetWindow

glutSetWindowTitle

glutSetIconTitle

glutReshapeWindow

glutPositionWindow

glutShowWindow

glutHideWindow

glutIconifyWindow

glutPushWindow

glutPopWindow

glutFullScreen

glutLeaveFullScreen

glutFullScreenToggle

Display Functions

glutPostRedisplay

glutPostWindowRedisplay

glutSwapBuffers

Mouse Cursor Functions

glutSetCursor

glutWarpPointer

Overlay Functions

glutEstablishOverlay

glutRemoveOverlay

glutUseLayer

glutPostOverlayRedisplay

glutPostWindowOverlayRedisplay

glutShowOverlay,

glutHideOverlay

glutCreateMenu

glutDestroyMenu

glutGetMenu

glutSetMenu

glutAddMenuEntry

glutAddSubMenu

glutChangeToMenuEntry

glutChangeToSubMenu

glutSetMenuFont

glutRemoveMenuItem

glutAttachMenu

glutDetachMenu

glutMenuDestroyFunc

Global Callback Registration Functions

回调函数设置

glutTimerFunc

glutIdleFunc

glutMenuStatusFunc

glutMenuStateFunc

Window-Specific Callback Registration Functions

回调函数设置

glutDisplayFunc

glutOverlayDisplayFunc

glutReshapeFunc

glutPositionFunc

glutCloseFunc

glutKeyboardFunc

glutSpecialFunc

glutKeyboardUpFunc

glutSpecialUpFunc

glutMotionFunc

glutPassiveMotionFunc

glutMouseFunc

glutMouseWheelFunc

glutEntryFunc

glutJoystickFunc

glutSpaceballMotionFunc

glutSpaceballRotateFunc

glutSpaceballButtonFunc

glutButtonBoxFunc

glutDialsFunc

glutTabletMotionFunc

glutTabletButtonFunc

glutVisibilityFunc

glutWindowStatusFunc

State Setting and Retrieval Functions

glutSetOption:允许您设置一些常规状态/选项变量。

glutGet:可以使用glutGet查询以下状态变量。返回的值是一个整数。

glutDeviceGet

glutGetModifiers

glutLayerGet

glutExtensionSupported

glutGetProcAddress:glutGetProcAddress返回一个指向命名GL或freeglut函数的指针。

Font Rendering Functions

freeglut支持两种类型的字体渲染:使用glBitmap函数调用渲染的位图字体和渲染为OpenGL线段序列的笔划字体。因为它们被渲染为位图,所以位图字体往往比笔划字体渲染得更快,但在缩放和渲染方面灵活性较差。位图字体字符通过调用glRasterPos*函数来定位,而笔划字体字符则使用OpenGL转换来定位字符。

需要注意的是,freeglut字体与GLUT字体相似,但并不完全相同。目前,freeglut字体不支持"`"(后引号)和"|"(竖线)字符;在它们的位置上,它会显示星号。

freeglut支持以下位图字体:

GLUT_BITMAP_8_BY_13-可变宽度字体,每个字符都适合13像素高、最多8像素宽的矩形。

GLUT_BITMAP_9_BY_15-可变宽度字体,每个字符都适合15像素高、最多9像素宽的矩形。

GLUT_BITMAP_TIMES_ROMAN_10-10点可变宽度TIMES ROMAN字体。

GLUT_BITMAP_TIMES_ROMAN_24-一种24点可变宽度的TIMES ROMAN字体。

GLUT_BITMAP_HELVETICA_10-一种10点可变宽度的HELVETICA字体。

GLUT_BITMAP_HELVETICA_12-一种12点可变宽度的HELVETICA字体。

GLUT_BITMAP_HELVETICA_18-一种18点可变宽度的HELVETICA字体。

freeglut调用glRasterPos4v将光标前移一个字符的宽度,并在适当的时候渲染回车。它不使用任何显示列表以位图字体进行渲染。

freeglut支持以下笔划字体:GLUT_STROKE_ROMAN-按比例分隔的罗马单工字体;

GLUT_STROKE_MONO_ROMAN-固定宽度的罗马单工字体

freeglut在绘制笔划字体时不使用任何显示列表。它调用glTranslatef将光标前移一个字符的宽度,并在适当的时候呈现回车。

glutBitmapCharacter:glutBitmapCharacter函数使用指定的字体在当前窗口中渲染单个位图字符。

glutBitmapString

glutBitmapWidth

glutBitmapLength

glutBitmapHeight

glutStrokeCharacter

glutStrokeString

glutStrokeWidth

glutStrokeWidthf

glutStrokeLength

glutStrokeLengthf

glutStrokeHeight

Geometric Object Rendering Functions

freeglut包含22个例程,用于生成易于识别的三维几何对象。这些例程实际上与GLUT库中包含的例程相同,并反映了OpenGL程序员指南中描述的辅助工具包中可用的功能。它们允许程序员用一行代码创建一个三维对象,该对象可用于测试OpenGL的各种功能。没有一个例程为它绘制的对象生成显示列表。这些函数生成适用于照明的法线,但除茶壶函数外,不生成纹理坐标。请注意,应启用深度测试(GL_LESS)以正确绘制非凸对象,即glutTorus、glutSierpinskiPonge、glutTeapot、glutTaicup和glutTeaspoon。

另请参阅可以使用glutSetOption设置的GLUT_GEOMETRY_VISUALIZE_NORMALS选项。最后,如果要将这些对象与着色器一起使用,请参见glutSetVertexAttribCoord3、glutSetVitexAttrifNormal和glutSetVerexAttripTexCoord2。

glutWireSphere, glutSolidSphere分别绘制线框和实体球体。

glutWireTorus, glutSolidTorus分别绘制线框和实心圆环(圆环形状)。

glutWireCone, glutSolidCone分别绘制线框和实体圆锥体。

glutWireCube, glutSolidCube分别绘制线框和实心立方体。

glutWireTetrahedron, glutSolidTetrahedron分别绘制线框和实体四面体(四边柏拉图实体)。

glutWireOctahedron, glutSolidOctahedron分别绘制线框和实体八面体(八面柏拉图体)。

glutWireDodecahedron, glutSolidDodecahedron分别绘制线框和实心十二面体(十二面柏拉图体)。

glutWireIcosahedron, glutSolidIcosahedron分别绘制线框和实体二十面体(二十面柏拉图体)。

glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron分别绘制线框和实心菱形十二面体(十二面半规则实心)。

glutWireTeapot和glutSolidTeapot函数分别绘制线框和实心茶壶,glutWireTeacup和glutSulidTeacup函数分别绘制一个线框和一个实心茶壶,glutWireTeaspoon和glutSsolidteaspoon函数分别绘制了一个线框图和一个实体茶壶。

glutSetVertexAttribCoord3, glutSetVertexAttribNormal, glutSetVertexAttribTexCoord2。

要使用着色器(OpenGL 2及更高版本)绘制形状,需要将顶点和相关的法线向量以及纹理坐标上载到着色器的顶点属性。在调用上述几何体函数之前,使用这些函数可以设置当前活动着色器中顶点属性的索引(地址),freeglut将在那里上载对象几何体。纹理坐标仅为茶壶、茶杯和茶匙生成。

Game Mode Functions

glutGameModeString:指定进入GameMode时应进入的显示模式。默认为显示器的当前显示模式,GameMode屏幕将在该显示器上打开。

glutEnterGameMode

glutLeaveGameMode

glutGameModeGet

Video Resize Functions

这些函数不是在freeglut中实现的。

glutVideoResizeGet

glutSetupVideoResizing

glutStopVideoResizing

glutVideoResize

glutVideoPan

Color Map Functions

glutSetColor

glutGetColor

glutCopyColormap

MultiTouch Functions

MultiTouch回调用于处理具有多个输入的环境,例如多点触摸屏、多点触摸板或多个鼠标。

glutMultiEntryFunc ← id, GLUT_ENTERED|GLUT_LEFT

glutMultiButtonFunc ← id, x, y, button, GLUT_DOWN|GLUT_UP

glutMultiMotionFunc ← id, x, y

glutMultiPassiveFunc ← id, x, y

这些函数的工作方式与其非多重变体类似,带有一个额外的"deviceid"参数来描述当前输入设备(鼠标或手指)。

异常:在MultiButtonFunc中,回调参数的顺序不同(x,y,button,state而不是button,state,x,y)。

目前,在X11下,非多回调变体也会在X11上为每个事件调用。

目前,在窗口下,第一个(最古老的)触摸点也控制鼠标光标,这会像往常一样触发非多重回调。

所有这些函数都具有用户数据回调函数。

限制:当前提供的游标id。在以下情况下,可能还需要获取设备id:

当鼠标指针或触摸板正在执行不相关的动作,而不是触摸屏手势的一部分(在某些平台上可能不可能)时,支持双指手势,如捏以缩放触摸屏。

避免Android上触摸屏和触摸板/游戏板之间的触摸id冲突;一种可能的解决方案是在触摸id中移动设备id。

由于这种额外的支持是以额外的复杂性为代价的,我们正在考虑是否/如何实现它。

Mobile functions

添加了这些新回调:

glutInitContextFunc←void:当上下文初始化或重新初始化时(例如,在暂停后)调用。具有用户数据回调功能。

glutAppStatusFunc←eevent:当应用程序的状态更改时调用,事件标识输入的状态。具有用户数据回调功能。可能的状态:

应用程序暂停(或停止)→GGLUT_APPSTATUS_PAUSE

应用程序暂停后返回→GGLUT_APPSTATUS_RESUME。在glutInitContextFunc回调之后调用。

支持的移动平台

安卓系统的支持在安卓页面上有进一步的描述。

BlackBerry 10/BlackBerry PlayBook

glutInitContextFunc ← void

glutAppStatusFunc ← event

Miscellaneous Functions

glutSetKeyRepeat和glutIgnoreKeyRepeat函数设置是否将重复按键(通过按住键生成)传递给键盘回调。glutSetKeyRepeat允许全局关闭键重复,而glutIgnoreKeyRepeats则在每个窗口的基础上控制这种行为。

glutSetKeyRepeat

glutIgnoreKeyRepeat

glutForceJoystickFunc

glutReportErrors

https://freeglut.sourceforge.net/docs/api.php#ColorMap

相关推荐
Padid1 天前
Unity SRP学习笔记(二)
笔记·学习·unity·游戏引擎·图形渲染·着色器
refineiks7 天前
three.js绘制宽度大于1的线,并动态新增顶点
3d·图形渲染·webgl
Winston Wood10 天前
一个简单的例子,说明Matrix类的妙用
android·前端·图像处理·图形渲染
森龙安10 天前
VulkanTutorial(8·Shader modules)
图形渲染
云渲染图科普匠13 天前
3d室内设计效果图渲染平台哪个好?瑞云快图怎么样?
3d·图形渲染·3dsmax
先知demons13 天前
antvG6如何实现节点动画、连线动画、切换节点图标
前端·javascript·vue.js·图形渲染·canva可画
3DCAT实时渲染云14 天前
边缘计算技术的优势与挑战
实时互动·边缘计算·图形渲染
大耳猫17 天前
Android OpenGL天空盒
android·kotlin·android studio·图形渲染
大耳猫19 天前
Android OpenGL触控反馈
android·kotlin·android studio·图形渲染
木市门20 天前
【GAMES101笔记速查——Lecture 16 Ray Tracing4】
图像处理·笔记·图形渲染