2025年Xcode中GUIT配置及GUIT库实现OpenGL简化使用

Xcode中GUIT配置及GUIT库实现OpenGL简化使用创建新项目 命名如下 按下面步骤加入 GLUT 与 OpenGL 库 在 main c 文件下输入代码 include glut glut h void display glClear GL COLOR BUFFER BIT glBegin GL POLYGON glVertex2f glut

大家好,我是讯享网,很高兴认识大家。

创建新项目,
在这里插入图片描述
讯享网
命名如下,按下面步骤加入GLUT与OpenGL库
在这里插入图片描述
在main.c文件下输入代码:

#include <GLUT/GLUT.h> void display() { 
    glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); } int main(int argc, char ** argv) { 
    glutInit(&argc, argv);//对glut进行初始化,并处理所有的命令行参数,glutInit()应该在调用其他任何GLUT函数之前调用 glutCreateWindow("Xcode Glut Demo");//窗口名称 glutDisplayFunc(display);//是我们看到的第一个也是最为重要的时间回调函数。每当GLUT确定一个窗口的内容需要重新显示时,通过 glutDisplayFunc() 注册的那个回调函数就会被执行。因此,应该把重绘场景所需要的所有代码都放在这个显示回调函数里。 glutMainLoop();//如果程序修改了窗口的内容,有时候可能需要调用 glutPostRedisplay(), 这个函数将会指示glutMainLoop()调用已注册的显示回调函数。 } 

讯享网

运行得到如下的窗口,绘制成功:
在这里插入图片描述
GUIT介绍

1.前言

我们知道的,OpenGL包含了很多的渲染函数,这些函数的设计目的就是独立与任何窗口系统或操作系统。因此,他并没有包含打开窗口或者从键盘或鼠标读取事件的函数。遗憾的是,如果连最基本的打开窗口的功能都没有,那么编写一个完成的图形程序简直就是天方夜谭!
GLUT库正可以弥补这个缺陷。该库可以简化打开窗口、检测输入等任务。
此外,由于OpenGL函数仅限于生成简单的几何图元(点、直线、多边形),GLUT包含了一些更为复杂的三维物体,例如球体、圆环面和茶壶(当然,OpenGL实用库也包含了一些复杂三维图形绘制函数)。
正如编程指南作者说的那样,如果想学习编写完整的OpenGL应用程序,glut无法满足要求,但是glut可以作为学习OpenGL的一个非常好的起点。

2.GLUT库功能

2.1 窗口管理

GLUT通过几个函数执行初始化窗口所需要的任务。
glutInit(int *arg,char argv);对glut进行初始化,并处理所有的命令行参数。glutInit()应该在调用其他任何GLUT函数之前调用。
glutInitDisplayMode(unsigned int mode);指定了是使用RGBA模式还是颜色索引模式。另外还可以指定是使用单缓冲还是使用双缓冲窗口。如果想使用颜色索引模式,就需要把一些颜色加载到颜色映射表中,这个任务可以用glutSetColor()完成。最后,还可以使用这个函数表示窗口拥有相关连得深度、模板、多重采样和或累积缓冲区。例如,需要一个双缓冲,RGBA颜色模式以及带有一个深度缓冲区的窗口,可以调用glutDisplayMode(GLUT_GOUBLE|GLUT_RGBA|GLUT_DEPTH)。
glutInitWindowPosition(int x,int y);指定窗口左上角的屏幕位置。
glutInitWindowSize(int width,int size);指定了窗口的大小,以像素为单位。
glutInitContextVersion(int majorVersion,int minorVersion);声明了要使用OpenGL的哪个版本。
glutInitContextFlags(int flags);声明了想要使用的OpenGL渲染环境的类型。对于常规的OpenGL操作,可以在自己的程序中省略这一调用,然而,如果想要使用向前兼容的OpenGL渲染环境,需要调用这一函数。
int glutCreateWindow(char *string)创建了一个支持OpenGL渲染环境的窗口。这个函数返回一个唯一的标志符,标示了这个窗口。注意,在调用glutMainloop()函数之前,这个窗口并没有显示。
2.2 显示回调函数

glutDisplayFunc(void(*func)(void)) ;是我们看到的第一个也是最为重要的时间回调函数。每当GLUT确定一个窗口的内容需要重新显示时,通过 glutDisplayFunc() 注册的那个回调函数就会被执行。因此,应该把重绘场景所需要的所有代码都放在这个显示回调函数里。
如果程序修改了窗口的内容,有时候可能需要调用 glutPostRedisplay(), 这个函数将会指示glutMainLoop()调用已注册的显示回调函数。
2.3 运行程序

可以使用下面一些函数注册一些回调函数,当指定的时间发生时,这些函数便会被调用:
glutReshapeFunc(void(*fun)(int w,int h));表示当窗口的大小发生改变时应该采取什么行动。
glutKeyboardFunc(void(*Func)(unsigned char key,int x,int y));和glutMouseFunc(void(*func)(int button, int state,int x,int y));允许把键盘上的一个键或鼠标上的一个按钮与一个函数相关联,当这个键或按钮被按下或释放时,这个函数就会调用。
glutMotionFunc(void(*Func)(int x,int y));注册了一个函数,当按下一个鼠标按钮移动鼠标时,这个函数就会被调用。
2.5 空闲处理

GLUT包含了几个函数,用于绘制下面这些三维物体(圆锥体,二十面体,茶壶,立方体,八面体,四面体十二面体,球体,圆环面);
可以根据已定义的法线把这些物体画成线框模型或实心模型。例如,用于绘制立方体的和球体的函数:
void glutWireCube(GLdouble size);
void glutSolidCube(GLdouble size);
void glutWireSphere(GLdouble size);
void glutSolidSphere(GLdouble size);
在绘制这些模型时,他们的中心位置都处于全局坐标系统的原点。
介绍转载自:https://shenchunxu.blog.csdn.net/article/details/

小讯
上一篇 2025-02-08 13:33
下一篇 2025-02-14 11:29

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/35136.html