[转]opengl学习笔记

原帖地址:http://blog.sina.com.cn/s/blog_648868460100hpur.html

原帖作者:PureSky_Memory

1.glutInitDisplayMode(GLUT_SINGLE / GLUT_RGBA)

  显示模式。其中第一个参数是单缓冲窗口,第二个参数是颜色模式。

2.GLUT:OpenGL工具箱。OpenGL utility toolkit

3.glutCreateWindow("Simple") 创建OpenGL窗口,引号内内容为窗口标题栏标题

4.glutDisplayFunc(RenderScene) 显示回调,也是我们放置OpenGL渲染函数调用的

  地方。

5.glutMainLoop() 启动了GLUT框架的运行

6.glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)

  这个函数设置了一种颜色,用于清除窗口。

7.glClear(GL_COLOR_BUFFER_BIT)用当前消除颜色消除窗口。

8.glFlush()刷新绘图命令,导致所有未执行的OpenGL命令被执行

9.glutReshapeFunc(),此函数注册一个回调函数,当窗口的大小发生变化时,GLUT函数

  库就会调用这个函数。

10.Void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)

   x,y指定了窗口内部视口的左下角,width和height参数指定了视口的面积(以像

   素为单位),视口以实际屏幕坐标定义了窗口中的区域,OpenGL可以在这个区域

   中进行绘图。

11.void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble

   top,GLdouble near,GLdouble far)

   此函数用于创建正投影模式命令。

12.glMatrixMode(GL_PROJECTION)

   glLoadIdentity()

   重新设置坐标系统。

13.Void glutTimerFunc(unsighed int msecs,void (*func)(int value), int value)

   这个函数使GLUT等待msecs毫秒,然后调用func函数,可在value参数中传递一个用

   户定义的值。

14.glutSwapBuffers()刷新绘图命令,并进行交换。

15.Void glEndble (GLenum capability)

   Void glDisable(GLenum capability)

   打开或关闭某类型的状态变量。

   glEnable(GL_LIGHTING)

   glDisable(GL_LIGHTING)

   打开/关闭光照效果。

16.GLboolean glIsEnabled(GLenum capability)

  判断某状态变量是否已被打开。

17.Void glFinish(void)

   强制完成以前所有的OpenGL命令,和glFlush不同,这个函数在所有的渲染操作之前

   不会返回。

18.设置3D画布,建立可视区域的代码(x,y,z均为-100至+100)

   //修改可视区域和视口,当窗口改变大小时被调用

   Void ChangeSize (GLsizei w,GLsizei h)

   {

   GLfloat nRange=100.0f

   //防止被0所除

   if(h==0)

     h=1;

   //根据窗口大小设置视口

   glViewport(0,0,w,h)

   //重置投影矩阵堆栈

   glMatrixMode(GL_PROJECTION)

   glLoadIdentity()

   //建立裁剪区域(左、右、底、顶、近、远)

   if(w<=h)

     glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange)

   else

     glOrtho(-nRange*h/w,nRange*h/w,-nRange,nRange, -nRange,nRange)

   //重置模型视图矩阵堆栈

   glMatrixMode(GL_MODEVIEW);

   glLoadIdentity();

19.绘制点 glVertex

   如:glVertex3f(50.0f,50.0f,0.0f)

   修改点的大小 Void glPointSize(GLfloat size)

   参数指定了被绘点的近似直径(以像素计)

   glPointSize函数必须在glBegin/glEnd语句之外进行调用

   在这两个函数调用之间,并不是所有的OpenGL函数都是有效的

20.绘制图元,使用glBegin,glEnd

   如:glBegin(GL_POINT)    //选择点作为图元

          glVertex3f(0.0f,0.0f,0.0f)

       glEnd 

    又如画线,在点(0,0,0)和(50,50,50)之间画一条线

      glBegin(GL_LINES)

        glVertex3f(0.0f,0.0f,0.0f)

        glVertex3f(50.0f,50.0f,50.0f)

      glEnd()

    注意:两个顶点画一直线,若点的个数为奇数,则最后一个点被忽略

21.线带GL_LINE_STRIP绘制一条经过所有点的连续的线

   如:glBegin(GL_LINE_STRIP)

          glVertex3f(0.0f,0.0f,0.0f)

          glVertex3f(50.0f,50.0f,50.0f)

             glVertex3f(50.0f,100.0f,0.0f)

       glEnd();

22.线环(首尾两点也闭合) GL_LINE_LOOP

23.设置直线宽度:void glLineWidth(GLfloat width)

24.直线点画

   先启用:glEnable(GL_LINE_STIPPLE)

   再调用:void glLineStipple(GLint factor,GLushot pattern)

25.绘制三角形

   glBegin(GL_TRIANGLES)

      glVertex2f(0.0f,0.0f)

      glVertex2f(25.0f,25.0f)

      glVertex2f(50.0f,0.0f)

   glEnd()

26.OpenGL认为多边形具有正面逆时针方向的环绕

27.设置多边形颜色

   1)glShadeModel(GL_FLAT)

      让OpenGL用当前颜色(也就是这个多边形最后一个顶点的颜色)填充这个多边形

   2)glShadeModel(GL_SMOOTH)

      让OpenGL根据每个顶点对三角形进行渐变着色,对相邻顶点的颜色进行匀和。

28.最后画的物体会出现在以前绘制的所有物体的前面。

   解决办法:深度测试。每个像素赋予一个Z值,Z值越大,此像素越靠前。

   启用深度测试:glEnable(GL_DEPTH_TEST)

29.每当场景被渲染时,深度缓冲区必须被清除,深度缓冲区类似于颜色缓冲区,它包

   含了有关像素与观察者之间距离的信息。

    //清除窗口和深度缓冲区

   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

30.剔除、隐藏背面:glEnable(GL_CULL_FACE)

31.顺时针环绕为正面:glFrontFace(GL_CW)

   逆时针环绕为正面(缺省):glFrontFace(GL_CCW)

32.多边形模式

   外框: glPolygonMode(GL_BACK,GL_LINE)

   实心:glPolygonMode(GL_BACK,GL_FILL)

33.顶点在屏幕上显示之前,一共会发生3种类型的转换:视图、模型和投影。

       转换                用途

   视图Viewing        指定观察者或照相机的位置

   模型Modeling       在场景中移动物体

   模型视图ModelView  描述视图和模型转换的二元性

   投影Projection     对观察区域进行裁剪和缩放

   视口Viewport       一种伪转换,对窗口上的最终输出进行缩放

34.glutWireCube(10.0f)绘制立方体

35.void glTranslatef(GLfloat x,GLfloat y,GLfloat z)

   3个参数表示沿x,y,z方向移动的数量。

36.glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
   绕着由x,y,z参数所指定的那个向量执行旋转操作,angle以角度为单位,逆时针方

   向。

37.缩放:glScalef(GLfloat x,GLfloat y,GLfloat z)

38.把模型视图矩阵重置回原点;载入单位矩阵

   glMatrixMode(GL_MODELVIEW)  把当前矩阵设置为模型视图矩阵

   glLoadIdentity() 重置

39.设置绘图颜色

   glColor3f(x,y,z)  参数取值为0.0-1.0

   glColor3ub(0,255,128)=RGB(0,255,128)

40.着色:一种颜色到下一种颜色的平滑过渡(渐变)

   启用渐变着色:glShadeModel(GL_SMOOTH)

41.一个物体如果自身不会发光,它一般受到3种不同类型的光的照射:

   环境光(ambient),散射光(diffuse),镜面光(specular)

   启用光照 glEnable(GL_LIGHTING)

   设置光照模型

   GLfloat ambientLight[]={1.0f,1.0f,1.0f,1.0f}

   glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLight)

42.设置材料属性

    第一种方法:

   GLfloat gray[]={0.75f,0.75f,0.75f,1.0f}

   glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,gray)

   第一个参数指定材料属性是作用于正面、背面还是双面。

   (GL_FRONT、GL_BACK、GL_FRONT_AND_BACK)

   第二个方法:颜色追踪(推荐)

   glEnable(GL_COLOR_MATERIAL)  //启用颜色追踪

   glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE)

43.根据一个多边形上的3个点计算法线向量

   void gltGetNormalVector(GLTVector vp1,GLTVector vp2,GLTVector

   vp3,GLTVector vNormal)

 

转载于:https://www.cnblogs.com/qilipeach/p/4364652.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值