OpenGL---GLUT(一)

为了用GLUT写一个C语言程序你需要有三个文件:

1glut.h—这个头文件是要包含到你的代码里的去的。一般把这个文件放到、include/gl文件夹里。

2glut.libglut32.libglut.libSGI的,glut32.libMicrosoft的。好像就是看你用的什么操作系统了。一般down的这两个文件都有)这个文件必须连接到你的程序。所以必须放在lib文件夹里。

3:glut32.dllwindows)和glut.dllSGI--这个文件必须放在system32文件夹里。

这里面用cuda来写的一个程序:

下面分别来说明以下每个函数的意思:

建立一个main函数,这个main函数将完成必须的初始化和开启事件处理循环。那么可以理解,以上都是进行一个初始化操作

所有的GLUT函数都有glut前缀并且那些完成一些初始化的函数有glutInit前缀。你首先要做的是调用函数glutInit()。

1.glutInit(int*argc,char**argv)

参数:

Argc:一个指针,指向从main()函数传递过来的没更改的argc变量。

Argv:一个指针,指向从main()函数传递过来的没更改的argv变量

2.glutInitDisplayMode(unsighed int mode)定义显示方式

参数:

Mode――可以指定下列显示模式

Mode参数是一个GLUT库里预定义的可能的布尔组合。你使用mode去指定颜色模式,数量和缓冲区类型。

指定颜色模式的预定义常量有:

1GLUT_RGBA或者GLUT_RGB。指定一个RGBA窗口,这是一个默认的颜色模式。

2GLUT_INDEX。指定颜色索引模式。

这个显示模式还允许你选择单缓冲区或双缓冲区窗口。

1GLUT_SINGLE.单缓冲区窗口。

2GLUT_BUFFER.双缓冲区窗口,这是产生流畅动画必须选的。

还可以指定更多,如果你想指定一组特殊的缓冲的话,用下面的变量:

1GLUT_ACCUM.累积缓冲区。

2GLUT_STENCIL.模板缓冲区。

3GLUT_DEPTH.深度缓冲区。参考地址https://blog.csdn.net/sz76211822/article/details/57407130

假定你想要一个有单缓冲区,深度缓冲区的RGB窗口,你用“或“(|)操作符来建立你想要的显示模式。

3. glutInitWindowPositon(int x,int y);

参数:

X: 距离屏幕左边的像素数。-1是默认值,意思就是由窗口管理程序决定窗口出现在哪里。如果不使用默认值,那你就自己设置一个值。

Y:距离屏幕上边的像素数。和X一样。

注意,参数仅仅是对窗口管理程序的一个建议。尽管你精心的设置了窗口位置,window返回的可能是不同的位置。如果你设置了,一般会得到你想要的结果。接下来我们设置窗口大小,使用函数glutInitWindowSize()。

4.glutInitWindowSize(int width,int height);

参数:

Width:窗口的宽度。

Height:窗口的高度。 

同样widthheight也只是一个参考数字。避免使用负数。

经过上面的这些步骤后,就可以调用函数glutCreateWindow()来创建窗口了。

5.glutCreateWindow(char* title);

参数:

Title:设置窗口的标题。

glutCreateWindow()的返回值是一个窗口标识符。后面你可以在GLUT里使用这个标识符

 

 

以上程序如果我们做到这里

如果你运行上述代码,你将会得到一个空的黑的控制台窗口,而没有OpenGL窗口。并且控制台窗口将很快消失。

在我们渲染一些东西前,还有两件事需要处理。第一告诉GLUT哪个函数负责渲染。我们创建一个简单的渲染的函数。下面的这个函数将会清除颜色缓冲区并画一个三角形。

void Handle_Display(void) {

          glClear(GL_COLOR_BUFFER_BIT);

          glBegin(GL_TRIANGLES);

                  glVertex3f(-0.5,-0.5,0.0);

                  glVertex3f(0.5,0.0,0.0);

                  glVertex3f(0.0,0.5,0.0);

          glEnd();

          glFlush();

 }

上面的函数的名字你可以自己取一个。现在你必须告诉GLUT使用我们上面的函数来进行渲染。这个叫寄存回调。让我们告诉GLUT这个函数renderScene应该被使用。当需要重画的时候GLUT有一个只传递一个函数名称参数的函数(以函数名为形参的函数)就会被调用。

6.glutDisplayFunc(void (*func)(void));

参数:

func: 当窗口需要被重绘是调用的函数的名称。注意使用NULL作为实参是错误的。

最后一件事是告诉GLUT我们准备进入应用程序事件处理循环。GLUT提供了一个函数让程序进入一个永不结束的循环。一直等待处理下一个事件。函数是glutMainLoop()。

7.glutMainLoop(void)

到目前为止所有的代码都列在下面。如果你运行代码,将会得到一个控制台窗口,和一个画着一个白色三角形的OpenGL窗口,出现在你设置的位置,并有着你设置的尺寸。

#include <GL/glut.h>

 void Handle_Display(void) {

          glClear(GL_COLOR_BUFFER_BIT);

          glBegin(GL_TRIANGLES);

                  glVertex3f(-0.5,-0.5,0.0);

                  glVertex3f(0.5,0.0,0.0);

                  glVertex3f(0.0,0.5,0.0);

          glEnd();

          glFlush();

 }

 

 void main(int argc, char **argv) {

          glutInit(&argc, argv);

          glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);

          glutInitWindowPosition(100,100);

          glutInitWindowSize(320,320);

          glutCreateWindow("3D Tech- GLUT Tutorial");

          glutDisplayFunc(renderScene);

          glutMainLoop();

 }

对于我的程序,其中Handle_Display函数里面并不是画一个三角形,其实更加复杂,在这里为了能够快速学习opengl会在后面把Handle_Display函数拿出来讲解。

 

 

 

  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用OpenGL绘制国旗可以通过以下步骤实现: 1. 创建OpenGL上下文和窗口。 2. 设置绘制区域和视口。 3. 设置绘制颜色和深度缓冲区。 4. 绘制国旗的红色背景。 5. 绘制五颗黄色的五角星。可以使用OpenGL的绘制多边形功能来绘制五角星,也可以使用纹理映射来贴上五角星的图案。 6. 交换前后缓冲区,显示绘制结果。 以下是一个简单的OpenGL绘制国旗的示例代码: ``` #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColor3f(1.0, 0.0, 0.0); // 设置绘制颜色为红色 glBegin(GL_QUADS); glVertex2f(-1.0, 1.0); glVertex2f(-1.0, -1.0); glVertex2f(1.0, -1.0); glVertex2f(1.0, 1.0); // 绘制国旗的红色背景 glEnd(); glColor3f(1.0, 1.0, 0.0); // 设置绘制颜色为黄色 glBegin(GL_POLYGON); glVertex2f(-0.5, 0.5); glVertex2f(-0.25, 0.25); glVertex2f(0.0, 0.5); glVertex2f(0.25, 0.25); glVertex2f(0.5, 0.5); glVertex2f(0.375, 0.25); glVertex2f(0.5, 0.0); glVertex2f(0.375, -0.25); glVertex2f(0.5, -0.5); glVertex2f(0.25, -0.375); glVertex2f(0.0, -0.5); glVertex2f(-0.25, -0.375); glVertex2f(-0.5, -0.5); glVertex2f(-0.375, -0.25); glVertex2f(-0.5, 0.0); glVertex2f(-0.375, 0.25); // 绘制五角星 glEnd(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("OpenGL Flag"); glutDisplayFunc(display); glutMainLoop(); return 0; } ``` 该示例代码使用了OpenGL的基本绘图功能,通过绘制红色背景和黄色五角星实现了绘制国旗的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值