opengl简介及实例

合集下载

OpenGL简介资料

OpenGL简介资料

建模 OpenGL图形库除了提供基本的点、线、多边 形的绘制函数外,还提供了复杂的三维物体 (球、锥、多面体、茶壶等)以及复杂曲线和 曲面(例如Bezier、Nurbs等曲线或曲面)绘 制函数。
OpenGL功能(二)

变换 OpenGL图形库的变换包括基本变换和投影变 换。基本变换有平移、旋转、缩放、镜像四种 变换,投影变换有平行投影(又称正交投影) 和透视投影两种变换。
OpenGL功能(三)

颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜 色索引(Color Index)。
OpenGL功能(四)

光照和材质设置 OpenGL光有辐射光(Emitted Light)、环 境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质 是用光反射率来表示。场景(Scene)中物体 最终反映到人眼的颜色是光的红绿蓝分量与材 质红绿蓝分量的反射率相乘后形成的颜色。
OpenGL功能(五)

纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真地表 达物体表面细节。
OpenGL功能(六)

位图显示和图象增强 图象功能除了基本的拷贝和像素读写外,还提 供融合(Blending)、反走样(Antialiasing) 和雾(fog)的特殊图象效果处理。以上三条 可使被仿真物更具真实感,增强图形显示的效 果。
用OpenGL编写程序的基本模板
//主函数
int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); //设置显示模式(颜色、缓冲区等) glutCreateWindow(“A Simple Example”); //创建窗口 SetupRC(); //初始化渲染环境 glutDisplayFunc(RenderScene); //调用场景渲染函数 glutReshapeFunc(ChangeSize); //窗口发生变化 glutMainLoop(); //程序开始事件处理 }

opengl 球镜面 菲涅尔效应

opengl 球镜面 菲涅尔效应

opengl 球镜面菲涅尔效应OpenGL球镜面菲涅尔效应引言:菲涅尔效应是指光线从一种介质射向另一种介质时,由于折射和反射的存在,所产生的光的强度变化现象。

而在OpenGL中,通过对球镜面进行渲染和光照处理,可以模拟出球镜面上的菲涅尔效应。

一、OpenGL简介OpenGL是一种跨平台的图形编程接口,广泛应用于游戏开发、科学可视化、工业设计等领域。

它通过对图形硬件的底层控制,提供了强大的图形渲染功能和灵活的开发接口。

二、球镜面的渲染在OpenGL中,球镜面可以通过数学公式生成或者使用模型文件导入。

球镜面的渲染主要包括以下几个步骤:1. 创建球体模型:通过数学公式或者模型文件导入,创建球体模型。

球体模型可以根据需求进行细分,以获得更加精细的渲染效果。

2. 设置材质和纹理:球镜面的菲涅尔效应和光照密切相关,因此在渲染之前需要设置球体的材质属性和纹理贴图。

材质属性包括反射率、折射率等,纹理贴图可以用于模拟球体表面的纹理和光照变化。

3. 设置光源:光源的设置对于球镜面的菲涅尔效应非常重要。

通过设置光源的位置、颜色和强度等参数,可以模拟出球体表面因光照而产生的明暗变化。

4. 进行光照计算:OpenGL提供了多种光照模型,可以根据需要选择适合的光照模型。

光照计算主要包括环境光、漫反射光和镜面反射光的计算,其中漫反射光和镜面反射光对于球镜面的菲涅尔效应影响较大。

5. 执行渲染:将球体模型、材质属性、光源设置和光照计算应用到OpenGL渲染管线中,执行球镜面的渲染。

通过调整渲染参数和光照参数,可以获得不同的菲涅尔效应效果。

三、球镜面的菲涅尔效应球镜面的菲涅尔效应是指光线从空气等介质射向球镜面时,由于折射和反射的存在,光的强度会发生变化。

菲涅尔效应的强度变化与入射角度、反射系数和折射系数等因素有关。

在OpenGL中,可以通过调整反射系数和折射系数来模拟球镜面的菲涅尔效应。

反射系数和折射系数的取值范围为0到1,分别表示完全反射和完全折射。

OpenGL介绍

OpenGL介绍
第二步:添加头文件 在项目工作区的FileView中找到StdAfx.h,添加下面的代码: #include <GL/gl.h> #include <GL/glu.h> #include &l++中,修改视图类成员函数代码实现 OpenGL绘图的过程如下:
➢纹理映射(Texture Mapping): 将真实感的纹理粘贴在物体表面, 使物体逼真生动。纹理是数据的简单矩阵排列,数据有颜色数据 、亮度数据和alpha数据。 ➢位图和图像:提供了一系列函数来实现位图和图像的操作。位 图和图像数据均采用像素的矩阵形式表示。
➢制作动画:提供了双缓存(Double Buffering)技术来实现动画绘制。 双缓存即前台缓存和后台缓存,后台缓存用来计算场景、生成画 面,前台缓存用来显示后台缓存已经画好的画面。当画完一帧时, 交互两个缓存,这样循环交替以产生平滑动画。
➢选择和反馈:OpenGL为支持交互式应用程序设计了选择操作模 式和反馈模式。在选择模式下,则可以确定用户鼠标指定或拾取 的是哪一个物体,可以决定将把哪些图元绘入窗口的某个区域。 而反馈模式,OpenGL把即将光栅化的图元信息反馈给应用程序, 而不是用于绘图。
此外,OpenGL还提供了反走样技术,能够实现深度暗示(Depth Cue)、运动模糊(Motion Blur)、雾化(Fog)等特殊效果。
➢ 特 别 需 要 指 出 的 是 , 由 于 Microsoft 公 司 在 其 Windows95或更高版本的操作系统和Visual系列高级 语 言 开 发 环 境 中 捆 绑 了 OpenGL 标 准 , 使 得 OpenGL 在微机中得到了更为普遍的应用。
➢ OpenGL可以与各种编程语言紧密接口。各种流 行的编程语言如C、C++、Fortran、Ada、Java等 都可以调用OpenGL中的库函数。

opengl使用手册 简书

opengl使用手册 简书

opengl使用手册简书(原创实用版)目录一、OpenGL 简介二、OpenGL 函数库1.核心函数库2.矩阵操作、几何变换和投影变换函数3.交互式输入设备函数三、OpenGL 扩展库 GLEW正文一、OpenGL 简介OpenGL(Open Graphics Library)是一个跨平台的图形编程接口,用于渲染 2D 和 3D 图形。

OpenGL 提供了一套完整的图形渲染 API,可以实现各种视觉效果,如颜色、光照、阴影、纹理贴图等。

它广泛应用于游戏开发、计算机辅助设计、虚拟现实、科学可视化等领域。

二、OpenGL 函数库OpenGL 函数库包含许多可以用于绘制图形的函数。

这些函数可以根据其功能分为不同的类别,主要包括:1.核心函数库:这个库包含了 OpenGL 的基本功能,如绘制基本的几何图元(glBegin)、设置颜色(glColor3f)等。

2.矩阵操作、几何变换和投影变换函数:这个库包含了用于操作矩阵、实现几何变换和投影变换的函数。

例如,矩阵入栈(glPushMatrix)、矩阵出栈(glPopMatrix)、矩阵乘法(glMultMatrix)等。

3.交互式输入设备函数:这个库包含了用于处理交互式输入设备的函数,例如鼠标和键盘。

这些函数可以让用户在程序中进行操作,如点击、拖动、滚动等。

三、OpenGL 扩展库 GLEWGLEW(GL Extension Wrangler Library)是一个 OpenGL 扩展库,用于简化 OpenGL 扩展的加载和使用过程。

GLEW 提供了一系列的函数,用于查询、启用和禁用 OpenGL 扩展。

使用 GLEW,开发者无需关心扩展的加载和启用,只需关注功能的实现。

总之,OpenGL 是一套功能强大的图形编程接口,包含了丰富的函数库,可以实现各种复杂的图形渲染效果。

OpenGL使用

OpenGL使用

OpenGL使⽤第⼀讲:基本概念前⾔随着计算机多媒体技术、可视化技术及图形学技术的发展,我们可以使⽤计算机来精确地再现现实世界中的绚丽多彩的三维物体,并充分发挥⾃⾝的创造性思维,通过⼈机交互来模拟、改造现实世界,这就是⽬前最为时髦的虚拟现实技术。

通过这种技术,建筑⼯程师可以直接设计出美观的楼房模型;军事指挥员可以模拟战场进⾏军事推演,⽹民可以⾜不出户游览故宫博物馆等名胜古迹等。

⽽虚拟现实技术最重要的⼀部分内容就是三维图形编程。

当前,三维图形编程⼯具中最为突出的是SGI公司的OpenGL(Open Graphics Language,开放式的图形语⾔),它已经成为⼀个⼯业标准的计算机三维图形软件开发接⼝,并⼴泛应⽤于游戏开发、建筑、产品设计、医学、地球科学、流体⼒学等领域。

值得⼀提的是,虽然微软有⾃⼰的三维编程开发⼯具DirectX,但它也提供OpenGL图形标准,因此,OpenGL 可以在微机中⼴泛应⽤。

⽬前,OpenGL在国内外都掀起了热潮,但国内对这⼀领域介绍的资料并不是很多,特别是有志于在图形图像⽅⾯进⾏深⼊研究的读者朋友,常常苦于不掌握OpenGL编程接⼝技术,⽆法向纵深领域扩展。

为了开启三维图形编程这扇神秘⼤门,本讲座在结合OpenGL 有关理论知识的基础上,着重介绍Visual C++6.0开发环境中的编程实现,由于⽔平有限,本讲座可能⽆法⾯⾯俱到,存在⼀些疏漏,但相信它可以将开启"神秘⼤门"的钥匙交给读者朋友们。

⼀、OpenGL的特点及功能OpenGL是⽤于开发简捷的交互式⼆维和三维图形应⽤程序的最佳环境,任何⾼性能的图形应⽤程序,从3D动画、CAD辅助设计到可视化访真,都可以利⽤OpenGL⾼质量、⾼性能的特点。

OpenGL⾃1992年出现以来,逐渐发展完善,已成为⼀个唯⼀开放的,独⽴于应⽤平台的图形标准,⼀个典型的OpenGL应⽤程序可以在任何平台上运⾏--只需要使⽤⽬标系统的OpenGL库重新编译⼀下。

OpenGL使用

OpenGL使用

第一讲:基本概念前言随着计算机多媒体技术、可视化技术及图形学技术的发展,我们可以使用计算机来精确地再现现实世界中的绚丽多彩的三维物体,并充分发挥自身的创造性思维,通过人机交互来模拟、改造现实世界,这就是目前最为时髦的虚拟现实技术。

通过这种技术,建筑工程师可以直接设计出美观的楼房模型;军事指挥员可以模拟战场进行军事推演,网民可以足不出户游览故宫博物馆等名胜古迹等。

而虚拟现实技术最重要的一部分内容就是三维图形编程。

当前,三维图形编程工具中最为突出的是SGI公司的OpenGL(Open Graphics Language,开放式的图形语言),它已经成为一个工业标准的计算机三维图形软件开发接口,并广泛应用于游戏开发、建筑、产品设计、医学、地球科学、流体力学等领域。

值得一提的是,虽然微软有自己的三维编程开发工具DirectX,但它也提供OpenGL图形标准,因此,OpenGL 可以在微机中广泛应用。

目前,OpenGL在国内外都掀起了热潮,但国内对这一领域介绍的资料并不是很多,特别是有志于在图形图像方面进行深入研究的读者朋友,常常苦于不掌握OpenGL编程接口技术,无法向纵深领域扩展。

为了开启三维图形编程这扇神秘大门,本讲座在结合OpenGL 有关理论知识的基础上,着重介绍Visual C++6.0开发环境中的编程实现,由于水平有限,本讲座可能无法面面俱到,存在一些疏漏,但相信它可以将开启"神秘大门"的钥匙交给读者朋友们。

一、OpenGL的特点及功能OpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从3D动画、CAD辅助设计到可视化访真,都可以利用OpenGL高质量、高性能的特点。

OpenGL自1992年出现以来,逐渐发展完善,已成为一个唯一开放的,独立于应用平台的图形标准,一个典型的OpenGL应用程序可以在任何平台上运行--只需要使用目标系统的OpenGL库重新编译一下。

OpenGL编程基础

OpenGL编程基础

这两个函数来设置成有效或无效状态 。
另外可以用下列四个函数来获取某个状态变
量的值:glGetBooleanv()、glGetDoublev()、
glGetFloatv()和glGetIntegerv()。
2015-5-4
11
(3)OpenGL事件驱动
OpenGL在必要的初始化之后就进入GLUT事 件循环 初始化一般是向系统注册各类交互时间 视窗系统在GLUT配合下截取有关事件交与
2015-5-软件 gl glut 视窗系统 图形硬件 glu
预设符号常量:大写前缀_大写描述名称 GL_TRUE
2015-5-4
GL_LINE_LOOP
14
4、OpenGL中的数据类型
数据类型 GLbyte GLshort GLint,GLsizei GLfloat,GLclampf GLdouble,GLclampd GLubyte,GLboolean GLshort GLuint,GLenum, GLbitfield
(1)跨平台特性 OpenGL与硬件、窗口和操作系统是相互独立的。 为了构成一个完整功能的图形处理系统,其设计实现 共分 5 层:图形硬件、操作系统、窗口系统、 OpenGL和应用软件。 因而, OpenGL可以集成到各种标准窗口和操作 系统中。例如,操作系统包括UNIX,Windows NT, Windows 95/98, DOS等;窗口系统包括X Windows, Microsoft Windows等。
15
5、函数命名约定
OpenGL函数都遵循一个命名约定,即采用以下格式:
<库前缀><根命令><可选的参数个数><可选的参数类型>

第二讲_OpenGL技术概述(三)PPT课件

第二讲_OpenGL技术概述(三)PPT课件

(7)把“OpenGL渲染描述表”关联到“当前
的设备上下文对象”
2020/10/13
软件教研室 Software Teaching & Research Depa6rtment
OpenGL技术概述
在视图类ห้องสมุดไป่ตู้件中定制OpenGL
4、在这视图类的实现文件的OnDetroy成员函数中清 除OpenGL变量
OpenGL技术概述
一个具有完整结构的基于MFC的OpenGL程序
1、为其中的视图类增加WM_SIZE处理方法OnSize 2、在OnSize中加入窗口大小改变时对OpenGL的处理 代码 (1)设置视口的位置和大小 (2)设置矩阵模式为:投影模式 (3)把当前矩阵设置为单位矩阵 (4)设置虚拟世界的平行投影体
(1)创建设备上下文对象
(2)填充OpenGL点格式变量 (3)匹配像素格式 (4)设置像素格式 (5)如果是颜色索引模式,还要设置调色板 (6)生成OpenGL渲染描述表
(7)把“OpenGL渲染描述表”关联到“当前
的设备上下文对象”
2020/10/13
软件教研室 Software Teaching & Research Depa7rtment
OpenGL技术概述
2020/10/13
软件教研室 Software Teaching & Research Depa1rtment
OpenGL技术概述 基于MFC的OpenGL编程及运行环境的构建
建立一个单文档/视图应用程序 (注意去掉Unicode选项)
2020/10/13
软件教研室 Software Teaching & Research Depa2rtment
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C# 实例OpenGL是图形硬件的一个软件接口,是一种快速、高质量的3D图形软件。

它提供了近120个绘制点、线点多边形等3D图形的命令,可以完成绘制物体、变换、光照处理、着色、反走样、融合、雾化、位图和图像、纹理映射、动画等基本操作,通过把这一系列基本操作进行组合,可以构造更复杂的3D物体和描绘丰富多彩、千变万化的客观世界。

C#是以运行库为基础的一种编程语言,它几乎集中了所有关于软件开发和软件工程研究的最新成果,如面向对象、类型安全等,并被寄希望成为微软发布的用于企业编写基于COM+和视窗系统的程序语言中的最好的一种[2]。

与C++相比,C#的语法更加简洁,调试更加容易,且应用程序开发更加快速。

把C#和OpenGL结合起来开发3D应用程序和软件,将显著提高开发效率。

在C#中,程序间的依赖项通过符号而不是文本来控制,因而不使用头文件,而且opengl32.dll以及opengl32.lib等文件也不能像在C++中那样进行部署和引用,所以,无法直接使用OpenGL所提供的图形库。

在C#中通过调用OpenGL 动态链接库文件:csgl.dll和csgl.native.dll实现OpenGL所提供的强大的图形功能。

这2个文件可以从网页上获取。

csgl.dll中定义了4个名称空间,即CsGL,CsGL.OpenGL,CsGL.Pointers,CsGL.Util,其中,CsGL.OpenGL定义的4个类OpenGL、GL、GLU、GLUT中封装了几乎所有的OpenGL函数、用户库函数、辅助库函数和实用库函数及常量;类OpenGLControl中定义了OpenGL场景绘制函数,如场景的初始化、场景的绘制函数等;类OpenGLContext中定义了OpenGL环境控制命令,如像素格式、调色板的创建等命令。

CsGL.Util定义了键盘、鼠标事件及异常处理等。

为了能够使用这2个文件,先将这2个文件拷贝到系统文件夹%systemroot%╲system32中,然后在项目的属性页对话框中将"引用路径"设置为系统文件夹%systemroot%╲system32,这样C#就可以找到运行/调试应用程序所需要的库文件。

下面是如何在VS2005环境下实现OpneGL建模C# 实例11、新建windows应用程序项目,将csgl.dll和csgl.native.dll两个文件拷贝到.....\bin\debug\文件夹中(可在/projects/csgl/files/下载),增加引用csgl.dll,新增类xzqOpenGLClass类。

2、xzqOpenGLClass.cs文件改为:using System;using System.Collections.Generic;using System.Text;using CsGL.OpenGL;//引用CsGL.OpenGL命名空间namespace OpenGL03{class xzqOpenGLClass : OpenGLControl{public double xzq_T, xzq_eyeX, xzq_eyeY, xzq_eyeZ;public xzqOpenGLClass(){}protected override void OnSizeChanged(EventArgs e){double aspect_ratio = (double)Size.Width / (double)Size.Height;GL.glViewport(0, 0, Size.Width, Size.Height);//视口大小GL.glMatrixMode(GL.GL_PROJECTION);GL.glLoadIdentity();GL.gluPerspective(10.0f, aspect_ratio, 0.1f, 100.0f);//等价与glFrustum,创建一个视景体GL.glMatrixMode(GL.GL_MODELVIEW);GL.glLoadIdentity();}/// <summary>/// OnPaint方法处理Paint事件/// </summary>/// <param name="pevent"></param>protected override void OnPaint(System.Windows.Forms.PaintEventArgs pevent){base.OnPaint(pevent);//ToDo:可加入自己的设计代码}/************************************************************************//* OpenGL初始化*//************************************************************************/protected override void InitGLContext(){base.InitGLContext();GL.glShadeModel(GL.GL_SMOOTH);GL.glClearColor(1.0f, 1.0f, 1.0f, 0.5f);GL.glClearDepth(1.0f);GL.glEnable(GL.GL_DEPTH_TEST);GL.glDepthFunc(GL.GL_LEQUAL);GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);double aspect_ratio = (double)Size.Width / (double)Size.Height;GL.glViewport(0, 0, Size.Width, Size.Height);//视口大小GL.glMatrixMode(GL.GL_PROJECTION);GL.glLoadIdentity();GL.gluPerspective(10.0f, aspect_ratio, 0.1f, 100.0f);//等价与glFrustum,创建一个视景体GL.glMatrixMode(GL.GL_MODELVIEW);GL.glLoadIdentity();}public override void glDraw(){GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度缓存GL.glLoadIdentity();GLLight();//设置灯光GL.gluLookAt(xzq_eyeX, xzq_eyeY, xzq_eyeZ, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);//设置视图变换// GL.glColor3f(0.5f, 0.0f, 0.0f);//DrawSphere();DrawCylinder();//DrawCube();GL.glFlush(); // Flush The GL Pipeline}public void GLLight(){float[] ambient = { 1.0f, 1.0f, 0.0f, 1.0f };float[] diffuse = { 1.0f, 1.0f, 1.0f, 1.0f };float[] specular = { 1.0f, 1.0f, 1.0f, 1.0f };float[] position = { 1.0f, 1.0f, 1.0f, 0.0f };GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, ambient);GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, diffuse); GL.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, specular);GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, position); GL.glEnable(GL.GL_LIGHT0); GL.glEnable(GL.GL_LIGHTING);}public void DrawCylinder(){GLUquadric hdc0 = GL.gluNewQuadric();GL.gluSphere(hdc0, 0.2, 38, 38);GL.gluDeleteQuadric(hdc0);GLUquadric hdc = GL.gluNewQuadric();GL.gluCylinder(hdc, 0.1, 0.1, 1.0, 16, 16);GL.gluDeleteQuadric(hdc);GL.glTranslatef(0.0f, 0.0f, 1.0f);GLUquadric hdc1 = GL.gluNewQuadric();GL.gluCylinder(hdc1, 0.2, 0.0, 0.4, 16, 16);GL.gluDeleteQuadric(hdc1);GL.glTranslatef(0.0f, 0.0f, -1.0f);GL.glRotatef(-90, 1.0f, 0.0f, 0.0f);GLUquadric hdc2 = GL.gluNewQuadric();GL.gluCylinder(hdc2, 0.1, 0.1, 1.0, 16, 16);GL.gluDeleteQuadric(hdc2);GL.glTranslatef(0.0f, 0.0f, 1.0f);GLUquadric hdc3 = GL.gluNewQuadric();GL.gluCylinder(hdc3, 0.2, 0.0, 0.4, 16, 16);GL.gluDeleteQuadric(hdc3);GL.glTranslatef(0.0f, 0.0f, -1.0f);GL.glRotatef(-90, 0.0f, 1.0f, 0.0f);GLUquadric hdc4 = GL.gluNewQuadric();GL.gluCylinder(hdc4, 0.1, 0.1, 1.0, 16, 16);GL.gluDeleteQuadric(hdc4);GL.glTranslatef(0.0f, 0.0f, 1.0f);GLUquadric hdc5 = GL.gluNewQuadric();GL.gluCylinder(hdc5, 0.2, 0.0, 0.4, 16, 16);GL.gluDeleteQuadric(hdc5);GL.glTranslatef(0.0f, -1.0f, 0.0f);}}}3、Form1.cs文件改为:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace OpenGL03{public partial class Form1 : Form{xzqOpenGLClass xzqGLView = new xzqOpenGLClass();public Form1(){InitializeComponent();this.ClientSize = new System.Drawing.Size(500, 500);xzqGLView.xzq_T = -0.0f;xzqGLView.xzq_eyeX = 20.0f;xzqGLView.xzq_eyeY = 20.0f;xzqGLView.xzq_eyeZ = 20.0f;xzqGLView.Parent = this;xzqGLView.BringToFront();xzqGLView.Dock = DockStyle.Fill;this.Controls.Add(xzqGLView);}}}4、编译运行效果C# 实例2开始的步骤基本上是一样的,只说正文了哈!1using System;2using System.Windows.Forms;3using System.Drawing;4using CsGL.OpenGL;5using CsGL.Util;67namespace TestOpenGL8 {9///<summary>10///11/// ** .NET(C#) 中使用 CsGL-OpenGL .NET** 12///13/// File: FirstOpenGL.cs14///15/// Author: 周振兴 (Zxjay 飘遥)16///17/// E-Mail: tda7264@18///19/// Date: 07-05-2320///21/// Blog: 22///23///</summary>24public class FirstOpenGl : Form25 {26///<summary>27/// FirstOpenGl 的构造方法28///</summary>29public FirstOpenGl()30 {31this.Text = "First OpenGL!";32this.MaximizeBox = false;33this.FormBorderStyle = FormBorderStyle.Fixed3D;34this.Size = new Size(400, 420);35 }3637///<summary>38///初始化 Bitmap39///</summary>40///<returns> Bitmap </returns>41private Bitmap InitBitMap()42 {43 Bitmap bmp = new Bitmap(400, 400);44 Graphics g = Graphics.FromImage(bmp);45 GDIGLContext gdictxt = new GDIGLContext(g);4647 gdictxt.Create(new DisplayType(DisplayFlags.DRAW_TO_B ITMAP, true), null);48 gdictxt.Grab();4950 GLTest gl = new GLTest();51 gl.Init();52 gl.Draw();53 GL.glFinish();5455 gdictxt.Dispose();56 g.Dispose();5758return bmp;59 }6061///<summary>62///重写 Form 的 OnPaint 方法,在其上绘制位图63///</summary>64///<param name="e"></param>65protected override void OnPaint(PaintEventArgs e)66 {67 Graphics g = e.Graphics;68 g.DrawImage(InitBitMap(), new Rectangle(0, 0, 400, 40 0));69base.OnPaint(e);70 }7172///<summary>73///程序的入口74///</summary>75public static void Main()76 {77 FirstOpenGl fog = new FirstOpenGl();78 Application.Run(fog);79 }80 }818283///<summary>84///继承自 System.Object/OSLib/OpenGL/OpenGL_Extension/GLU/GL UT/GL85///</summary>86public class GLTest : GL87 {88public void Init()89 {90 glMatrixMode(GL_PROJECTION);91 gluOrtho2D(-10.0, 10.0, -10.0, 10.0);92 glClearColor(1.0f, 1.0f, 1.0f, 1.0f);93 glColor3f(1.0f, 0, 0);94 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);95 glClear(GL_COLOR_BUFFER_BIT);96 glShadeModel(GL_SMOOTH);97 }9899///<summary>100///绘制位图101///</summary>102public void Draw()103 {104const int NUMBER = 12;105const int RADIUS = 8;106double PI = 3.1415;107 PointF[] pt = new PointF[NUMBER];108109for (int i = 0; i < NUMBER; i++)110 {111 pt[i].X = (float)(RADIUS * Math.Cos(PI / NUMBER + 2 * PI * i / NUMBER));112 pt[i].Y = (float)(RADIUS * Math.Sin(PI / NUMBER + 2 * PI * i / NUMBER));113 }114115for (int i = 0; i < NUMBER; i++)116for (int j = i + 1; j < NUMBER; j++)117 {118 glBegin(GL_LINES);119 glVertex2f(pt[i].X, pt[i].Y);120 glVertex2f(pt[j].X, pt[j].Y);121 glEnd();122 }123 glFlush();124 }。

相关文档
最新文档