peng

阅读 / 问答 / 标签

mpengine.dll mpasbase.vdm这两是什么文件?

第一个是系统的文件,第二个好像是某个杀毒软件的病毒库拿个杀毒软件杀一下,没问题就不用管它了,

liαnpeng是什么汉字

中文歌词(此译文来自网络)星Meotouqidenanimomiyezu/kanaxikutemeoakelebaKouyanimukau/miqiyoli/hokanimiyelumonowadaxiAhakudakeqilu/sadameno/hoxitaqiyoSemetehisoyakani/konomio/delaseyoWalewayuku/auqiluki/hohonomamadeWalewayuku/salaba/subaluyoIkiosulebamunenonaka/kugalaxiwanakitsuzukeluSaledowalegamunewaatsuku/youmeooitsuzukelunaliAhasangzameku/namonaki/hoxidaqiyoSemeteazayakani/suonuomiwo/uwaleyoWalemoyoku/kokolunomeizulumamaniWalemoyoku/salaba/subaluyoAhaitsunoxika/dalekaga/konomiqioAhaitsunoxika/dalekaga/konomiqioWalewayoku/auqiluki/hohonomamadeWalewayoku/salabasubaluyoWalewayoku/salabasubaluyo阖起了双眼,心中尽茫然。黯然抬头望,满目照悲凉。只有一条道路通向了荒野,哪里能够找到前面的方向?啊……,散落的群星,点缀夜空指示着命运。静谧中放射出光明,蓦然照亮我的身影。我就要出发,脸上映着银色的星光。我就要启程,再见吧,命运之星!凄凉的气息,吹入我胸中。阵阵秋风来,呼啸声不停。可是我心头不灭的是热情,每时每刻追寻梦中的憧憬。啊……,璀璨的群星,纵然无名也要闪晶莹。不沉寂从来不放弃,迸出华彩点燃生命!我也要出发,照着心的指引去远行。我也要启程,再见吧,命运之星!啊……,什么时候啊,有谁也曾来到这路上?啊……,什么时候啊,有谁也会循着这去向?我就要出发,脸上映着银色的星光。我就要启程,再见吧,命运之星!我就要启程,再见吧,命运之星!

英语作文dear. lipeng暑假计划表 要求1、坚持运动锻炼身体 2、多读好书 3、去旅游

Dear Li Ping, I"m excited that the summer vacation is coming. Here is my vacation plan to show you. First I"ll do sports as usual and learn to play table tennis. It"s good for my health. Then I plan to read four great books to improve myself. After that I"ll enjoy an interesting sight for two weeks. Also, I want to be a volunteer to serve in the volleyball games in Tai"an. Of course, I would like to help my parents do some cooking, washing and so on. I think I"ll have a good time in the vacation. May you have a nice summer vacation! Wang Hui

请问武汉市离江汉区长港路最近的戴尔售后地址电话 请发我邮箱pengli33@qq.com

您好CCC-2011 湖北省 武汉市 武汉市武昌区珞喻路308号(卓刀泉高架桥西南角) 027-87864151 / 021-87872546 支持换机诊断 CCC-2012 湖北省 武汉市 武汉市洪山区珞瑜路78号长江传媒大厦2403室 027-87868911 / 027-87210567 / 027-87869055 支持换机诊断 CCC-2023 湖北省 武汉市 湖北省武汉市江岸区青年路328号元辰国际B2座13楼1304室 027-66660980

android skia与opengl es 都可以画2d图吗

从Honeycomb[3.x]版本起,Andorid便支持GPU加速,但目前Android并没有使用Skia GPU进行Webkit渲染。Skia GPU使用OpenGL进行后台加速渲染,未来也许会代替Skia。很多人觉得,即使Android成功使用了GPU加速Webkit渲染,在访问浏览如雅虎等一般的网站时,用户也感觉不到太大的差异。因为Webkit的资源大多数消耗在了Javascript脚本和布局定位上。我们觉得Webkit使用GPU加速渲染的最大意义无非是HTML5 Canvas[HTML5的动态绘图效果]。Android渲染Canvas动画实在太慢,导致Web开发者根本无法在Android上用Canvas开发网页游戏[要注意的是,目前很多手机和平板的应用程序以HTML5做为界面,并使用Webkit工作,这也是很多应用在Android系统上感觉“不流畅”的重要因素。译者注]。Android Webkit开发平台[NDK]使用Skia GPU加速测试我们对Android系统使用Skia GPU加速的Webkit进行了测试。我们手上已经有Android Webkit NDK的WAC2.0版本,我使用了某个提交版本的Skia源码,并开启Skia GPU加速将其编译进NDK中。我并没有使用Canvas加速,因为这还要增加修改GraphicsContextSkia API的工作,所以并未测试Canvas渲染的性能。

如何获取opengl细分着色器的计算结果

  细分曲面过程并不对OpenGL典型的几何图元(点、线和三角形)进行操作,而是使用一个新的图元(在OpenGL 4.0版本中新增的),称为patch。patch由流水线中所有活动的着色阶段处理。相比起来,其它图元类型仅仅被顶点、片段和几何着色器处理,而旁通细分曲面阶段。实际上,如果有任一细分曲面着色器是活跃的,那么传递任何其它几何类型会产生一个GL_INVALID_OPERATION错误。相反地,如果企图渲染一个patch而没有任何细分曲面着色器(明确地说是一个细分曲面计算着色器;我们会看到细分曲面控制着色器是可选的),那么将也会得到一个GL_INVALID_OPERATION错误。  patch仅仅是传入到OpenGL的一列顶点列表,该列表在处理期间保存它们的次序。当用细分曲面与patch进行渲染时,使用像glDrawArrays()这样的渲染命令,并指定从绑定的顶点缓存对象(VBO)将被读出的顶点的总数,然后为该绘制调用进行处理。当用其它的OpenGL图元进行渲染时,OpenGL基于在绘制调用中所指定的图元类型而隐式地知道要使用多少顶点,比如使用三个顶点来绘制一个三角形。然后,当使用一个patch时,需要告诉OpenGL顶点数组中要使用多少个顶点来组成一个patch,而这可以通过使用glPatchParameteri()进行指定。由同一个绘制调用所处理的patch,它们的尺寸(即每个patch的顶点个数)将是相同的。  void glPatchParameteri(GLenum pname, GLint value);  /**  * 使用value来指定一个patch中的顶点个数。pname必须设置为GL_PATCH_VERTICES。  * 如果value小于零或大于GL_MAX_PATCH_VERTICES,将会产一个GL_INVALID_ENUM的错误。  * 一个patch的默认顶点个数是三。如果一个patch的顶点个数小于参数value值,那么该patch将被忽略,从而不会有几何图形产生。  */  要指定一个patch,使用类型GL_PATCHES输入到任一OpenGL绘制命令。以下代码描述了发射两个patch,每个patch含有四个顶点,然后通过glDrawArrays绘制命令进行渲染。  复制代码  GLfloat vertices[][2] = {  {-0.75f, -0.25f}, {-0.25f, -0.25f}, {-0.25f, 0.25f}, {-0.75f, 0.25f},  {0.25f, -0.25f}, {0.75f, -0.25f}, {0.75f, -0.25f}, {0.75f, 0.25f}, {0.25f, 0.25f}  };  glBindVertexArray(VAO);  glBindBuffer(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);  glVertexAttribPointer(vPos, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));  glPatchParameteri(GL_PATCH_VERTICES, 4);  glDrawArrays(GL_PATCHES, 0, 8);  每个patch的顶点首先由当前绑定的顶点着色器处理,然后用于初始化数组gl_in,这个变量在细分曲面控制着色器中被隐式地声明。gl_in中的元素个数与由glPatchParameteri()所指定的patch大小相同。在一个细分曲面着色器内部,变量gl_PatchVerticesIn提供了gl_in中的元素个数(就好比使用sizeof(gl_in) / sizeof(gl_in[0])进行查询)。

用OpenGL建立三维坐标系

使用OpenGL实现三维坐标的鼠标拣选Implementation of RIP(Ray-Intersection-Penetration)3D Coordinates Mouse Selection Using OpenGL 顾 露 (武汉理工大学 计算机系 中科院智能设计与智能制造研究所 湖北武汉 430070) 摘要(Abstract): 本文提出并实现一种用于三维坐标拣选的RIP(Ray-Intersection-Penetration)方法。介绍了如何在已经渲染至窗口的三维场景中,使用鼠标或者相关设备拣选特定三维对象的方法。此方法对于正交投影或透视投影均有效,相对于OpenGL自带的选择与反馈机制,本方法无论是拣选精度还是算法实现效率均高出许多,是一种比较通用的解决方案。 关键词(Keywords) 正交投影(Ortho-Projection)、透视投影(Perspective-Projection)世界坐标系、屏幕坐标系、三维拣选、OpenGL 一、简介(Introduction) OpenGL是一种比较“纯粹”的3D图形API,一般仅用于三维图形的渲染,对于特定领域的开发者(如游戏开发者)而言,如果选择使用 OpenGL进行开发,类似碰撞检测的机制就都需要自行编写了。但是由于鼠标在图形程序中的应用非常非常之广泛(例如现在已经很少有PC游戏能完全地脱离鼠标),OpenGL在图形库的基础上添加了选择与反馈机制(Select & Feedback)来满足用户使用鼠标实时操作三维图形的需要。但由于种种原因,我们需要更为特殊的选择机制以满足特定需求,在这里我们提出了一种简单迅速的RIP(Ray-Intersection-Penetration)方法,可以满足绝大多数典型应用的需要。 二、相关研究(Related Work) 用过OpenGL选择与反馈机制的开发者,或多或少可能都会觉得它难以令人满意。大致表现在下面几个方面:一、编写程序比较繁琐。想要使用选择反馈机制就需要切换渲染模式,操作命名堆栈,计算拣选矩阵,检查选中记录,这些繁琐的步骤很容易出错,而且非常不便于调试,只会降低工作效率和热情。 二、只能做基于图元的选定。如下图(1 - a),使用GL_TRIANGLES绘制了一个三角形,三个顶点分别为 P1、P2和P3。若使用该机制,你将只能判断是否在三维场景中选中了这个三角形(用户点击处是否在P1、P2和P3的范围内),而无法判断用户是点击了这个三角形哪一部分(是左边的m区域内还是右边的n区域内),因为所绘制的P1、P2和P3本身构成的三角形就是一个基本图元,对于拣选机制而言是不可分的。当然,把这个三角形拆成两个三角形再分别进行测试也是一个可行的方案,可是看看图(1 - b),这可怎么拆呢?还有图(1 – c)呢?另外,如果n和m两个平面不共面呢?对于使用者而言,OpenGL提供的拣选机制功能的确有限。 三、降低了渲染效率。OpenGL中的选择和反馈是与普通渲染方式不同的一种特殊的渲染方式。我们使用时一般是先在帧缓存中渲染普通场景,然后进入选择模式重绘场景,此时帧缓存的内容并无变化。也就是说,为了选择某些物体,我们需要在一帧中使用不同的渲染方式将其渲染两遍。我们知道对对象进行渲染是比较耗时的操作,当场景中需要选择的对象多而杂的时候,采用这个机制是非常影响速度的。 另外在OpenGL红宝书中介绍了一种简便易行的办法:在后缓冲中使用不同的颜色重绘所有对象,每个对象用一个单色来标示其颜色,这样画好之后我们读取鼠标所在点的颜色,就能够确定我们拣选了哪个物体。这种方法有一个缺陷,当场景中需要选择的对象的数目超出一定限度时,可能会出现标识数的溢出。对于这个问题,红宝书给出的解决办法就是多次扫描。实践证明这种方法的确简便易行,但仍有不少局限性,而且做起来并不比第一种机制方便多少。限于篇幅,不再赘述。 三、具体描述(Related Work) 看过了上面两种方法,我们会发现这两种方法都不是十分的方便,而且使用者不能对其进行完全的控制,不能精确地判定鼠标定位与实际的世界空间中三维坐标的关系。那么有什么更好的办法能够更简单更精确地对其加以控制呢? 实际上此处给出的解决方案十分简单,就是一个很普通也很有用的 GLU 函数 gluUnProject()。此函数的具体用途是将一个OpenGL视区内的二维点转换为与其对应的场景中的三维坐标。转换过程如下图所示(由点P在窗口中的XY坐标得到其在三维空间中的世界坐标): 这个函数在glu.h中的原型定义如下: int APIENTRY gluUnProject ( GLdouble winx, GLdouble winy, GLdouble winz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *objx, GLdouble *objy, GLdouble *objz); 其中前三个值表示窗口坐标,中间三个分别为模型视图矩阵(Model/View Matrix),投影矩阵(Projection Matrix)和视区(ViewPort),最后三个为输出的世界坐标值。可能你会问:窗口坐标不是只有X轴和Y轴两个值么,怎么这里还有Z值?这就要从二维空间与三维空间的关系说起了。众所周知,我们通过一个放置在三维世界中的摄像机,来观察当前场景中的对象。通过使用诸如gluPerspective() 这样的OpenGL函数,我们可以设置这个摄像机所能看到的视野的大小范围。这个视野的边界所围成的几何体是一个标准的平截头体(Frustum),可以看做是金字塔状的几何体削去金字塔的上半部分后形成的一个台状物,如果还原成金字塔状,就得到了通常我们所说的视锥(View Frustum)这个视锥的锥顶就是视点(View Point)也就是摄像机所在的位置。平截头体,视锥以及视点之间的关系,如下图所示: 在上面的图中,远裁剪面ABCD和近裁剪面A"B"C"D"构成了平截头体,加上虚线部分就是视锥,顶点O就是摄像机所在的视点。我们在窗口中所能看到的东东,全部都在此平截头体内。这跟前面的窗口坐标Z值有什么关系呢?看下图: 如此图所示,点P和点P"分别在远裁剪面ABCD和近裁剪面A"B"C"D"上。我们点击屏幕上的点P,反映到视锥中,就是选中了所有的从点P到点P"的点。举个形象的例子,这就像是我们挽弓放箭,如果射出去的箭近乎笔直地飞出(假设力量非常之大近乎无穷),从挽弓的地点直至击中目标,在这条直线的轨迹上任何物体都将被一穿而过。对应这里的情况,用户单击鼠标获得屏幕上的某一点,即是指定了从视点指向屏幕深处的某一方向,也就确定了屏幕上某条从O点出发的射线(在图中即为OP)。在这里,我们称呼其为拣选射线。因此,从窗口的XY坐标,我们仅仅只能获得一条出发自O点的拣选射线,并不能得到用户想要的点在这条射线上的确切位置。这时候窗口坐标的Z值就能派上用场了。我们通过Z值,来指定我们想要的点在射线上的位置。假如用户点击了屏幕上的点(100,100)得到了这条射线OP,那么我们传入值1.0f就表示近裁剪面上的P点,而值0.0f则对应远裁剪面上的P"点。这样,我们通过引入一个窗口坐标的Z值,就能指定视锥内任意点的三维坐标。与此同时,我们还解决了前面红宝书给出的方法中存在的缺陷——同一位置上重叠物体的选择问题。解决办法是:从屏幕坐标得到射线之后,分别让重叠的物体与该射线求交,得到的交点,然后根据这些与视点的远近确定选择的对象。如此我们就不必受“仅仅只能选取屏幕中离观察者最近的物体”的限制了。这样一来,如果需要的话,我们甚至可以用代码来作一定的限定,通过判断交点与视点的距离,使得与该拣选射线相交的物体中,离视点远的对象才能被选取,这样就能够对那些暂时被其他对象遮住的物体进行选取。 至于如何求拣选射线与对象的交点,在各种图形学的书中的数学部分均有讲述,在此不再赘述。 四、例程(Sample Code Fragment) 前面讲述了RIP方法,现在我们来看如何编写代码以实现之,以及一些需要注意的问题。 由于拣选射线以线段形式存储更加便于后面的计算,况且我们可以直接得到纵跨整个平截头体的线段(即前面图中的线段PP"),故我们直接计算出这条连接远近裁剪面的线段。我们将拣选射线的线段形式称之为拣选线段。 在下面的代码前方声明有两个类Point3f和LineSegment这分别表示由三个浮点数构成的三维空间中的点,以及由两个点构成的空间中的一条线段。 应注意代码中用到了类Point3f的一个需要三个浮点参数的构造函数,以及类LineSegment的一个需要两个点参数的构造函数。 获取拣选射线的例程如下所示(使用C++语言编写): class Point3f;class LineSegment;LineSegment GetSelectionRay(int mouse_x, int mouse_y) { // 获取 Model-View、Projection 矩阵 & 获取Viewport视区 GLdouble modelview[16]; GLdouble projection[16]; GLint viewport[4]; glGetDoublev (GL_MODELVIEW_MATRIX, modelview); glGetDoublev (GL_PROJECTION_MATRIX, projection); glGetIntegerv (GL_VIEWPORT, viewport); GLdouble world_x, world_y, world_z; // 获取近裁剪面上的交点 gluUnProject( (GLdouble) mouse_x, (GLdouble) mouse_y, 0.0, modelview, projection, viewport, &world_x, &world_y, &world_z); Point3f near_point(world_x, world_y, world_z); // 获取远裁剪面上的交点 gluUnProject( (GLdouble) mouse_x, (GLdouble) mouse_y, 1.0, modelview, projection, viewport, &world_x, &world_y, &world_z); Point3f far_point(world_x, world_y, world_z); return LineSegment(near_point, far_point);} 如果你是使用Win32平台进行开发,那么应当注意传入正确的参数。因为无论是使用Win32 API 还是DirectInput 来获取鼠标坐标,得到的Y值都应取反后再传入。因为OpenGL默认的原点在视区的左下角,Y轴从左下角指向左上角,而Windows默认的原点在窗口的左上角,而Y轴方向与OpenGL相反,从左上角指向左下角。如下图所示:0XWin32 默认窗口坐标样式OpenGL 默认窗口坐标样式0XYY我们可以看到代码被注释分为了三个部分:获取当前矩阵及视区,获取近裁剪面的交点,获取远裁剪面的交点。我们通过OpenGL提供的查询函数轻松得到当前的ModelView和Projection矩阵,以及当前的Viewport(视区,也就是窗口的客户端区域,如果整个窗口区域用于OpenGL渲染的话)。获得两个裁剪面上的交点的代码基本上是一样的,唯一的不同点是我们前面曾经详细地讨论过的窗口的Z坐标。不错,这个坐标表示的就是“深浅”的概念。它的值从点P"到点P的变化是从0.0f逐渐增至1.0f。此处类似于OpenGL的深度测试机制。在得到两个交点之后,我们使用它们通过返回语句直接构建一条线段。在这里仅仅作为实例代码,故简捷清晰地直接返回线段对象,而没有通过引用参数来提高效率。此时用户可以使用这个函数来判断所选择的对象了。只需在需要的地方判断对象是否与此线段相交即可判断对象是否被选中,还可以通过进一步计算其交点位置来得到详细的交点信息。这些计算均是常见的计算机图形学与三维数学计算,比如线段与三角形求交,线段与面求交,线段与球体求交,线段与柱体或锥体求交,等等。请参考所列出的计算机图形学书籍。 五、结论(Conclusion) 在本文中,我们介绍了一种行之有效的三维坐标拾取方法,主要使用GLU库中的实用工具实现。这种方法速度快,效率高,能在不必重新绘制对象的前提下完成拣选工作。对比OpenGL自带的拣选机制来看,RIP的确在各种方面均有一定的优势。 六、参考文献(Reference) 【1】《OpenGL Programming Guide》OpenGL ARB Mason Woo, Jackie Heider, Tom Davis, Dave Shreiner 【2】《OpenGL Reference Manual》 OpenGL ARB 【3】《Computer Graphics》 Donald Heam, M. Pauline Baker 【4】《Computer Graphics using OpenGL 2nd Edition》 F.S. Hill, JR.

OpenGL之Viewport

1.1 窗口(Screen) 窗口其实就是屏幕,如下图1中红色圈中黑色背景的部分。所有的场景最终都是要被光栅化乘显示器上的图像,屏幕是所有场景(2D、3D等)的最终输出目的地。一个screen可以显示多个视口中的内容; 1.2 视口(Viewport) 视口就是窗口中用来显示图形的一块矩形区域,它可以和窗口等大,也可以比窗口大或者小,如图1中蓝色标示的绿色背景的区域。它具有两个意义:   u2022 定义了视镜体中的景物要被绘制到一张什么尺寸的画布之上;   u2022 定义了画布在屏幕的什么区域; 显然,如果 视景体的投影平面 定义的宽高比和 视口 所定义的宽高比 不相同 的话,那么将视景体中的物体绘制到画布上的时候会进行 拉伸或者压缩 ;而当视景体投影平面的宽高比和视口所定义的宽高比一致的时候,图像将会不进行任何缩放绘制到视口所定义的画布之上。 在实际应用中,一个窗口中会绘制多个3D场景,这个通过定义多个视口,绘制多个图像,然后 贴在 屏幕的不同区域即可。比如图中黄色笔圈中的区域,在画布中定于两个不同的viewport1 (0,0;w/2,y)和 viewport2 (0,w/2;w/2,y); 1.4 视镜体(View Frustum) 视景体(View Volume)定义了我们能够通过虚拟的3D摄像机所能看到的场景。在一个3D场景中站立中,需要摄像机的 摆放位置 和 视野 来定义我们所能够看到的东西,而这个视野就是通过视景体来定义的。在3D中,一般可以通过以下两种方式来定义视景体: 通过前面的介绍,我们大致的了解了这三个不同东西的概念。从中我们可以知道,通过定义投影矩阵,我们实际上是在虚拟的3D空间中,创建了一个视野,也就是视景体。在接着,我们通过定义视口,来描述视景体中的内容如何映射到一个虚拟的画布之上,并且这个画布最终将显示在屏幕上的什么位置。当所有的这些都设置完毕,我们绘制完毕场景之后,就能够通过硬件在我们的显示器屏幕上看到最终的画面。更理论的表述就是,通过定义投影矩阵,将3D场景投影到一个投影平面之上。通过定义视口,我们将投影平面上的内容映射到这个视口中去,并且填满它,同时根据定义视口是给定的屏幕坐标的位置,将这个视口中的图像映射到窗口的指定位置之上,最终我们就看到了图像。 glViewport是OpenGL中的一个函数。计算机图形学中,在屏幕上打开窗口的任务是由窗口系统,而不是OpenGL负责的。glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。

OpenGL 2D纹理单元&纹理翻转解决策略

首先,思考我们是如何将纹理对象传递给片元着色器? GLSL 中提供一个共纹理对象使用的内建数据类型,叫做 采样器(sampler) . 例如 , sampler1D , sampler2D , sampler3D 表示不同维度的纹理类型. 那么我们在片元着色器是如何获取一个纹理的? 我们简单声明一个纹理对象. uniform sampler2D ,将一个纹理添加片元着色器中. 我们可以使用 GLSL 内建的 texture 函数来采样纹理的颜色值. 你可能会奇怪为什么 sampler2D 变量是个 uniform ,我们却不用 glUniform 给它赋值. 使用 glUniform1i ,我们可以给纹理采样器分配一个位置值,这样的话我们能够在一个片段着色器中设置多个纹理。 一个纹理的位置值通常称为一个纹理单元 (Texture Unit) 。一个纹理的默认纹理单元是0,它是默认的激活纹理单元. 纹理单元的主要目的是让我们在着色器中可以使用多于一个的纹理。 通过把纹理单元赋值给采样器,我们可以一次绑定多个纹理,只要我们首先激活对应的纹理单元。就像 glBindTexture 一样,我们可以使用 glActiveTexture 激活纹理单元,传入我们需要使用的纹理单元: 激活纹理单元之后,接下来的 glBindTexture 函数调用会绑定这个纹理到当前激活的纹理单元,纹理单元 GL_TEXTURE0 默认总是被激活. 最终输出颜色是两个纹理的结合。 GLSL 内建的 mix 函数需要接受两个值作为参数,并对它们根据第三个参数进行线性插值。 如果第三个值是0.0,它会返回第一个输入;如果是1.0,会返回第二个输入值。输入0.2则会返回80%的第一个输入颜色和20%的第二个输入颜色,即返回两个纹理的混合色。 为了使用第二个纹理(以及第一个),我们必须改变一点渲染流程,先绑定两个纹理到对应的纹理单元,然后定义哪个 uniform 采样器对应哪个纹理单元: 注意, 我们使用 glUniform1i 设置 uniform 采样器的位置值,或者说 纹理单元 。通过 glUniform1i 的设置,我们保证每个 uniform 采样器对应着正确的纹理单元 OpenGL 要求 y 轴 0.0 坐标是在图片的底部的,但是图片的 y 轴 0.0 坐标通常在顶部

penguingame为什么叫兔子舞

这首歌曲原本叫PENGUIN S GAME ,企鹅舞,后来被一些片商拿过来改了名字,发行了一系列的VCD,CD,磁带的制品。

什么是OPENG?

写错了吧,OpenGLOpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”。虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。OpenGL是个与.硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是3D图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS等3D图形设计软件制作的DFX和3DS模型文件转换成OpenGL的顶点数组。在OpenGL的基础上还有Open Inventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用。其中,Open Inventor应用最为广泛。该软件是基于OpenGL面向对象的工具包,提供创建交互式3D图形应用程序的对象和方法,提供了预定义的对象和用于交互的事件处理模块,创建和编辑3D场景的高级应用程序单元,有打印对象和用其它图形格式交换数据的能力。OpenGL的发展一直处于一种较为迟缓的态势,每次版本的提高新增的技术很少,大多只是对其中部分做出修改和完善。1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。1995年OpenGL的1.1版本面市,该版本比1.0的性能有许多提高,并加入了一些新的功能。其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,该语言是“OpenGL 2.0”的底核,用于着色对象、顶点着色以及片断着色技术的扩展功能。OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。2.0版本首先要做的是与旧版本之间的完整兼容性,同时在顶点与像素及内存管理上与DirectX共同合作以维持均势。OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全兼容的新功能所组成(如图一)。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的扩展指令集做一次彻底的精简。此外,硬件可编程能力的实现也提供了一个更好的方法以整合现有的扩展指令。目前,随着DirectX的不断发展和完善,OpenGL的优势逐渐丧失,至今虽然已有3Dlabs提倡开发的2.0版本面世,在其中加入了很多类似于DirectX中可编程单元的设计,但厂商的用户的认知程度并不高,未来的OpenGL发展前景迷茫。Open GL现状Open GL仍然是唯一能够取代微软对3D图形技术的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已经不再以任何让微软不悦的方式推广Open GL,因而它存在较高的风险。游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用Open GL。因此,硬件开发商正在设法加强对它的支持。Direct3D目前还不能支持高端的图形设备和专业应用; Open GL在这些领域占据着统治地位。最后,开放源码社区(尤其是Mesa项目)一直致力于为任何类型的计算机(无论它们是否使用微软的操作系统)提供Open GL支持。高级功能 OpenGL被设计为只有输出的,所以它只提供渲染功能。核心API没有窗口系统、音频、打印、键盘/鼠标或其它输入设备的概念。虽然这一开始看起来像是一种限制,但它允许进行渲染的代码完全独立于他运行的操作系统,允许跨平台开发。然而,有些整合于原生窗口系统的东西需要允许和宿主系统交互。这通过下列附加API实现: * GLX - X11(包括透明的网络) * WGL - Microsoft Windows 另外,GLUT库能够以可移植的方式提供基本的窗口功能

openGL是什么?DX?HDTV?

OPENGLDirectX是微软特有的,可以看为一种特殊驱动HDTV(连接电视机用的)(OPENGL和DirectX,一般在安装谷歌地球时,启动模式有这二种区分)

如何查看自己电脑支持OpenGL core版本

升级下驱动试试,我记得opengl好像都是在驱动里面的,但这集成显卡能不能找到驱动我觉得不太一定。

如何将YUV用opengl输出到屏幕上

为了保证你的程序可以输出汉字,要先用MultByteToWideChar函数把char转换到wchar_t字型里,要记得在最后面加上"".(先用malloc申请一个够长的wchar_t型的内存段,在计算长度的时候加上这个,因为一个汉字在char要两个单位,但是wchar_t就一个单位,这段代码通过检测字符的意义来判断这个字节的数据是不是独立的一个字符,以此来精确的计算空间.计算好的空间加1后才是要用的空间,因为后面要加一个""for(i=0;text[i]!=""&&i<length;++i) { if(IsDBCSLeadByte(text[i])) ++i; ++lan; })然后glGenList生成一个显示列表备用.接下来wglUseFontBitmapsW把字符的显示列表画出来保存在刚生成的显示列表里.这样就OK了,然后再选好位置glCallList 就画出来了.由于有的时候情况会比较复杂,记得管理好内存,不要造成泄露,记得及时删除用过的显示列表,因为字的转换比较快,所以没必要现写现转,但是为了避免转字的代码比较麻烦,最好写个函数用来在指定的位置上写字.在转子的过程中还要用到wgl的函数HDC描述句柄等,所以要包含头文件gdi.h连接gdi32.lib ,为了谨慎起见,最好在每次转换的时候检查一下HDC的设备像素格式,以免出了错却不知道是什么问题(有些情况HDC是不支持OpenGL的)这些函数的参数用法都可以在网上找到,在这里讲出来会非常麻烦.

OpenGL里面如何显示汉字?

wglUseFontOutlines 要求头文件 wingdi.h库 opengl32.lib

如何在mfc中配置opengl

1:新建一个MFC的工程,单文档的工程。2:工程建好之后,可以先编译运行一下。下面就是要把View的窗口初始化为OpenGL的编程环境。当然以下所有的操作都是在View类中进行的。先在Project->Settings->Link中,加上opengl32.libglu32.lib glut.lib glaux.lib,然后在View.h的类定义中加上如下引用。#include <glgl.h>#include <glglu.h> #include <glglaux.h>3:首先要让窗口支持OpenGL,那就必须要对PIXELFORMATDESCRIPTOR这个结构有所了解,先在View类中新建一个函数SetupPixFormat(CDC*pDC),类型:看下面的函数就知道为BOOL,(方法:在classview中,找到**view类,鼠标右击,添加函数)公有私有无所谓,如下:BOOL CTestGLInitialView::SetupPixFormat(CDC *pDC) //我建立的工程名叫TestGLInitial{static PIXELFORMATDESCRIPTOR pfd = //定义像素格式{ sizeof(PIXELFORMATDESCRIPTOR), // 上述格式描述符的大小 1, // 版本号 PFD_DRAW_TO_WINDOW | // 格式支持窗口 PFD_SUPPORT_OPENGL | // 格式必须支持OpenGL PFD_DOUBLEBUFFER, // 必须支持双缓冲 PFD_TYPE_RGBA, // 申请 RGBA 格式 24, // 24位色彩深度,即1.67千万的真彩色 0, 0, 0, 0, 0, 0, // 忽略的色彩位 0, // 无Alpha缓存 0, // 忽略Shift Bit 0, // 无累加缓存 0, 0, 0, 0, // 忽略聚集位 32, // 32位 Z-缓存 (深度缓存) 0, // 无蒙板缓存 0, // 无辅助缓存 PFD_MAIN_PLANE, // 主绘图层 0, // Reserved 0, 0, 0 // 忽略层遮罩};int nIndex = ChoosePixelFormat(pDC->GetSafeHdc(), &pfd); //选择刚刚定义的像素格式if( nIndex == 0 ) return FALSE;return SetPixelFormat(pDC->GetSafeHdc(), nIndex, &pfd); //设置像素格式}这个函数的主要目的就是设置窗口的像素格式,使之支持OpenGL,明白这点就行了。在创建窗口的时候,调用这个函数。5:刚刚那个函数是用来在创建窗口是调用的,在创建窗口时,还需要对OpenGL的环境做一些初始化,再定义一个函数InitialGL(),(方法:在classview中,找到**view类,鼠标右击,添加函数)公有私有也无所谓,反正是自己调用的,如下:BOOL CTestGLInitialView::InitialGL(){glShadeModel(GL_SMOOTH); // 启用阴影平滑glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 黑色背景glClearDepth(1.0f); // 设置深度缓存glEnable(GL_DEPTH_TEST); // 启用深度测试glDepthFunc(GL_LEQUAL); // 所作深度测试的类型glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 告诉系统对透视进行修正return TRUE; // 初始化 OK}这里的代码我都是抄的NeHe教程上面的代码。6:现在可以捕获WM_CREATE消息了(方法:view-->classvizard -->messagesmaps:classname选**view,找到WM_CREATE,添加函数,编辑代码)。但是,还要先定义一个CClientDC*的成员,(方法:在classview中,找到**view类,鼠标右击,添加函数成员变量。类型:CClientDC*,名字:m_pDC)这个成员指向View窗口自己,是用来传递给SetupPixFormat(CDC*pDC)函数的,没别的意思。现在,来捕获WM_CREATE消息(),写上如下代码:int CTestGLInitialView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1) return -1;// TODO: Add your specialized creation code herem_pDC = new CClientDC(this);SetupPixFormat(m_pDC);HGLRC hrc = wglCreateContext(m_pDC->GetSafeHdc());wglMakeCurrent(m_pDC->GetSafeHdc(), hrc);InitialGL();return 0;}当然,当窗口关闭的时候,还应该要释放一些资源。捕获WM_DESTROY消息,(方法:view-->classvizard-->messages maps:classname 选**view,找到WM_DESTROY,添加函数,编辑代码)写下如下代码:void CTestGLInitialView::OnDestroy(){CView::OnDestroy();// TODO: Add your message handler code hereHGLRC hrc = wglGetCurrentContext();wglMakeCurrent(NULL, 0);wglDeleteContext(hrc);delete m_pDC;}现在可以编译一下了,没有错误。7:现在,OpenGL的环境已经初始化差不多了。可以开始做图了,先定义一个作图的函数DrawScene(),写上如下的代码:BOOL CTestGLInitialView::DrawScene(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存glLoadIdentity(); // 重置当前的模型观察矩阵SwapBuffers(m_pDC->GetSafeHdc()); // 交换缓冲区return TRUE;}然后,要在OnDraw中,调用这个函数:void CTestGLInitialView::OnDraw(CDC* pDC){CTestGLInitialDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereDrawScene();}8:运行一下,黑色的背景出来了。9:这时,可以修改DrawScene()这个作图函数,作图。画出NeHe第3课的那个三角形和正方形来。写代码如下:BOOL CTestGLInitialView::DrawScene(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存glLoadIdentity(); // 重置当前的模型观察矩阵glTranslatef(-1.5f,0.0f,-6.0f); // 左移 1.5 单位,并移入屏幕 6.0glBegin(GL_TRIANGLES); // 绘制三角形glColor3f(1.0f, 0.0f, 0.0f);glVertex3f( 0.0f, 1.0f, 0.0f); // 上顶点glColor3f(0.0f, 1.0f, 0.0f);glVertex3f(-1.0f,-1.0f, 0.0f); // 左下glColor3f(0.0f, 0.0f, 1.0f);glVertex3f( 1.0f,-1.0f, 0.0f); // 右下glEnd(); // 三角形绘制结束glTranslatef(3.0f,0.0f,0.0f); // 右移3单位glColor3f(0.0f, 0.0f, 1.0f);glBegin(GL_QUADS); // 绘制正方形glVertex3f(-1.0f, 1.0f, 0.0f); // 左上glVertex3f( 1.0f, 1.0f, 0.0f); // 右上glVertex3f( 1.0f,-1.0f, 0.0f); // 左下glVertex3f(-1.0f,-1.0f, 0.0f); // 右下 glEnd();SwapBuffers(m_pDC->GetSafeHdc()); // 交换缓冲区return TRUE;}运行一下,发现图形没有出现,这个怎么回事呢。原来是因为还没有定义投影方式和视口。即用正交投影还是透视投影。定义投影,还要捕获WM_SIZE消息。写如下代码:void CTestGLInitialView::OnSize(UINT nType, int cx, int cy){CView::OnSize(nType, cx, cy);// TODO: Add your message handler code hereif (0 == cy) // 防止被零除{ cy = 1; // 将Height设为1}glViewport(0, 0, cx, cy); // 重置当前的视口glMatrixMode(GL_PROJECTION); // 选择投影矩阵glLoadIdentity(); // 重置投影矩阵// 设置视口的大小gluPerspective(45.0f,(GLfloat)cx/(GLfloat)cy,0.1f,100.0f);glMatrixMode(GL_MODELVIEW); // 选择模型观察矩阵glLoadIdentity(); // 重置模型观察矩阵}再运行一下,图形已经出来了。以后,就可以在DrawScene()写任何画图的代码了,当窗口重绘的时候,都可以自动适应。如果要做一段可以运动的3D图画,可以再捕获WM_TIMER消息,通过在OnCreate的时候定义一个时钟,再配合一些变量,就可以做简单的动画了

在OpenGL编程中怎样解决屏幕闪烁的问题?

双缓冲还闪屏?你在Render里面用到了new或malloc之类的函数了么?或者是不断地打开一些图片资源之类的

opengl 在屏幕上输出 文字

这个问题的确很难,我当初查了无数资料,有这么几个函数,和一个顺序,你看一下为了保证你的程序可以输出汉字,要先用MultByteToWideChar函数把char转换到wchar_t字型里,要记得在最后面加上"".(先用malloc申请一个够长的wchar_t型的内存段,在计算长度的时候加上这个,因为一个汉字在char要两个单位,但是wchar_t就一个单位,这段代码通过检测字符的意义来判断这个字节的数据是不是独立的一个字符,以此来精确的计算空间.计算好的空间加1后才是要用的空间,因为后面要加一个""for(i=0;text[i]!=""&&i<length;++i) { if(IsDBCSLeadByte(text[i])) ++i; ++lan; })然后glGenList生成一个显示列表备用.接下来wglUseFontBitmapsW把字符的显示列表画出来保存在刚生成的显示列表里.这样就OK了,然后再选好位置glCallList 就画出来了.由于有的时候情况会比较复杂,记得管理好内存,不要造成泄露,记得及时删除用过的显示列表,因为字的转换比较快,所以没必要现写现转,但是为了避免转字的代码比较麻烦,最好写个函数用来在指定的位置上写字.在转子的过程中还要用到wgl的函数HDC描述句柄等,所以要包含头文件gdi.h连接gdi32.lib ,为了谨慎起见,最好在每次转换的时候检查一下HDC的设备像素格式,以免出了错却不知道是什么问题(有些情况HDC是不支持OpenGL的)这些函数的参数用法都可以在网上找到,在这里讲出来会非常麻烦.

java中如何调用OpenGL

JOGL是Java对OpenGLAPI绑定的开源项目并设计为采用Java开发的应用程序提供3D图形硬件支持。

如何设置魔兽争霸opengl模式

不知道你说的快是不是指游戏速度,这是不变的。但对于配置一般的机子来说(主要是显卡),用opengl模式确实更好,尤其是鼠标不会那么飘。

OPENGL是什么?

OpenGL三维图形标准是由AT&T公司UNIX软件实验室、IBM 、DEC、SUN、HP、Microsoft和SGI等多家公司在GL图形库标准的基础 上联合推出的开放式图形库,它使在微机上实现三维真实 感图形的生成与显示成为可能。由于OpenGL是开放的图形标 准,用户原先在UNIX下开发的OpenGL图形软件很容易移植到微 机上的WindowsNT/95上。笔者在VisualC++4.1(以下简称VC)集 成环境下,开发了基于OpenGL的三维真实感图形应用程序,现 介绍如下。 微机上的OpenGL开发环境 基于OpenGL标准开发的应用程序必须运行于32位Windows 平台下,如WindowsNT或Windows95环境;而且运行时还需有动态 链接库OpenGL32.DLL、Glu32.DLL,这两个文件在安装WindowsNT时已 自动装载到C:WINNTSYSTEM32目录下(这里假定用户将WindowsNT 安装在C盘上);而对于使用Windows95平台的用户,则需手工将 两个动态库复制到Windows95目录的SYSTEM子目录中。安装了 WindowsNT/95和VC4.1后,用户就具备了基于OpenGL开发三维图 形软件的基本条件。 OpenGL程序设计的基本步骤 1.OpenGL在WindowsNT下的运行机制 OpenGL工作在客户机/服务器模式下,当客户方(即基 于OpenGL标准开发的应用程序)向服务器(OpenGL核心机制)发出 命令时,由服务器负责解释这些命令。通常情况下,客户方 和服务器是运行在同一台微机上的。由于OpenGL的运行机制 是客户机/服务器模式,这使得用户能够十分方便地在网 络环境下使用OpenGL,OpenGL在WindowsNT上的这种实现方式通常 称为网络透明性。 OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中, 客户机中的所有OpenGL函数调用,都被传送到服务器上,由 WinSrv.DLL实现功能,再将经过处理的指令发送到Win32设备驱 动接口(DDI),从而实现在计算机屏幕上产生图像。 若使用OpenGL图形加速卡,则上述机制中将添加两个 驱动器:OpenGL可装载客户模块(OpenGLICD)将安装在客户端;硬 件指定DDI将安装在服务器端,与WinDDI同一级别。 2.OpenGL的库函数 开发基于OpenGL的应用程序,必须先了解OpenGL的库函 数。OpenGL函数命令方式十分有规律,每个库函数均有前缀gl 、glu、aux,分别表示该函数属于OpenGL基本库、实用库或辅助 库。WindowsNT下的OpenGL包含了100多个核心函数,均以gl作为前 缀,同时还支持另外四类函数: OpenGL实用库函数:43个,以glu作为前缀; OpenGL辅助库函数:31个,以aux作为前缀; Windows专用库函数(WGL):6个,以wgl作为前缀; Win32API函数(WGL):5个,无前缀。 OpenGL的115个核心函数提供了最基本的功能,可以实 现三维建模、建立光照模型、反走样、纹理映射等;OpenGL实 用库函数在核心函数的上一层,这类函数提供了简单的调 用方法,其实质是调用核心函数,目的是减轻开发者的编程 工作量;OpenGL辅助库函数是一些特殊的函数,可以供初学者 熟悉OpenGL的编程机制,然而使用辅助库函数的应用程序只 能在Win32环境中使用,可移植性较差,所以开发者应尽量避 免使用辅助库函数;Windows专用库函数(WGL)主要针对WindowsNT /95环境的OpenGL函数调用;Win32API函数用于处理像素存储格 式、双缓存等函数调用。 3.VC环境下基于OpenGL的编程步骤 下面介绍在VC环境中建立基于Opeetting菜单选项,在Link栏的Lib输入域中 添加openg132.lib、glu32.lib,若需使用OpenGL的辅助库函数,则还 需添加glaux.lib。 (3)选择View/ClassWizard菜单选项,打开MFC对话框,在 ClassName栏中选择CMyTestView类,进行以下操作: 选择WM_CREATE消息,鼠标单击EditCode,将OpenGL初始化代码 添加到OnCreate()函数中: /*定义像素存储格式*/ PIXELFORMATDESCRIPTORpfd= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0,0,0,0,0,0,0 32, 0,0, PFD_MAIN_PLANE, 0, 0,0,0, } CCLientdc(this); intpixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd); BOOLsuccess=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd); m_hRC=wglCreateContext(dc.m_hDC); 选择WM_DESTORY消息,在OnDestory()中添加以下代码: wglDeleteContext(m_hRC); 在MyTestView.cpp中,将以下代码添加到PreCreateWindows()函数中: cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS; OpenGL只对WS_CLIPCHILDREN|WS_CLIPSIBLINGS类型窗口有效; 在MyTestView.cpp中,将以下代码添加到OnDraw()函数中: wglMakeCurrent(pDC->m_hDC,m_hRC); DrawScene();//用户自定义函数,用于绘制三维场景; wglMakeCurrent(pDC->m_hDC,NULL); 在MyTestView.cpp中,添加成员函数DrawScene(): voidCMyTestView::DrawScene() {/*绘制三维场景*/} (4)在MyTestView.h中包含以下头文件并添加类成员说明: #include #include #include 在CTestView类中的protected:段中添加成员变量声明: HGLRCm_hRC; 同时添加成员函数声明: DrawScene(); 这样,一个基于OpenGL标准的程序框架已经构造好,用 户只需在DrawScene()函数中添加程序代码即可。 建立三维实体模型 三维实体建模是整个图形学的基础,要生成高逼真 度的图像,首先要生成高质量的三维实体模型。 OpenGL中提供了十几个生成三维实体模型的辅助库函 数,这些函数均以aux作为函数名的前缀。简单的模型,如球 体、立方体、圆柱等可以使用这些辅助函数来实现,如 auxWireSphere(GLdoubleradius)(绘制一半径为radius的网状球体)。 但是这些函数难以满足建立复杂三维实体的需要,所以用 户可以通过其它建模工具(如3DS等)来辅助建立三维实体模 型数据库。笔者在三维实体的建模过程中采用3DS提供的2D Shape、3DLofter和3DEditor进行模型的编辑,最后通过将模型数 据以DXF文件格式输出存储供应用程序使用。 真实感图形的绘制 1.定义光照模型和材质 (1)光源。OpenGL提供了一系列建立光照模型的库函 数,使用户可以十分方便地在三维场景中建立所需的光照 模型。OpenGL中的光照模型由环境光(AmbientLight)、漫射光 (DiffuseLight)、镜面反射光(SpecularLight)等组成,同时还可设 置光线衰减因子来模拟真实的光源效果。 例如,定义一个黄色光源如下: GlfloatLight_position[]={1.0,1.0,1.0,0.0,}; GlfloatLight_diffuse[]={1.0,1.0,0.0,1.0,}; glLightfv(GL_LIGHT0,GL_POSTTION,light_position);//定义光源位置 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);//定义光源漫射光 光源必须经过启动后才会影响三维场景中的实体,可以通过以下指令使光源有效:< glEnable(LIGHTING);//启动光照模型; glEnable(GL_LIGHT0);//使光源GL_LIGHT0有效; OpenGL中一共可以定义GL_LIGHT0~GL_LIGHT7八个光源。 (2)材质。OpenGL中的材质是指构成三维实体的材料在 光照模型中对于红、绿、蓝三原色的反射率。与光源的定义 类似,材质的定义分为环境、漫射、镜面反射成分,另外还 有镜面高光指数、辐射成分等。通过对三维实体的材质定义 可以大大提高应用程序所绘制的三维场景的逼真程度。例 如: /*设置材质的反射成分*/ GLfloatmat_ambient[]={0.8,0.8,0.8,1.0}; GLfloatmat_diffuse[]={0.8,0.0,0.8,1.0};/*紫色*/ GLfloatmat_specular[]={1.0,0.0,1.0,1.0};/*镜面高光亮紫色*/ GLfloatmat_shiness[]={100.0};/*高光指数*/ glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);/*定义环境光反射率*/ glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);/*定义漫射光反射率*/ glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);/*定义镜面光反射率*/ glMaterialfv(GL_FRONT,GL_SHINESS,mat_shiness);/*定义高光指数*/ (3)材质RGB值与光源RGB值的关系。OpenGL中材质的颜色 与光照模型中光源的颜色含义略有不同。对于光源,R、G、B 值表示三原色在光源中所占有的比率;而对于材质定义,R、 G、B的值表示具有这种材质属性的物体对于三原色的反射 比率,场景中物体所呈现的颜色与光照模型、材质定义都相 关。例如,若定义的光源颜色是(Lr,Lg,Lb)=(1.0,1.0,1.0)(白光), 物体的材质颜色定义为(Mr,Mg,Mb)=(0.0,0.0,0.8),则最终到达人 眼的物体颜色应当是(Lr*Mr,Lg*Mg,Lb*Mb)=(0.0,0.0,0.8)(蓝色)。 2.读取三维模型数据 为了绘制三维实体,我们首先必须将预先生成的三 维实体模型从三维实体模型库中读出。下图描述了读取三 维实体模型的流程。 3.三维实体绘制 由于3DS的DXF文件中对于三维实体的描述是采用三角 形面片逼近的方法,而在OpenGL函数库中,提供了绘制三角形 面片的方法,所以为三维实体的绘制提供了方便。以下提供 了绘制三角形面片的方法: glBegin(TRANGLES);//定义三角形绘制开始 glVertexf((GLfloat)x1,(GLfloat)y1,(GLfloat)z1);//第一个顶点 glVertexf((GLfloat)x2,(GLfloat)y2,(GLfloat)z2);//第二个顶点 glVertexf((GLfloat)x3,(GLfloat)y3,(GLfloat)z3);//第三个顶点 glEnd();//绘制结束 为了提高三维实时动画的显示速度,我们利用了 OpenGL库中的显示列表(DisplayList)的功能,将三维场景中的实 体分别定义为单独的显示列表,预先生成三维实体。在图形 显示时,只需调用所需的显示列表即可显示相应的三维实 体,而不需要重新计算实体在场景中的坐标,避免了大量的 浮点运算。在调用显示列表前所作的旋转、平移、光照、材 质的设定都将影响显示列表中的三维实体的显示效果。具 体实现算法如下: for(ObjectNo=0;ObjectNo<实体个数;ObjectNo++) { glNewList(ObjectNo,GL_COMPILE);//创建第ObjectNo个实体的显示列表 for(Fac OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家 世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通 用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、 HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL 为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image 和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软 件ProEngineer、GIS软ARC/INFO等等。值得一提的是,随着Microsoft公司在 Windows NT和最新的Windows 95中提供了OpenGL标准及OpenGL三维图形加速卡 (如北京黎明电子技术公司的AGC-3D系列三维图形加速卡)的推出,OpenGL将 在微机中有广泛地应用,同时也为广大用户提供了在微机上使用以前只能在高 性能图形工作站上运行的各种软件的机会。 OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统, 以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以 与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算 法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能: 1) 建模 OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提 供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面 (如Bezier、Nurbs等曲线或曲面)绘制函数。 2) 变换 OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、 旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透 视投影两种变换。其变换方法与机器人运动学中的坐标变换方法完全一 致,有利于减少算法的运行时间,提高三维图形的显示速度。 3) 颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。 4) 光照和材质设置 OpenGL光有辐射光(Emitted Light)、环境光 (Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。 材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光 的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。 5) 纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真 地表达物体表面细节。 6) 位图显示和图象增强 图象功能除了基本的拷贝和像素读写外,还提供 融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。 以上三条可是被仿真物更具真实感,增强图形显示的效果。 7) 双缓存(Double Buffering)动画 双缓存即前台缓存和后台缓存,简而言 之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。 此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等 特殊效果。从而实现了消隐算法。

openGL 是什么软件

分类: 电脑/网络 >> 软件 解析: OpenGL三维图形标准是由AT&T公司UNIX软件实验室、IBM 、DEC、SUN、HP、Microsoft和SGI等多家公司在GL图形库标准的基础 上联合推出的开放式图形库,它使在微机上实现三维真实 感图形的生成与显示成为可能。由于OpenGL是开放的图形标 准,用户原先在UNIX下开发的OpenGL图形软件很容易移植到微 机上的WindowsNT/95上。笔者在VisualC++4.1(以下简称VC)集 成环境下,开发了基于OpenGL的三维真实感图形应用程序,现 介绍如下。 微机上的OpenGL开发环境 基于OpenGL标准开发的应用程序必须运行于32位Windows 平台下,如WindowsNT或Windows95环境;而且运行时还需有动态 链接库OpenGL32.DLL、Glu32.DLL,这两个文件在安装WindowsNT时已 自动装载到C:WINNTSYSTEM32目录下(这里假定用户将WindowsNT 安装在C盘上);而对于使用Windows95平台的用户,则需手工将 两个动态库复制到Windows95目录的SYSTEM子目录中。安装了 WindowsNT/95和VC4.1后,用户就具备了基于OpenGL开发三维图 形软件的基本条件。 OpenGL程序设计的基本步骤 1.OpenGL在WindowsNT下的运行机制 OpenGL工作在客户机/服务器模式下,当客户方(即基 于OpenGL标准开发的应用程序)向服务器(OpenGL核心机制)发出 命令时,由服务器负责解释这些命令。通常情况下,客户方 和服务器是运行在同一台微机上的。由于OpenGL的运行机制 是客户机/服务器模式,这使得用户能够十分方便地在网 络环境下使用OpenGL,OpenGL在WindowsNT上的这种实现方式通常 称为网络透明性。 OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中, 客户机中的所有OpenGL函数调用,都被传送到服务器上,由 WinSrv.DLL实现功能,再将经过处理的指令发送到Win32设备驱 动接口(DDI),从而实现在计算机屏幕上产生图像。 若使用OpenGL图形加速卡,则上述机制中将添加两个 驱动器:OpenGL可装载客户模块(OpenGLICD)将安装在客户端;硬 件指定DDI将安装在服务器端,与WinDDI同一级别。 2.OpenGL的库函数 开发基于OpenGL的应用程序,必须先了解OpenGL的库函 数。OpenGL函数命令方式十分有规律,每个库函数均有前缀gl 、glu、aux,分别表示该函数属于OpenGL基本库、实用库或辅助 库。WindowsNT下的OpenGL包含了100多个核心函数,均以gl作为前 缀,同时还支持另外四类函数: OpenGL实用库函数:43个,以glu作为前缀; OpenGL辅助库函数:31个,以aux作为前缀; Windows专用库函数(WGL):6个,以wgl作为前缀; Win32API函数(WGL):5个,无前缀。 OpenGL的115个核心函数提供了最基本的功能,可以实 现三维建模、建立光照模型、反走样、纹理映射等;OpenGL实 用库函数在核心函数的上一层,这类函数提供了简单的调 用方法,其实质是调用核心函数,目的是减轻开发者的编程 工作量;OpenGL辅助库函数是一些特殊的函数,可以供初学者 熟悉OpenGL的编程机制,然而使用辅助库函数的应用程序只 能在Win32环境中使用,可移植性较差,所以开发者应尽量避 免使用辅助库函数;Windows专用库函数(WGL)主要针对WindowsNT /95环境的OpenGL函数调用;Win32API函数用于处理像素存储格 式、双缓存等函数调用。 3.VC环境下基于OpenGL的编程步骤 下面介绍在VC环境中建立基于Opeetting菜单选项,在Link栏的Lib输入域中 添加openg132.lib、glu32.lib,若需使用OpenGL的辅助库函数,则还 需添加glaux.lib。 (3)选择View/ClassWizard菜单选项,打开MFC对话框,在 ClassName栏中选择CMyTestView类,进行以下操作: 选择WM_CREATE消息,鼠标单击EditCode,将OpenGL初始化代码 添加到OnCreate()函数中: /*定义像素存储格式*/ PIXELFORMATDESCRIPTORpfd= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0,0,0,0,0,0,0 32, 0,0, PFD_MAIN_PLANE, 0, 0,0,0, } CCLientdc(this); intpixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd); BOOLsuccess=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd); m_hRC=wglCreateContext(dc.m_hDC); 选择WM_DESTORY消息,在OnDestory()中添加以下代码: wglDeleteContext(m_hRC); 在MyTestView.cpp中,将以下代码添加到PreCreateWindows()函数中: cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS; OpenGL只对WS_CLIPCHILDREN|WS_CLIPSIBLINGS类型窗口有效; 在MyTestView.cpp中,将以下代码添加到OnDraw()函数中: wglMakeCurrent(pDC->m_hDC,m_hRC); DrawScene();//用户自定义函数,用于绘制三维场景; wglMakeCurrent(pDC->m_hDC,NULL); 在MyTestView.cpp中,添加成员函数DrawScene(): voidCMyTestView::DrawScene() {/*绘制三维场景*/} (4)在MyTestView.h中包含以下头文件并添加类成员说明: #include #include #include 在CTestView类中的protected:段中添加成员变量声明: HGLRCm_hRC; 同时添加成员函数声明: DrawScene(); 这样,一个基于OpenGL标准的程序框架已经构造好,用 户只需在DrawScene()函数中添加程序代码即可。 建立三维实体模型 三维实体建模是整个图形学的基础,要生成高逼真 度的图像,首先要生成高质量的三维实体模型。 OpenGL中提供了十几个生成三维实体模型的辅助库函 数,这些函数均以aux作为函数名的前缀。简单的模型,如球 体、立方体、圆柱等可以使用这些辅助函数来实现,如 auxWireSphere(GLdoubleradius)(绘制一半径为radius的网状球体)。 但是这些函数难以满足建立复杂三维实体的需要,所以用 户可以通过其它建模工具(如3DS等)来辅助建立三维实体模 型数据库。笔者在三维实体的建模过程中采用3DS提供的2D Shape、3DLofter和3DEditor进行模型的编辑,最后通过将模型数 据以DXF文件格式输出存储供应用程序使用。 真实感图形的绘制 1.定义光照模型和材质 (1)光源。OpenGL提供了一系列建立光照模型的库函 数,使用户可以十分方便地在三维场景中建立所需的光照 模型。OpenGL中的光照模型由环境光(AmbientLight)、漫射光 (DiffuseLight)、镜面反射光(SpecularLight)等组成,同时还可设 置光线衰减因子来模拟真实的光源效果。 例如,定义一个黄色光源如下: GlfloatLight_position[]={1.0,1.0,1.0,0.0,}; GlfloatLight_diffuse[]={1.0,1.0,0.0,1.0,}; glLightfv(GL_LIGHT0,GL_POSTTION,light_position);//定义光源位置 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);//定义光源漫射光 光源必须经过启动后才会影响三维场景中的实体,可以通过以下指令使光源有效:< glEnable(LIGHTING);//启动光照模型; glEnable(GL_LIGHT0);//使光源GL_LIGHT0有效; OpenGL中一共可以定义GL_LIGHT0~GL_LIGHT7八个光源。 (2)材质。OpenGL中的材质是指构成三维实体的材料在 光照模型中对于红、绿、蓝三原色的反射率。与光源的定义 类似,材质的定义分为环境、漫射、镜面反射成分,另外还 有镜面高光指数、辐射成分等。通过对三维实体的材质定义 可以大大提高应用程序所绘制的三维场景的逼真程度。例 如: /*设置材质的反射成分*/ GLfloatmat_ambient[]={0.8,0.8,0.8,1.0}; GLfloatmat_diffuse[]={0.8,0.0,0.8,1.0};/*紫色*/ GLfloatmat_specular[]={1.0,0.0,1.0,1.0};/*镜面高光亮紫色*/ GLfloatmat_shiness[]={100.0};/*高光指数*/ glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);/*定义环境光反射率*/ glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);/*定义漫射光反射率*/ glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);/*定义镜面光反射率*/ glMaterialfv(GL_FRONT,GL_SHINESS,mat_shiness);/*定义高光指数*/ (3)材质RGB值与光源RGB值的关系。OpenGL中材质的颜色 与光照模型中光源的颜色含义略有不同。对于光源,R、G、B 值表示三原色在光源中所占有的比率;而对于材质定义,R、 G、B的值表示具有这种材质属性的物体对于三原色的反射 比率,场景中物体所呈现的颜色与光照模型、材质定义都相 关。例如,若定义的光源颜色是(Lr,Lg,Lb)=(1.0,1.0,1.0)(白光), 物体的材质颜色定义为(Mr,Mg,Mb)=(0.0,0.0,0.8),则最终到达人 眼的物体颜色应当是(Lr*Mr,Lg*Mg,Lb*Mb)=(0.0,0.0,0.8)(蓝色)。 2.读取三维模型数据 为了绘制三维实体,我们首先必须将预先生成的三 维实体模型从三维实体模型库中读出。下图描述了读取三 维实体模型的流程。 3.三维实体绘制 由于3DS的DXF文件中对于三维实体的描述是采用三角 形面片逼近的方法,而在OpenGL函数库中,提供了绘制三角形 面片的方法,所以为三维实体的绘制提供了方便。以下提供 了绘制三角形面片的方法: glBegin(TRANGLES);//定义三角形绘制开始 glVertexf((GLfloat)x1,(GLfloat)y1,(GLfloat)z1);//第一个顶点 glVertexf((GLfloat)x2,(GLfloat)y2,(GLfloat)z2);//第二个顶点 glVertexf((GLfloat)x3,(GLfloat)y3,(GLfloat)z3);//第三个顶点 glEnd();//绘制结束 为了提高三维实时动画的显示速度,我们利用了 OpenGL库中的显示列表(DisplayList)的功能,将三维场景中的实 体分别定义为单独的显示列表,预先生成三维实体。在图形 显示时,只需调用所需的显示列表即可显示相应的三维实 体,而不需要重新计算实体在场景中的坐标,避免了大量的 浮点运算。在调用显示列表前所作的旋转、平移、光照、材 质的设定都将影响显示列表中的三维实体的显示效果。具 体实现算法如下: for(ObjectNo=0;ObjectNo<实体个数;ObjectNo++) { glNewList(ObjectNo,GL_COMPILE);//创建第ObjectNo个实体的显示列表 for(Fac

OpenGl是什么?

OpenGL三维图形标准是由AT&T公司UNIX软件实验室、IBM 、DEC、SUN、HP、Microsoft和SGI等多家公司在GL图形库标准的基础 上联合推出的开放式图形库,它使在微机上实现三维真实 感图形的生成与显示成为可能。由于OpenGL是开放的图形标 准,用户原先在UNIX下开发的OpenGL图形软件很容易移植到微 机上的WindowsNT/95上。笔者在VisualC++4.1(以下简称VC)集 成环境下,开发了基于OpenGL的三维真实感图形应用程序,现 介绍如下。 微机上的OpenGL开发环境 基于OpenGL标准开发的应用程序必须运行于32位Windows 平台下,如WindowsNT或Windows95环境;而且运行时还需有动态 链接库OpenGL32.DLL、Glu32.DLL,这两个文件在安装WindowsNT时已 自动装载到C:WINNTSYSTEM32目录下(这里假定用户将WindowsNT 安装在C盘上);而对于使用Windows95平台的用户,则需手工将 两个动态库复制到Windows95目录的SYSTEM子目录中。安装了 WindowsNT/95和VC4.1后,用户就具备了基于OpenGL开发三维图 形软件的基本条件。 OpenGL程序设计的基本步骤 1.OpenGL在WindowsNT下的运行机制 OpenGL工作在客户机/服务器模式下,当客户方(即基 于OpenGL标准开发的应用程序)向服务器(OpenGL核心机制)发出 命令时,由服务器负责解释这些命令。通常情况下,客户方 和服务器是运行在同一台微机上的。由于OpenGL的运行机制 是客户机/服务器模式,这使得用户能够十分方便地在网 络环境下使用OpenGL,OpenGL在WindowsNT上的这种实现方式通常 称为网络透明性。 OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中, 客户机中的所有OpenGL函数调用,都被传送到服务器上,由 WinSrv.DLL实现功能,再将经过处理的指令发送到Win32设备驱 动接口(DDI),从而实现在计算机屏幕上产生图像。 若使用OpenGL图形加速卡,则上述机制中将添加两个 驱动器:OpenGL可装载客户模块(OpenGLICD)将安装在客户端;硬 件指定DDI将安装在服务器端,与WinDDI同一级别。 2.OpenGL的库函数 开发基于OpenGL的应用程序,必须先了解OpenGL的库函 数。OpenGL函数命令方式十分有规律,每个库函数均有前缀gl 、glu、aux,分别表示该函数属于OpenGL基本库、实用库或辅助 库。WindowsNT下的OpenGL包含了100多个核心函数,均以gl作为前 缀,同时还支持另外四类函数: OpenGL实用库函数:43个,以glu作为前缀; OpenGL辅助库函数:31个,以aux作为前缀; Windows专用库函数(WGL):6个,以wgl作为前缀; Win32API函数(WGL):5个,无前缀。 OpenGL的115个核心函数提供了最基本的功能,可以实 现三维建模、建立光照模型、反走样、纹理映射等;OpenGL实 用库函数在核心函数的上一层,这类函数提供了简单的调 用方法,其实质是调用核心函数,目的是减轻开发者的编程 工作量;OpenGL辅助库函数是一些特殊的函数,可以供初学者 熟悉OpenGL的编程机制,然而使用辅助库函数的应用程序只 能在Win32环境中使用,可移植性较差,所以开发者应尽量避 免使用辅助库函数;Windows专用库函数(WGL)主要针对WindowsNT /95环境的OpenGL函数调用;Win32API函数用于处理像素存储格 式、双缓存等函数调用。 3.VC环境下基于OpenGL的编程步骤 下面介绍在VC环境中建立基于Opeetting菜单选项,在Link栏的Lib输入域中 添加openg132.lib、glu32.lib,若需使用OpenGL的辅助库函数,则还 需添加glaux.lib。 (3)选择View/ClassWizard菜单选项,打开MFC对话框,在 ClassName栏中选择CMyTestView类,进行以下操作: 选择WM_CREATE消息,鼠标单击EditCode,将OpenGL初始化代码 添加到OnCreate()函数中: /*定义像素存储格式*/ PIXELFORMATDESCRIPTORpfd= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0,0,0,0,0,0,0 32, 0,0, PFD_MAIN_PLANE, 0, 0,0,0, } CCLientdc(this); intpixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd); BOOLsuccess=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd); m_hRC=wglCreateContext(dc.m_hDC); 选择WM_DESTORY消息,在OnDestory()中添加以下代码: wglDeleteContext(m_hRC); 在MyTestView.cpp中,将以下代码添加到PreCreateWindows()函数中: cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS; OpenGL只对WS_CLIPCHILDREN|WS_CLIPSIBLINGS类型窗口有效; 在MyTestView.cpp中,将以下代码添加到OnDraw()函数中: wglMakeCurrent(pDC->m_hDC,m_hRC); DrawScene();//用户自定义函数,用于绘制三维场景; wglMakeCurrent(pDC->m_hDC,NULL); 在MyTestView.cpp中,添加成员函数DrawScene(): voidCMyTestView::DrawScene() {/*绘制三维场景*/} (4)在MyTestView.h中包含以下头文件并添加类成员说明: #include #include #include 在CTestView类中的protected:段中添加成员变量声明: HGLRCm_hRC; 同时添加成员函数声明: DrawScene(); 这样,一个基于OpenGL标准的程序框架已经构造好,用 户只需在DrawScene()函数中添加程序代码即可。 建立三维实体模型 三维实体建模是整个图形学的基础,要生成高逼真 度的图像,首先要生成高质量的三维实体模型。 OpenGL中提供了十几个生成三维实体模型的辅助库函 数,这些函数均以aux作为函数名的前缀。简单的模型,如球 体、立方体、圆柱等可以使用这些辅助函数来实现,如 auxWireSphere(GLdoubleradius)(绘制一半径为radius的网状球体)。 但是这些函数难以满足建立复杂三维实体的需要,所以用 户可以通过其它建模工具(如3DS等)来辅助建立三维实体模 型数据库。笔者在三维实体的建模过程中采用3DS提供的2D Shape、3DLofter和3DEditor进行模型的编辑,最后通过将模型数 据以DXF文件格式输出存储供应用程序使用。 真实感图形的绘制 1.定义光照模型和材质 (1)光源。OpenGL提供了一系列建立光照模型的库函 数,使用户可以十分方便地在三维场景中建立所需的光照 模型。OpenGL中的光照模型由环境光(AmbientLight)、漫射光 (DiffuseLight)、镜面反射光(SpecularLight)等组成,同时还可设 置光线衰减因子来模拟真实的光源效果。 例如,定义一个黄色光源如下: GlfloatLight_position[]={1.0,1.0,1.0,0.0,}; GlfloatLight_diffuse[]={1.0,1.0,0.0,1.0,}; glLightfv(GL_LIGHT0,GL_POSTTION,light_position);//定义光源位置 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);//定义光源漫射光 光源必须经过启动后才会影响三维场景中的实体,可以通过以下指令使光源有效:< glEnable(LIGHTING);//启动光照模型; glEnable(GL_LIGHT0);//使光源GL_LIGHT0有效; OpenGL中一共可以定义GL_LIGHT0~GL_LIGHT7八个光源。 (2)材质。OpenGL中的材质是指构成三维实体的材料在 光照模型中对于红、绿、蓝三原色的反射率。与光源的定义 类似,材质的定义分为环境、漫射、镜面反射成分,另外还 有镜面高光指数、辐射成分等。通过对三维实体的材质定义 可以大大提高应用程序所绘制的三维场景的逼真程度。例 如: /*设置材质的反射成分*/ GLfloatmat_ambient[]={0.8,0.8,0.8,1.0}; GLfloatmat_diffuse[]={0.8,0.0,0.8,1.0};/*紫色*/ GLfloatmat_specular[]={1.0,0.0,1.0,1.0};/*镜面高光亮紫色*/ GLfloatmat_shiness[]={100.0};/*高光指数*/ glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);/*定义环境光反射率*/ glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);/*定义漫射光反射率*/ glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);/*定义镜面光反射率*/ glMaterialfv(GL_FRONT,GL_SHINESS,mat_shiness);/*定义高光指数*/ (3)材质RGB值与光源RGB值的关系。OpenGL中材质的颜色 与光照模型中光源的颜色含义略有不同。对于光源,R、G、B 值表示三原色在光源中所占有的比率;而对于材质定义,R、 G、B的值表示具有这种材质属性的物体对于三原色的反射 比率,场景中物体所呈现的颜色与光照模型、材质定义都相 关。例如,若定义的光源颜色是(Lr,Lg,Lb)=(1.0,1.0,1.0)(白光), 物体的材质颜色定义为(Mr,Mg,Mb)=(0.0,0.0,0.8),则最终到达人 眼的物体颜色应当是(Lr*Mr,Lg*Mg,Lb*Mb)=(0.0,0.0,0.8)(蓝色)。 2.读取三维模型数据 为了绘制三维实体,我们首先必须将预先生成的三 维实体模型从三维实体模型库中读出。下图描述了读取三 维实体模型的流程。 3.三维实体绘制 由于3DS的DXF文件中对于三维实体的描述是采用三角 形面片逼近的方法,而在OpenGL函数库中,提供了绘制三角形 面片的方法,所以为三维实体的绘制提供了方便。以下提供 了绘制三角形面片的方法: glBegin(TRANGLES);//定义三角形绘制开始 glVertexf((GLfloat)x1,(GLfloat)y1,(GLfloat)z1);//第一个顶点 glVertexf((GLfloat)x2,(GLfloat)y2,(GLfloat)z2);//第二个顶点 glVertexf((GLfloat)x3,(GLfloat)y3,(GLfloat)z3);//第三个顶点 glEnd();//绘制结束 为了提高三维实时动画的显示速度,我们利用了 OpenGL库中的显示列表(DisplayList)的功能,将三维场景中的实 体分别定义为单独的显示列表,预先生成三维实体。在图形 显示时,只需调用所需的显示列表即可显示相应的三维实 体,而不需要重新计算实体在场景中的坐标,避免了大量的 浮点运算。在调用显示列表前所作的旋转、平移、光照、材 质的设定都将影响显示列表中的三维实体的显示效果。具 体实现算法如下: for(ObjectNo=0;ObjectNo<实体个数;ObjectNo++) { glNewList(ObjectNo,GL_COMPILE);//创建第ObjectNo个实体的显示列表 for(FacOpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家 世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通 用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、 HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL 为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image 和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软 件ProEngineer、GIS软ARC/INFO等等。值得一提的是,随着Microsoft公司在 Windows NT和最新的Windows 95中提供了OpenGL标准及OpenGL三维图形加速卡 (如北京黎明电子技术公司的AGC-3D系列三维图形加速卡)的推出,OpenGL将 在微机中有广泛地应用,同时也为广大用户提供了在微机上使用以前只能在高 性能图形工作站上运行的各种软件的机会。 OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统, 以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以 与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算 法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能: 1) 建模 OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提 供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面 (如Bezier、Nurbs等曲线或曲面)绘制函数。 2) 变换 OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、 旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透 视投影两种变换。其变换方法与机器人运动学中的坐标变换方法完全一 致,有利于减少算法的运行时间,提高三维图形的显示速度。 3) 颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。 4) 光照和材质设置 OpenGL光有辐射光(Emitted Light)、环境光 (Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。 材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光 的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。 5) 纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真 地表达物体表面细节。 6) 位图显示和图象增强 图象功能除了基本的拷贝和像素读写外,还提供 融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。 以上三条可是被仿真物更具真实感,增强图形显示的效果。 7) 双缓存(Double Buffering)动画 双缓存即前台缓存和后台缓存,简而言 之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。 此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等 特殊效果。从而实现了消隐算法。

opengl在windows系统下编程,如何实现在窗口外绘图?

二、生成OpenGL程序的基本步骤和条件   本文将给出一个例子,这个例子是一个用OpenGL显示图像的Windows程序,通过这个程序我们也可以知道用OpenGL编程的基本要求。我们知道,GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC")。每一个GDI命令需要传给它一个DC,与GDI不同,OpenGL使用当前绘制环境(RC)。一旦在一个线程中指定了一个当前RC,所有在此线程中的OpenGL命令都使用相同的当前RC。虽然在单一窗口中可以使用多个RC,但在单一线程中只有一个当前RC。本例将首先产生一个OpenGL RC并使之成为当前RC,分为三个步骤:设置窗口像素格式;产生RC;设置为当前RC。   一、首先创建工程   用AppWizard产生一个EXE文件,选择工程目录,并在工程名字中输入"GLSample一",保持其他的不变;第一步、选单文档(SDI);第二步、不支持数据库;第三步、不支持OLE;第四步、不选中浮动工具条、开始状态条、打印和预览支持、帮助支持的复选框(选中也可以,本文只是说明最小要求),选中三维控制(三D Controls);第五步、选中产生源文件注释并使用MFC为共享动态库;第六步、保持缺省选择。按Finish结束,工程创建完毕。   二、将此工程所需的OpenGL文件 和库加入到工程中   在工程菜单中,选择"Build"下的"Settings"项。单击"Link"标签,选择"General"目录,在Object/Library Modules的编辑框中输入"OpenGL三二.lib glu三二.lib glaux.lib"(注意,输入双引号中的内容,各个库用空格分开;否则会出现链接错误),选择"OK"结束。然后打开文件"stdafx.h",将下列语句插入到文件中(划下划线的语句为所加语句):   #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers   #include // MFC core and standard components   #include // MFC extensions   #include   #include   #ifndef _AFX_NO_AFXCMN_SUPPORT   #include // MFC support for Windows 95 Common Controls   #endif // _AFX_NO_AFXCMN_SUPPORT   三、改写OnPreCreate函数并给视 类添加成员函数和成员变量   OpenGL需要窗口加上WS_CLIPCHILDREN(创建父窗口使用的Windows风格,用于重绘时裁剪子窗口所覆盖的区域)和 WS_CLIPSIBLINGS(创建子窗口使用的Windows风格,用于重绘时剪裁其他子窗口所覆盖的区域)风格。把OnPreCreate改写成如下所示:    BOOL CGLSample一View::PreCr- eateWindow(CREATESTRUCT& cs)   {    cs.style |= (WS_CLIPCHI- LDREN | WS_CLIPSIBLINGS);    return CView::PreCreate- Window(cs);   }    产生一个RC的第一步是定义窗口的像素格式。像素格式决定窗口着所显示的图形在内存中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在下面将有对这些参数的设置。我们先在CGLSample一View的类中添加一个保护型的成员函数BOOL SetWindowPixel-Format(HDC hDC)(用鼠标右键添加),并编辑其中的代码,见程序一。   BOOL CGLSample一View::SetWindowPixelFormat(HDC hDC)   {    PIXELFORMATDESCRIPTOR pixelDesc;   pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);    pixelDesc.nVersion = 一;    pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW |    PFD_DRAW_TO_BITMAP |    PFD_SUPPORT_OpenGL |    PFD_SUPPORT_GDI |    PFD_STEREO_DONTCARE;    pixelDesc.iPixelType = PFD_TYPE_RGBA;    pixelDesc.cColorBits = 三二;    pixelDesc.cRedBits = 吧;    pixelDesc.cRedShift = 一陆;    pixelDesc.cGreenBits = 吧;    pixelDesc.cGreenShift = 吧;    pixelDesc.cBlueBits = 吧;    pixelDesc.cBlueShift = 0;    pixelDesc.cAlphaBits = 0;    pixelDesc.cAlphaShift = 0;    pixelDesc.cAccumBits = 陆四;    pixelDesc.cAccumRedBits = 一陆;    pixelDesc.cAccumGreenBits = 一陆;    pixelDesc.cAccumBlueBits = 一陆;    pixelDesc.cAccumAlphaBits = 0;    pixelDesc.cDepthBits = 三二;    pixelDesc.cStencilBits = 吧;    pixelDesc.cAuxBuffers = 0;    pixelDesc.iLayerType = PFD_MAIN_PLANE;    pixelDesc.bReserved = 0;    pixelDesc.dwLayerMask = 0;    pixelDesc.dwVisibleMask = 0;    pixelDesc.dwDamageMask = 0;       m_GLPixelIndex = ChoosePixelFormat( hDC, &pixelDesc);    if (m_GLPixelIndex==0) // Lets choose a default index.    { m_GLPixelIndex = 一;    if (DescribePixelFormat(hDC, m_GLPixelIndex,    sizeof(PIXELFORMATDESCRIPTOR), &pixelDesc)==0)    { return FALSE;    }    }    if (SetPixelFormat( hDC, m_GLPixelIndex, &pixelDesc)==FALSE)    { return FALSE;    }    return TRUE;   }   接着用鼠标右键在CGLSample一View中添加保护型的成员变量:   int m_GLPixelIndex;   四、用ClassWizard添加WM_CREATE的消息处理函数OnCreate   添加OnCreate函数后如程序一所示。   至此,OpenGL工程的基本框架就建好了。但如果你现在运行此工程,则它与一般的MFC程序看起来没有什么两样。   5、代码解释   现在我们可以看一看Describe-PixelFormat提供有哪几种像素格式,并对代码进行一些解释:   PIXELFORMATDESCRIPTOR包括了定义像素格式的全部信息。    DWFlags定义了与像素格式兼容的设备和接口。   通常的OpenGL发行版本并不包括所有的标志(flag)。wFlags能接收以下标志:   PFD_DRAW_TO_WINDOW 使之能在窗口或者其他设备窗口画图;   PFD_DRAW_TO_BITMAP 使之能在内存中的位图画图;   PFD_SUPPORT_GDI 使之能调用GDI函数(注:如果指定了PFD_DOUBLEBUFFER,这个选项将无效);   PFD_SUPPORT_OpenGL 使之能调用OpenGL函数;   PFD_GENERIC_FORMAT 假如这种象素格式由Windows GDI函数库或由第三方硬件设备驱动程序支持,则需指定这一项;   PFD_NEED_PALETTE 告诉缓冲区是否需要调色板,本程序假设颜色是使用二四或 三二位色,并且不会覆盖调色板;   PFD_NEED_SYSTEM_PALETTE 这个标志指明缓冲区是否把系统调色板当作它自身调色板的一部分;   PFD_DOUBLEBUFFER 指明使用了双缓冲区(注:GDI不能在使用了双缓冲区的窗口中画图);   PFD_STEREO 指明左、右缓冲区是否按立体图像来组织。   PixelType定义显示颜色的方法。PFD_TYPE_RGBA意味着每一位(bit)组代表着红、绿、蓝各分量的值。PFD_TYPE_COLORINDEX 意味着每一位组代表着在彩色查找表中的索引值。本例都是采用了PFD_TYPE_RGBA方式。   ● cColorBits定义了指定一个颜色的位数。对RGBA来说,位数是在颜色中红、绿、蓝各分量所占的位数。对颜色的索引值来说,指的是表中的颜色数。   ● cRedBits、cGreenBits、cBlue-Bits、cAlphaBits用来表明各相应分量所使用的位数。   ● cRedShift、cGreenShift、cBlue-Shift、cAlphaShift用来表明各分量从颜色开始的偏移量所占的位数。   一旦初始化完我们的结构,我们就想知道与要求最相近的系统象素格式。我们可以这样做:      m_hGLPixelIndex = ChoosePixelFormat(hDC, &pixelDesc);      ChoosePixelFormat接受两个参数:一个是hDc,另一个是一个指向PIXELFORMATDESCRIPTOR结构的指针&pixelDesc;该函数返回此像素格式的索引值。如果返回0则表示失败。假如函数失败,我们只是把索引值设为一并用DescribePixelFormat得到像素格式描述。假如你申请一个没得到支持的像素格式,则Choose-PixelFormat将会返回与你要求的像素格式最接近的一个值。一旦我们得到一个像素格式的索引值和相应的描述,我们就可以调用SetPixelFormat设置像素格式,并且只需设置一次。   现在像素格式已经设定,我们下一步工作是产生绘制环境(RC)并使之成为当前绘制环境。在CGLSample一View中加入一个保护型的成员函数BOOL CreateViewGLContext(HDC hDC),使之如下所示:   BOOL CGLSample一View::CreateView GLContext(HDC hDC)   { m_hGLContext = wglCreate Context(hDC);//用当前DC产生绘制环境(RC)    if (m_hGLContext == NULL)    { return FALSE;    }    if (wglMakeCurrent(hDC, m_hGLContext)==FALSE)    { return FALSE;    }    return TRUE;   }   并加入一个保护型的成员变量HGLRC m_hGLContext;HGLRC是一个指向rendering context的句柄。   在OnCreate函数中调用此函数:   int CGLSample一View::OnCreate (LPCREATESTRUCT lpCreateStruct)   {   if (CView::OnCreate(lpCreateS truct) == -一)    return -一;    HWND hWnd = GetSafeHwnd();    HD

介绍常用的OpenGL的函数(定义+功能)

OpenGL 函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。从图1可以看出,gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。下面逐一对这些库进行详细介绍。  1.OpenGL核心库  核心库包含有115个函数,函数名的前缀为gl。  这部分函数用于常规的、核心的图形处理。此函数由gl.dll来负责解释执行。由于许多函数可以接收不同数以下几类。据类型的参数,因此派生出来的函数原形多达300多个。  核心库中的函数主要可以分为以下几类函数:  (1)绘制基本几何图元的函数。如绘制图元的函数glBegain()、glEnd()、glNormal*()、glVertex*()。  (2)矩阵操作、几何变换和投影变换的函数。如矩阵入栈函数glPushMatrix()、矩阵出栈函数glPopMatrix()、装载矩阵函数glLoadMatrix()、矩阵相乘函数glMultMatrix(),当前矩阵函数 glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和 glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glViewport()等等。  (3)颜色、光照和材质的函数。如设置颜色模式函数glColor*()、glIndex*(),设置光照效果的函数glLight*() 、glLightModel*()和设置材质效果函数glMaterial()等等。  (4)显示列表函数、主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、 glEndList()、glGenLists()、glCallList()和glDeleteLists()。  (5)纹理映射函数,主要有一维纹理函数glTexImage1D()、二维纹理函数glTexImage2D()、 设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*()等。  (6)特殊效果函数。融合函数glBlendFunc()、反走样函数glHint()和雾化效果glFog*()。  (7)光栅化、象素操作函数。如象素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel()等。  (8)选择与反馈函数。主要有渲染模式glRenderMode()、选择缓冲区glSelectBuffer()和反馈缓冲区glFeedbackBuffer()等。  (9)曲线与曲面的绘制函数。生成曲线或曲面的函数glMap*()、glMapGrid*(),求值器的函数glEvalCoord*() glEvalMesh*()。  (10)状态设置与查询函数。主要有glGet*()、glEnable()、glGetError()等。  2.OpenGL实用库The OpenGL Utility Library (GLU)  包含有43个函数,函数名的前缀为glu。  OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点。线、面开始。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此函数由 glu.dll来负责解释执行。OpenGL中的核心库和实用库可以在所有的OpenGL平台上运行。  主要包括了以下几种:  (1)辅助纹理贴图函数,有gluScaleImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps()。  (2)坐标转换和投影变换函数,定义投影方式函数gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影视景体函数gluPickMatrix(),投影矩阵计算gluProject()和 gluUnProject()等等。  (3)多边形镶嵌工具,有gluNewTess()、 gluDeleteTess()、gluTessCallback()、gluBeginPolygon() gluTessVertex()、gluNextContour()、gluEndPolygon()等等。  (4)二次曲面绘制工具,主要有绘制球面、锥面、柱面、圆环面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric()等等。  (5)非均匀有理B样条绘制工具,主要用来定义和绘制Nurbs曲线和曲面,包括gluNewNurbsRenderer()、 gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、 gluNurbsProperty()等函数。  (6)错误反馈工具,获取出错信息的字符串gluErrorString()。  3.OpenGL辅助库  包含有31个函数,函数名前缀为aux。  这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。此函数由glaux.dll来负责解释执行。创建aux库是为了学习和编写 OpenGL程序,它更像是一个用于测试创意的预备基础接管。Aux库在windows实现有很多错误,因此很容易导致频繁的崩溃。在跨平台的编程实例和演示中,aux很大程度上已经被glut库取代。OpenGL中的辅助库不能在所有的OpenGL平台上运行。  辅助库函数主要包括以下几类:  (1)窗口初始化和退出函数,auxInitDisplayMode()和auxInitPosition()。  (2)窗口处理和时间输入函数,auxReshapeFunc()、auxKeyFunc()和auxMouseFunc()。  (3)颜色索引装入函数,auxSetOneColor()。  (4)三维物体绘制函数。包括了两种形式网状体和实心体,如绘制立方体auxWireCube()和 auxSolidCube()。这里以网状体为例,长方体auxWireBox()、环形圆纹面auxWireTorus()、圆柱 auxWireCylinder()、二十面体auxWireIcosahedron()、八面体auxWireOctahedron()、四面体 auxWireTetrahedron()、十二面体auxWireDodecahedron()、圆锥体auxWireCone()和茶壶 auxWireTeapot()。  (5)背景过程管理函数auxIdleFunc()。  (6)程序运行函数auxMainLoop()。  4.OpenGL工具库 OpenGL Utility Toolkit  包含大约30多个函数,函数名前缀为glut。  glut是不依赖于窗口平台的OpenGL工具包,由Mark KLilgrad在SGI编写(现在在Nvidia),目的是隐藏不同窗口平台API的复杂度。函数以glut开头,它们作为aux库功能更强的替代品,提供更为复杂的绘制功能,此函数由glut.dll来负责解释执行。由于glut中的窗口管理函数是不依赖于运行环境的,因此OpenGL中的工具库可以在X-Window, Windows NT, OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。对于有经验的程序员来说,一般先用glut理顺3D图形代码,然后再集成为完整的应用程序。  这部分函数主要包括:  (1)窗口操作函数,窗口初始化、窗口大小、窗口位置等函数glutInit() glutInitDisplayMode() glutInitWindowSize() glutInitWindowPosition()等。  (2)回调函数。响应刷新消息、键盘消息、鼠标消息、定时器函数等,GlutDisplayFunc() glutPostRedisplay() glutReshapeFunc() glutTimerFunc() glutKeyboardFunc() glutMouseFunc()。  (3)创建复杂的三维物体。这些和aux库的函数功能相同。创建网状体和实心体。如glutSolidSphere()、glutWireSphere()等。在此不再叙述。  (4)菜单函数。创建添加菜单的函数GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu() 和glutAttachMenu()。  (5)程序运行函数,glutMainLoop()。

在opengl中编写的程序没有错误,可是就是不显示图形

void CGeneric2View::OnDrawBezierCurve(){ // TODO: 在此添加命令处理程序代码 HWND hWnd=GetSafeHwnd(); HDC hDC=::GetDC(hWnd); wglMakeCurrent(hDC,hglrc); drawb_curve(); wglMakeCurrent(NULL,NULL); SwapBuffers(hDC);}我怎么没有看到HGLRC的赋值过程?wglCreateContext(hDC);

Delphi中有没有OpenGL现成的控件

GLPanel也能用,下面是源码,给大家共享: unit GLPanel; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls,OpenGL,Printers; type TGLPanel = class(TCustomPanel) private { Private declarations } //DC: HDC; RC: HGLRC; procedure initDC; procedure initGL; procedure PreparePixelFormat(var DC: HDC); protected { Protected declarations } FOnPaint:TNotifyEvent; FOnInit:TNotifyEvent; FOnPreInit:TNotifyEvent; FOnResize:TNotifyEvent; procedure Paint;override; procedure Resize;override; procedure WMDestroy(var Msg: TWMDestroy);message WM_DESTROY; procedure WMCreate(var Msg:TWMCreate); message WM_CREATE; public { Public declarations } DC: HDC; constructor Create(Owner:TComponent);override; procedure SaveToBMPFile(FileName: String); procedure PrintIt; published { Published declarations } property Alignment; property Align; property DragCursor; property DragMode; property Enabled; property ParentFont; property ParentShowHint; property PopupMenu; property ShowHint; property TabOrder; property TabStop; property Visible; property OnClick; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEndDrag; property OnEnter; property OnExit; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDrag; property OnInit:TNotifyEvent read FOnInit write FOnInit; property OnPreInit:TNotifyEvent read FOnPreInit write FOnPreInit; property OnResize:TNotifyEvent read FOnResize write FOnResize; property OnPaint:TNotifyEvent read FOnPaint write FOnPaint; end; procedure Register; implementation procedure Register; begin RegisterComponents("Samples", [TGLPanel]); end; //--------------------------------------------- constructor TGLPanel.Create; begin inherited; end; //--------------------------------------------- procedure TGLPanel.WMDestroy(var Msg: TWMDestroy); begin wglMakeCurrent(0, 0); wglDeleteContext(RC); ReleaseDC(Handle, DC); end; //--------------------------------------------------- procedure TGLPanel.initDC; begin DC := GetDC(Handle); PreparePixelFormat(DC); end; procedure TGLPanel.initGL; begin glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); gluPerspective(45.0, self.ClientWidth/self.ClientHeight, 1.0, 500.0); //glOrtho(-1, 1, -1, 1, -1, 50); glMatrixMode(GL_MODELVIEW); glLoadIdentity; glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); glShadeModel(GL_SMOOTH); gluLookAt(0, 0, 6, 0, 0, 0, 0, 1, 0); SwapBuffers(DC); end; //--------------------------------------------- procedure TGLPanel.PreparePixelFormat(var DC: HDC); var PFD : TPixelFormatDescriptor; ChosenPixelFormat : Integer; begin FillChar(PFD, SizeOf(TPixelFormatDescriptor), 0); with PFD do begin nSize := SizeOf(TPixelFormatDescriptor); nVersion := 1; dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; iPixelType := PFD_TYPE_RGBA; cColorBits := 16; // 16位颜色 cDepthBits := 32; // 32位深度缓冲 iLayerType := PFD_MAIN_PLANE; { Should be 24, but we must allow for the clunky WKU boxes } end; ChosenPixelFormat := ChoosePixelFormat(DC, @PFD); if ChosenPixelFormat = 0 then Raise Exception.Create("ChoosePixelFormat failed!"); SetPixelFormat(DC, ChosenPixelFormat, @PFD); end; procedure TGLPanel.WMCreate(var Msg:TWMCreate); begin //在这里做初始化工作 //修改DC的象素格式,使之支持OpenGL绘制 initDC; RC := wglCreateContext(DC); if Assigned(FOnInit) then begin if (wglMakeCurrent(DC,RC)=false) then ShowMessage("wglMakeCurrent:" + IntToStr (GetLastError)); FOnInit(self); end; wglMakeCurrent(DC, RC); //初始化GL绘制系统 initGL; end; //--------------------------------------------------------------------------- procedure TGLPanel.Paint; begin //TCustomPanel::Paint(); if Assigned(FOnPaint) then begin wglMakeCurrent(DC,RC); FOnPaint(self); SwapBuffers(DC); end; end; //--------------------------------------------------------------------------- procedure TGLPanel.Resize; begin inherited; if Assigned(FOnResize) then begin wglMakeCurrent(DC,RC); glViewport(0,0,ClientWidth,ClientHeight); FOnResize(self); end; end; procedure TGLPanel.SaveToBMPFile(FileName: String); var BitMap : TBitmap; begin Bitmap:= TBitmap.Create; BitMap.Height := Height; BitMap.Width := Width; BringToFront; Paint; BitMap.Canvas.CopyRect(ClientRect ,Canvas,ClientRect); BitMap.SaveToFile(FileName); //delete BitMap; end; procedure TGLPanel.PrintIt; var Bitmap:TBitMap; XPixelsPerInch,YPixelsPerInch:integer; Rect:TRECT; PrintDlg:TPrintDialog; begin PrintDlg:=TPrintDialog.Create(self); if PrintDlg.Execute then begin BitMap := TBitmap.Create; BitMap.Height:= Height; BitMap.Width := Width; BringToFront; Paint; BitMap.Canvas.CopyRect(ClientRect,Canvas,ClientRect); XPixelsPerInch:=GetDeviceCaps(Printer.Handle,LOGPIXELSX); YPixelsPerInch:=GetDeviceCaps(Printer.Handle,LOGPIXELSY); Rect.left :=round(0.18*XPixelsPerInch); Rect.top :=round(0.18*YPixelsPerInch); //根据需要调整right/bottom可以达到按比例打印或打满整纸等效果 //必要时可使用GetDeviceCaps(Printer.Handle,HORZRES/VERTRES) //查询相关信息 Rect.right :=BitMap.Width+Rect.left; Rect.bottom:=BitMap.Height+Rect.right; Printer.BeginDoc; Printer.Canvas.CopyRect(Rect,BitMap.Canvas,ClientRect); Printer.EndDoc; end; //if(dlg.execute) PrintDlg.Destroy; end; end.

如何在vc++环境下建立OpenGL程序

你说的是MFC还是WIN32??我假设你的编译器是vc++6.01.加入头文件#include <glglut.h>#include <glgl.h>#include <glglaux.h>2.alt+f7在link选项卡添加opengl32.lib glu32.lib glaux.lib就这样了吧。关键不知道你想建立什么项目,这很让人纠结

vb OpenGL 程序修改

你图片框的AutoRedraw有没有设置成true?

关于魔兽用opengl模式玩!

  概述  [编辑本段]  OpenGL 是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”。虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。  OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D图形设计软件制作的DFX和3DS模型文件转换成OpenGL的顶点数组。  在OpenGL的基础上还有Open Inventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用。其中,Open Inventor应用最为广泛。该软件是基于OpenGL面向对象的工具包,提供创建交互式3D图形应用程序的对象和方法,提供了预定义的对象和用于交互的事件处理模块,创建和编辑3D场景的高级应用程序单元,有打印对象和用其它图形格式交换数据的能力。  OpenGL的发展一直处于一种较为迟缓的态势,每次版本的提高新增的技术很少,大多只是对其中部分做出修改和完善。1992年7月,SGI公司发布了 OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。1995年OpenGL的1.1版本面市,该版本比1.0的性能有许多提高,并加入了一些新的功能。其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,该语言是“OpenGL 2.0”的底核,用于着色对象、顶点着色以及片断着色技术的扩展功能。  OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3DLabs。2.0版本首先要做的是与旧版本之间的完整兼容性,同时在顶点与像素及内存管理上与DirectX共同合作以维持均势。OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全兼容的新功能所组成(如图一)。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的扩展指令集做一次彻底的精简。此外,硬件可编程能力的实现也提供了一个更好的方法以整合现有的扩展指令。  目前,随着DirectX的不断发展和完善,OpenGL的优势逐渐丧失,至今虽然已有3Dlabs提倡开发的2.0版本面世,在其中加入了很多类似于DirectX中可编程单元的设计,但厂商的用户的认知程度并不高,未来的OpenGL发展前景迷茫。  Open GL现状  [编辑本段]  Open GL仍然是唯一能够取代微软对3D图形技术的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已经不再以任何让微软不悦的方式推广Open GL,因而它存在较高的风险。游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用Open GL。因此,硬件开发商正在设法加强对它的支持。Direct3D目前还不能支持高端的图形设备和专业应用; Open GL在这些领域占据着统治地位。最后,开放源码社区(尤其是Mesa项目)一直致力于为任何类型的计算机(无论它们是否使用微软的操作系统)提供Open GL支持。  高级功能  [编辑本段]  OpenGL被设计为只有输出的,所以它只提供渲染功能。核心API没有窗口系统、音频、打印、键盘/鼠标或其它输入设备的概念。虽然这一开始看起来像是一种限制,但它允许进行渲染的代码完全独立于他运行的操作系统,允许跨平台开发。然而,有些整合于原生窗口系统的东西需要允许和宿主系统交互。这通过下列附加API实现:  * GLX - X11(包括透明的网络)  * WGL - Microsoft Windows  * AGL - Apple MacOS  另外,GLUT库能够以可移植的方式提供基本的窗口功能。  OpenGL编程入门  [编辑本段]  OpenGL作图非常方便,故日益流行,但对许多人来说,是在微机上进行的,首先碰到的问题是,如何适应微机环境。这往往是最关键的一步,虽然也是最初级的。一般的,我不建议使用glut 包.那样难以充分发挥 windows 的界面上的功能.  下面介绍如何在 VC++ 上进行 OpenGL 编程。 OpenGL 绘图的一般过程可以看作这样的,先用 OpenGL 语句在 OpenGL 的绘图环境 RenderContext (RC)中画好图, 然后再通过一个 Swap buffer 的过程把图传给操作系统的绘图环境 DeviceContext (DC)中,实实在在地画出到屏幕上.  下面以画一条 Bezier 曲线为例,详细介绍VC++ 上 OpenGL编程的方法。文中给出了详细注释,以便给初学者明确的指引。一步一步地按所述去做,你将顺利地画出第一个 OpenGL 平台上的图形来。  一、产生程序框架 Test.dsw  New Project | MFC Application Wizard (EXE) | "Test" | OK  *注* : 加“”者指要手工敲入的字串  二、导入 Bezier 曲线类的文件  用下面方法产生 BezierCurve.h BezierCurve.cpp 两个文件:  WorkSpace | ClassView | Test Classes| <右击弹出> New Class | Generic Class(不用MFC类) | "CBezierCurve" | OK  三、编辑好 Bezier 曲线类的定义与实现  写好下面两个文件:  BezierCurve.h BezierCurve.cpp  四、设置编译环境:  1. 在 BezierCurve.h 和 TestView.h 内各加上:  #include <GL/gl.h>  #include <GL/glu.h>  #include <GL/glaux.h>  2. 在集成环境中  Project | Settings | Link | Object/library module | "opengl32.lib glu32.lib glaux.lib" | OK  五、设置 OpenGL 工作环境:(下面各个操作,均针对 TestView.cpp )  1. 处理 PreCreateWindow(): 设置 OpenGL 绘图窗口的风格  cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CS_OWNDC;  2. 处理 OnCreate():创建 OpenGL 的绘图设备。  OpenGL 绘图的机制是: 先用 OpenGL 的绘图上下文 Rendering Context (简称为 RC )把图画好,再把所绘结果通过 SwapBuffer() 函数传给 Window 的 绘图上下文 Device Context (简记为 DC).要注意的是,程序运行过程中,可以有多个 DC,但只能有一个 RC。因此当一个 DC 画完图后,要立即释放 RC,以便其它的 DC 也使用。在后面的代码中,将有详细注释。  int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)  {  if (CView::OnCreate(lpCreateStruct) == -1)  return -1;  myInitOpenGL();  return 0;  }  void CTestView::myInitOpenGL()  {  m_pDC = new CClientDC(this); //创建 DC  ASSERT(m_pDC != NULL);  if (!mySetupPixelFormat()) //设定绘图的位图格式,函数下面列出  return;  m_hRC = wglCreateContext(m_pDC->m_hDC);//创建 RC  wglMakeCurrent(m_pDC->m_hDC, m_hRC); //RC 与当前 DC 相关联  } //CClient * m_pDC; HGLRC m_hRC; 是 CTestView 的成员变量  BOOL CTestView::mySetupPixelFormat()  {//我们暂时不管格式的具体内容是什么,以后熟悉了再改变格式  static PIXELFORMATDESCRIPTOR pfd =  {  sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd  1, // version number  PFD_DRAW_TO_WINDOW | // support window  PFD_SUPPORT_OPENGL | // support OpenGL  PFD_DOUBLEBUFFER, // double buffered  PFD_TYPE_RGBA, // RGBA type  24, // 24-bit color depth  0, 0, 0, 0, 0, 0, // color bits ignored  0, // no alpha buffer  0, // shift bit ignored  0, // no accumulation buffer  0, 0, 0, 0, // accum bits ignored  32, // 32-bit z-buffer  0, // no stencil buffer  0, // no auxiliary buffer  PFD_MAIN_PLANE, // main layer  0, // reserved  0, 0, 0 // layer masks ignored  };  int pixelformat;  if ( (pixelformat = ChoosePixelFormat(m_pDC->m_hDC, &pfd)) == 0 )  {  MessageBox("ChoosePixelFormat failed");  return FALSE;  }  if (SetPixelFormat(m_pDC->m_hDC, pixelformat, &pfd) == FALSE)  {  MessageBox("SetPixelFormat failed");  return FALSE;  }  return TRUE;  }  3. 处理 OnDestroy()  void CTestView::OnDestroy()  {  wglMakeCurrent(m_pDC->m_hDC,NULL); //释放与m_hDC 对应的 RC  wglDeleteContext(m_hRC); //删除 RC  if (m_pDC)  delete m_pDC; //删除当前 View 拥有的 DC  CView::OnDestroy();  }  4. 处理 OnEraseBkgnd()  BOOL CTestView::OnEraseBkgnd(CDC* pDC)  {  // TODO: Add your message handler code here and/or call default  // return CView::OnEraseBkgnd(pDC);  //把这句话注释掉,若不然,Window  //会用白色北景来刷新,导致画面闪烁  return TRUE;//只要空返回即可。  }  5. 处理 OnDraw()  void CTestView::OnDraw(CDC* pDC)  {  wglMakeCurrent(m_pDC->m_hDC,m_hRC);//使 RC 与当前 DC 相关联  myDrawScene( ); //具体的绘图函数,在 RC 中绘制  SwapBuffers(m_pDC->m_hDC);//把 RC 中所绘传到当前的 DC 上,从而  //在屏幕上显示  wglMakeCurrent(m_pDC->m_hDC,NULL);//释放 RC,以便其它 DC 进行绘图  }  void CTestView::myDrawScene( )  {  glClearColor(0.0f,0.0f,0.0f,1.0f);//设置背景颜色为黑色  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);  glPushMatrix();  glTranslated(0.0f,0.0f,-3.0f);//把物体沿(0,0,-1)方向平移  //以便投影时可见。因为缺省的视点在(0,0,0),只有移开  //物体才能可见。  //本例是为了演示平面 Bezier 曲线的,只要作一个旋转  //变换,可更清楚的看到其 3D 效果。  //下面画一条 Bezier 曲线  bezier_curve.myPolygon();//画Bezier曲线的控制多边形  bezier_curve.myDraw(); //CBezierCurve bezier_curve  //是 CTestView 的成员变量  //具体的函数见附录  glPopMatrix();  glFlush(); //结束 RC 绘图  return;  }  6. 处理 OnSize()  void CTestView::OnSize(UINT nType, int cx, int cy)  {  CView::OnSize(nType, cx, cy);  VERIFY(wglMakeCurrent(m_pDC->m_hDC,m_hRC));//确认RC与当前DC关联  w=cx;  h=cy;  VERIFY(wglMakeCurrent(NULL,NULL));//确认DC释放RC  }  7 处理 OnLButtonDown()  void CTestView::OnLButtonDown(UINT nFlags, CPoint point)  {  CView::OnLButtonDown(nFlags, point);  if(bezier_curve.m_N>MAX-1)  {  MessageBox("顶点个数超过了最大数MAX=50");  return;  }  //以下为坐标变换作准备  GetClientRect(&m_ClientRect);//获取视口区域大小  w=m_ClientRect.right-m_ClientRect.left;//视口宽度 w  h=m_ClientRect.bottom-m_ClientRect.top;//视口高度 h  //w,h 是CTestView的成员变量  centerx=(m_ClientRect.left+m_ClientRect.right)/2;//中心位置,  centery=(m_ClientRect.top+m_ClientRect.bottom)/2;//取之作原点  //centerx,centery 是 CTestView 的成员变量  GLdouble tmpx,tmpy;  tmpx=scrx2glx(point.x);//屏幕上点坐标转化为OpenGL画图的规范坐标  tmpy=scry2gly(point.y);  bezier_curve.m_Vertex[bezier_curve.m_N].x=tmpx;//加一个顶点  bezier_curve.m_Vertex[bezier_curve.m_N].y=tmpy;  bezier_curve.m_N++;//顶点数加一  InvalidateRect(NULL,TRUE);//发送刷新重绘消息  }  double CTestView::scrx2glx(int scrx)  {  return (double)(scrx-centerx)/double(h);  }  double CTestView::scry2gly(int scry)  {  }  附录:  1.CBezierCurve 的声明: (BezierCurve.h)  class CBezierCurve  {  public:  myPOINT2D m_Vertex[MAX];//控制顶点,以数组存储  //myPOINT2D 是一个存二维点的结构  //成员为Gldouble x,y  int m_N; //控制顶点的个数  public:  CBezierCurve();  virtual ~CBezierCurve();  void bezier_generation(myPOINT2D P[MAX],int level);  //算法的具体实现  void myDraw();//画曲线函数  void myPolygon(); //画控制多边形  };  2. CBezierCurve 的实现: (BezierCurve.cpp)  CBezierCurve::CBezierCurve()  {  m_N=4;  m_Vertex[0].x=-0.5f;  m_Vertex[0].y=-0.5f;  m_Vertex[1].x=-0.5f;  m_Vertex[1].y=0.5f;  m_Vertex[2].x=0.5f;  m_Vertex[2].y=0.5f;  m_Vertex[3].x=0.5f;  m_Vertex[3].y=-0.5f;  }  CBezierCurve::~CBezierCurve()  {  }  void CBezierCurve::myDraw()  {  bezier_generation(m_Vertex,LEVEL);  }  void CBezierCurve::bezier_generation(myPOINT2D P[MAX], int level)  { //算法的具体描述,请参考相关书本  int i,j;  level--;  if(level<0)return;  if(level==0)  {  glColor3f(1.0f,1.0f,1.0f);  glBegin(GL_LINES); //画出线段  glVertex2d(P[0].x,P[0].y);  glVertex2d(P[m_N-1].x,P[m_N-1].y);  glEnd();//结束画线段  return; //递归到了最底层,跳出递归  }  myPOINT2D Q[MAX],R[MAX];  for(i=0;i {  Q.x=P.x;  Q.y=P.y;  }  for(i=1;i<m_N;i++)  {  R[m_N-i].x=Q[m_N-1].x;  R[m_N-i].y=Q[m_N-1].y;  for(j=m_N-1;j>=i;j--)  {  Q[j].x=(Q[j-1].x+Q[j].x)/double(2);  Q[j].y=(Q[j-1].y+Q[j].y)/double(2);  }  }  R[0].x=Q[m_N-1].x;  R[0].y=Q[m_N-1].y;  bezier_generation(Q,level);  bezier_generation(R,level);  }  void CBezierCurve::myPolygon()  {  glBegin(GL_LINE_STRIP); //画出连线段  glColor3f(0.2f,0.4f,0.4f);  for(int i=0;i<m_N;i++)  {  glVertex2d(m_Vertex.x,m_Vertex.y);  }  glEnd();//结束画连线段  }  OpenGL与DirectX的区别  [编辑本段]  OpenGL 只是图形函数库。  DirectX 包含图形, 声音, 输入, 网络等模块。  OpenGL稳定,可跨平台使用。DirectX仅能用于Windows系列平台,包括Windows Mobile/CE系列以及XBOX/XBOX360。  ----------------------------------------------------------------------------------------------  1995年至1996年,微软实行了一项新计划,以支持在Windows95上运行游戏,目标是把市场扩展到被任天堂和世嘉控制的游戏领域。然而,微软不想用已经在NT上提供的OpenGL技术。微软收购了Rendermorphics,Ltd.并得到他的被称作RealityLab的3D API。经重新整理,微软发布了新的3D API——Direct3D。  微软,推行Direct3D,冻结OpenGL!  微软当时拒绝了在Window95上支持OpenGL。不止如此,微软采取异常手段收回对OpenGL的MCD驱动接口的支持,以致硬件厂商不得不放弃已经进入最后测试的OpenGL驱动。微软的市场部门开始向游戏开发商、硬件厂商、新闻出版机构推销Direct3D,同时排斥OpenGL。  API之战!  Silicon Graphics和很多OpenGL用户都依赖OpenGL创新且高性能的技术。但很明显微软打算用Direct3D代替OpenGL,尽管D3D有很多问题而且不能像OpenGL那样被硬件厂商扩展。Silicon Graphics决定在1996 SIGGRAPH会议上作一项演示。演示证明OpenGL至少和D3D一样快,从而驳倒微软的市场论调。因为OpenGL是业界公认标准,比D3D功能丰富,而且图像质量要高一些,所以演示在计算机图形和游戏开发社区导致了激烈论战。  游戏开发者要求OpenGL和D3D站在同等地位!  当技术和市场问题暴露,强烈的支持OpenGL行动开始了。Doom的开发者John Carmack声明拒绝D3D,Chris Hecker在游戏开发杂志上发表了两套API的全面分析,移微软应放弃D3D为结论。游戏开发者先后两次向微软递交请愿书。第一次由56名首席游戏开发者要求微软发行OpenGL MCD驱动,但未成功,因为会让OpenGL与D3D竞争。第二次的公开信由254人签名开始,截止时达到1400人。微软的回答仍是重申旧市场立场。尽管请愿者清楚的要求两套API同等竞争以促进发展,微软却以增加D3D的投资、更加减少OpenGL的投资为回应。  Fahrenheit——D3D与OpenGL的合并?  Silicon Graphics,Microsoft, HP,Intel达成协议联合开发下一代3D API——Fahrenheit。但不了了之,因为微软的打算是把OpenGL的技术用到D3D里并且以此之名驱除OpenGL的威胁。(估计 DirectX 8 Graphics即是剩下微软独自开发的Fahrenheit,吸收了OpenGL的很多东西。)  OpenGL豪气不减当年!  OpenGL依然是唯一能与微软单独控制的D3D对立的API,尽管Silicon Graphics不再以任何微软不能接受的方式推行OpenGL。游戏开发这是独立的,并且很多关键人物在用OpenGL,因此,硬件厂商正努力提高对其支持。D3D仍不能支持高端图像和专业应用,而OpenGL主宰着这些土地。在开放原码社区,Mesa项目正提供独立于微软的OpenGL驱动。  译者注:表面上好像D3D比OpenGL支持更多的功能,其实由于D3D不支持硬件扩展,如硬件全景阴影,硬件渲染顺序无关半透明材质等新技术根本无法使用,而D3D(特指D3D8)本身提供的功能只有一小部分能在使用HAL且硬件不支持时模拟,你要用大量代码分析硬件能力和采取不同策略

OpenGL是什么?

OpenGL三维图形标准是由AT&T公司UNIX软件实验室、IBM 、DEC、SUN、HP、Microsoft和SGI等多家公司在GL图形库标准的基础 上联合推出的开放式图形库,它使在微机上实现三维真实 感图形的生成与显示成为可能。由于OpenGL是开放的图形标 准,用户原先在UNIX下开发的OpenGL图形软件很容易移植到微 机上的WindowsNT/95上。笔者在VisualC++4.1(以下简称VC)集 成环境下,开发了基于OpenGL的三维真实感图形应用程序,现 介绍如下。 微机上的OpenGL开发环境 基于OpenGL标准开发的应用程序必须运行于32位Windows 平台下,如WindowsNT或Windows95环境;而且运行时还需有动态 链接库OpenGL32.DLL、Glu32.DLL,这两个文件在安装WindowsNT时已 自动装载到C:WINNTSYSTEM32目录下(这里假定用户将WindowsNT 安装在C盘上);而对于使用Windows95平台的用户,则需手工将 两个动态库复制到Windows95目录的SYSTEM子目录中。安装了 WindowsNT/95和VC4.1后,用户就具备了基于OpenGL开发三维图 形软件的基本条件。 OpenGL程序设计的基本步骤 1.OpenGL在WindowsNT下的运行机制 OpenGL工作在客户机/服务器模式下,当客户方(即基 于OpenGL标准开发的应用程序)向服务器(OpenGL核心机制)发出 命令时,由服务器负责解释这些命令。通常情况下,客户方 和服务器是运行在同一台微机上的。由于OpenGL的运行机制 是客户机/服务器模式,这使得用户能够十分方便地在网 络环境下使用OpenGL,OpenGL在WindowsNT上的这种实现方式通常 称为网络透明性。 OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中, 客户机中的所有OpenGL函数调用,都被传送到服务器上,由 WinSrv.DLL实现功能,再将经过处理的指令发送到Win32设备驱 动接口(DDI),从而实现在计算机屏幕上产生图像。 若使用OpenGL图形加速卡,则上述机制中将添加两个 驱动器:OpenGL可装载客户模块(OpenGLICD)将安装在客户端;硬 件指定DDI将安装在服务器端,与WinDDI同一级别。 2.OpenGL的库函数 开发基于OpenGL的应用程序,必须先了解OpenGL的库函 数。OpenGL函数命令方式十分有规律,每个库函数均有前缀gl 、glu、aux,分别表示该函数属于OpenGL基本库、实用库或辅助 库。WindowsNT下的OpenGL包含了100多个核心函数,均以gl作为前 缀,同时还支持另外四类函数: OpenGL实用库函数:43个,以glu作为前缀; OpenGL辅助库函数:31个,以aux作为前缀; Windows专用库函数(WGL):6个,以wgl作为前缀; Win32API函数(WGL):5个,无前缀。 OpenGL的115个核心函数提供了最基本的功能,可以实 现三维建模、建立光照模型、反走样、纹理映射等;OpenGL实 用库函数在核心函数的上一层,这类函数提供了简单的调 用方法,其实质是调用核心函数,目的是减轻开发者的编程 工作量;OpenGL辅助库函数是一些特殊的函数,可以供初学者 熟悉OpenGL的编程机制,然而使用辅助库函数的应用程序只 能在Win32环境中使用,可移植性较差,所以开发者应尽量避 免使用辅助库函数;Windows专用库函数(WGL)主要针对WindowsNT /95环境的OpenGL函数调用;Win32API函数用于处理像素存储格 式、双缓存等函数调用。 3.VC环境下基于OpenGL的编程步骤 下面介绍在VC环境中建立基于Opeetting菜单选项,在Link栏的Lib输入域中 添加openg132.lib、glu32.lib,若需使用OpenGL的辅助库函数,则还 需添加glaux.lib。 (3)选择View/ClassWizard菜单选项,打开MFC对话框,在 ClassName栏中选择CMyTestView类,进行以下操作: 选择WM_CREATE消息,鼠标单击EditCode,将OpenGL初始化代码 添加到OnCreate()函数中: /*定义像素存储格式*/ PIXELFORMATDESCRIPTORpfd= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0,0,0,0,0,0,0 32, 0,0, PFD_MAIN_PLANE, 0, 0,0,0, } CCLientdc(this); intpixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd); BOOLsuccess=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd); m_hRC=wglCreateContext(dc.m_hDC); 选择WM_DESTORY消息,在OnDestory()中添加以下代码: wglDeleteContext(m_hRC); 在MyTestView.cpp中,将以下代码添加到PreCreateWindows()函数中: cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS; OpenGL只对WS_CLIPCHILDREN|WS_CLIPSIBLINGS类型窗口有效; 在MyTestView.cpp中,将以下代码添加到OnDraw()函数中: wglMakeCurrent(pDC->m_hDC,m_hRC); DrawScene();//用户自定义函数,用于绘制三维场景; wglMakeCurrent(pDC->m_hDC,NULL); 在MyTestView.cpp中,添加成员函数DrawScene(): voidCMyTestView::DrawScene() {/*绘制三维场景*/} (4)在MyTestView.h中包含以下头文件并添加类成员说明: #include #include #include 在CTestView类中的protected:段中添加成员变量声明: HGLRCm_hRC; 同时添加成员函数声明: DrawScene(); 这样,一个基于OpenGL标准的程序框架已经构造好,用 户只需在DrawScene()函数中添加程序代码即可。 建立三维实体模型 三维实体建模是整个图形学的基础,要生成高逼真 度的图像,首先要生成高质量的三维实体模型。 OpenGL中提供了十几个生成三维实体模型的辅助库函 数,这些函数均以aux作为函数名的前缀。简单的模型,如球 体、立方体、圆柱等可以使用这些辅助函数来实现,如 auxWireSphere(GLdoubleradius)(绘制一半径为radius的网状球体)。 但是这些函数难以满足建立复杂三维实体的需要,所以用 户可以通过其它建模工具(如3DS等)来辅助建立三维实体模 型数据库。笔者在三维实体的建模过程中采用3DS提供的2D Shape、3DLofter和3DEditor进行模型的编辑,最后通过将模型数 据以DXF文件格式输出存储供应用程序使用。 真实感图形的绘制 1.定义光照模型和材质 (1)光源。OpenGL提供了一系列建立光照模型的库函 数,使用户可以十分方便地在三维场景中建立所需的光照 模型。OpenGL中的光照模型由环境光(AmbientLight)、漫射光 (DiffuseLight)、镜面反射光(SpecularLight)等组成,同时还可设 置光线衰减因子来模拟真实的光源效果。 例如,定义一个黄色光源如下: GlfloatLight_position[]={1.0,1.0,1.0,0.0,}; GlfloatLight_diffuse[]={1.0,1.0,0.0,1.0,}; glLightfv(GL_LIGHT0,GL_POSTTION,light_position);//定义光源位置 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);//定义光源漫射光 光源必须经过启动后才会影响三维场景中的实体,可以通过以下指令使光源有效:< glEnable(LIGHTING);//启动光照模型; glEnable(GL_LIGHT0);//使光源GL_LIGHT0有效; OpenGL中一共可以定义GL_LIGHT0~GL_LIGHT7八个光源。 (2)材质。OpenGL中的材质是指构成三维实体的材料在 光照模型中对于红、绿、蓝三原色的反射率。与光源的定义 类似,材质的定义分为环境、漫射、镜面反射成分,另外还 有镜面高光指数、辐射成分等。通过对三维实体的材质定义 可以大大提高应用程序所绘制的三维场景的逼真程度。例 如: /*设置材质的反射成分*/ GLfloatmat_ambient[]={0.8,0.8,0.8,1.0}; GLfloatmat_diffuse[]={0.8,0.0,0.8,1.0};/*紫色*/ GLfloatmat_specular[]={1.0,0.0,1.0,1.0};/*镜面高光亮紫色*/ GLfloatmat_shiness[]={100.0};/*高光指数*/ glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);/*定义环境光反射率*/ glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);/*定义漫射光反射率*/ glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);/*定义镜面光反射率*/ glMaterialfv(GL_FRONT,GL_SHINESS,mat_shiness);/*定义高光指数*/ (3)材质RGB值与光源RGB值的关系。OpenGL中材质的颜色 与光照模型中光源的颜色含义略有不同。对于光源,R、G、B 值表示三原色在光源中所占有的比率;而对于材质定义,R、 G、B的值表示具有这种材质属性的物体对于三原色的反射 比率,场景中物体所呈现的颜色与光照模型、材质定义都相 关。例如,若定义的光源颜色是(Lr,Lg,Lb)=(1.0,1.0,1.0)(白光), 物体的材质颜色定义为(Mr,Mg,Mb)=(0.0,0.0,0.8),则最终到达人 眼的物体颜色应当是(Lr*Mr,Lg*Mg,Lb*Mb)=(0.0,0.0,0.8)(蓝色)。 2.读取三维模型数据 为了绘制三维实体,我们首先必须将预先生成的三 维实体模型从三维实体模型库中读出。下图描述了读取三 维实体模型的流程。 3.三维实体绘制 由于3DS的DXF文件中对于三维实体的描述是采用三角 形面片逼近的方法,而在OpenGL函数库中,提供了绘制三角形 面片的方法,所以为三维实体的绘制提供了方便。以下提供 了绘制三角形面片的方法: glBegin(TRANGLES);//定义三角形绘制开始 glVertexf((GLfloat)x1,(GLfloat)y1,(GLfloat)z1);//第一个顶点 glVertexf((GLfloat)x2,(GLfloat)y2,(GLfloat)z2);//第二个顶点 glVertexf((GLfloat)x3,(GLfloat)y3,(GLfloat)z3);//第三个顶点 glEnd();//绘制结束 为了提高三维实时动画的显示速度,我们利用了 OpenGL库中的显示列表(DisplayList)的功能,将三维场景中的实 体分别定义为单独的显示列表,预先生成三维实体。在图形 显示时,只需调用所需的显示列表即可显示相应的三维实 体,而不需要重新计算实体在场景中的坐标,避免了大量的 浮点运算。在调用显示列表前所作的旋转、平移、光照、材 质的设定都将影响显示列表中的三维实体的显示效果。具 体实现算法如下: for(ObjectNo=0;ObjectNo<实体个数;ObjectNo++) { glNewList(ObjectNo,GL_COMPILE);//创建第ObjectNo个实体的显示列表 for(Fac

用vb OpenGL 在picture中画一个三角形。

  要想在VB6.0中使用OpenGL绘图,必须先下载一个SDK,名字叫vbogl.tlb。  下载该文件后,直接在VB6.0“工程”-“引用”里面引用  1、在form中加入一个PictureBox控件  2、要在Windows里面使用OpenGL,必须先进行像素格式设置,函数代码如下  Dim hRC As Long"全局变量  "启用OGL  Sub EnableOpenGL(ghDC As Long)  On Error GoTo Err  Dim pfd As PIXELFORMATDESCRIPTOR "pfd像素格式设置.  ZeroMemory pfd, Len(pfd)  pfd.nSize = Len(pfd) "大小  pfd.nVersion = 1 "版本  pfd.dwFlags = PFD_DRAW_TO_WINDOW Or PFD_SUPPORT_OPENGL Or PFD_DOUBLEBUFFER "标志  pfd.iPixelType = PFD_TYPE_RGBA "像素类型  pfd.cColorBits = 24 "颜色位数  pfd.cDepthBits = 32 "位宽  pfd.iLayerType = PFD_MAIN_PLANE "图层类型  Dim PixFormat As Long  PixFormat = ChoosePixelFormat(ghDC, pfd) "选择设备中最匹配我们所设置的像素  SetPixelFormat ghDC, PixFormat, pfd "设置成当前的像素  hRC = wglCreateContext(ghDC) "建立翻译描述表  wglMakeCurrent ghDC, hRC "将建立的翻译描述表设置为当前  Exit Sub  Err:  MsgBox "Can"t create OpenGL context!", vbCritical, "Error"  End  End Sub  在工程的FORM的load中加入调用代码  Call EnableOpenGL(Picture1.hDC)  3、与启用对应的禁用  "禁用OGL  Sub DisableOpenGL()  wglMakeCurrent 0, 0  wglDeleteContext hRC  End Sub  在工程的form的unload中加入禁用代码  Call DisableOpenGL  4、绘图  Private Sub Display()  glClearColor 0#, 0#, 1#, 0# "清空颜色缓存的RGBA颜色值  glClear clrColorBufferBit "为绘下帧曲面清除缓冲区  glColor3f 0.8, 0.3, 0.5 "设置显示的字体颜色  glPushMatrix "依据当前模式(模式-视图矩阵)使矩阵入栈  glBegin glBeginModeConstants.bmPolygon "开始绘图,绘制一个三角形  glVertex2f -0.5, -0.5 "三角形的3个顶点  glVertex2f -0.5, 0.5  glVertex2f 0.5, -0.5  glEnd  glPopMatrix "依据当前模式(模式-视图矩阵)使矩阵出栈  SwapBuffers Picture1.hDC "切换缓存  End Sub  5、在PictureBox1的PAINT事件,调用显示的函数  Display

如何设置魔兽争霸opengl模式

在你的桌面上的魔兽快捷方式上单击右键,选属性,进入属性单击快捷方式选项卡,在目标一栏的配置符最后加" -opengl"(不包括引号),注意在"-"之前一定要加上一个英文状态下的空格,不然是连游戏也进不去的。最后点应用,确定.在桌面上刷新两次进游戏。扩展资料:高级功能OpenGL被设计为只有输出的,所以它只提供渲染功能。核心API没有窗口系统、音频、打印、键盘/鼠标或其它输入设备的概念。虽然这一开始看起来像是一种限制,但它允许进行渲染的代码完全独立于他运行的操作系统,允许跨平台开发。然而,有些整合于原生窗口系统的东西需要允许和宿主系统交互。这通过下列附加API实现:GLX - X11(包括透明的网络)WGL - Microsoft WindowsAGL - Apple MacOS另外,GLUT库能够以可移植的方式提供基本的窗口功能。参考资料:OpenGL—百度百科

openGL 是什么软件

OpenGL三维图形标准是由AT&T公司UNIX软件实验室、IBM 、DEC、SUN、HP、Microsoft和SGI等多家公司在GL图形库标准的基础 上联合推出的开放式图形库,它使在微机上实现三维真实 感图形的生成与显示成为可能。由于OpenGL是开放的图形标 准,用户原先在UNIX下开发的OpenGL图形软件很容易移植到微 机上的WindowsNT/95上。笔者在VisualC++4.1(以下简称VC)集 成环境下,开发了基于OpenGL的三维真实感图形应用程序,现 介绍如下。 微机上的OpenGL开发环境 基于OpenGL标准开发的应用程序必须运行于32位Windows 平台下,如WindowsNT或Windows95环境;而且运行时还需有动态 链接库OpenGL32.DLL、Glu32.DLL,这两个文件在安装WindowsNT时已 自动装载到C:WINNTSYSTEM32目录下(这里假定用户将WindowsNT 安装在C盘上);而对于使用Windows95平台的用户,则需手工将 两个动态库复制到Windows95目录的SYSTEM子目录中。安装了 WindowsNT/95和VC4.1后,用户就具备了基于OpenGL开发三维图 形软件的基本条件。 OpenGL程序设计的基本步骤 1.OpenGL在WindowsNT下的运行机制 OpenGL工作在客户机/服务器模式下,当客户方(即基 于OpenGL标准开发的应用程序)向服务器(OpenGL核心机制)发出 命令时,由服务器负责解释这些命令。通常情况下,客户方 和服务器是运行在同一台微机上的。由于OpenGL的运行机制 是客户机/服务器模式,这使得用户能够十分方便地在网 络环境下使用OpenGL,OpenGL在WindowsNT上的这种实现方式通常 称为网络透明性。 OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中, 客户机中的所有OpenGL函数调用,都被传送到服务器上,由 WinSrv.DLL实现功能,再将经过处理的指令发送到Win32设备驱 动接口(DDI),从而实现在计算机屏幕上产生图像。 若使用OpenGL图形加速卡,则上述机制中将添加两个 驱动器:OpenGL可装载客户模块(OpenGLICD)将安装在客户端;硬 件指定DDI将安装在服务器端,与WinDDI同一级别。 2.OpenGL的库函数 开发基于OpenGL的应用程序,必须先了解OpenGL的库函 数。OpenGL函数命令方式十分有规律,每个库函数均有前缀gl 、glu、aux,分别表示该函数属于OpenGL基本库、实用库或辅助 库。WindowsNT下的OpenGL包含了100多个核心函数,均以gl作为前 缀,同时还支持另外四类函数: OpenGL实用库函数:43个,以glu作为前缀; OpenGL辅助库函数:31个,以aux作为前缀; Windows专用库函数(WGL):6个,以wgl作为前缀; Win32API函数(WGL):5个,无前缀。 OpenGL的115个核心函数提供了最基本的功能,可以实 现三维建模、建立光照模型、反走样、纹理映射等;OpenGL实 用库函数在核心函数的上一层,这类函数提供了简单的调 用方法,其实质是调用核心函数,目的是减轻开发者的编程 工作量;OpenGL辅助库函数是一些特殊的函数,可以供初学者 熟悉OpenGL的编程机制,然而使用辅助库函数的应用程序只 能在Win32环境中使用,可移植性较差,所以开发者应尽量避 免使用辅助库函数;Windows专用库函数(WGL)主要针对WindowsNT /95环境的OpenGL函数调用;Win32API函数用于处理像素存储格 式、双缓存等函数调用。 3.VC环境下基于OpenGL的编程步骤 下面介绍在VC环境中建立基于Opeetting菜单选项,在Link栏的Lib输入域中 添加openg132.lib、glu32.lib,若需使用OpenGL的辅助库函数,则还 需添加glaux.lib。 (3)选择View/ClassWizard菜单选项,打开MFC对话框,在 ClassName栏中选择CMyTestView类,进行以下操作: 选择WM_CREATE消息,鼠标单击EditCode,将OpenGL初始化代码 添加到OnCreate()函数中: /*定义像素存储格式*/ PIXELFORMATDESCRIPTORpfd= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0,0,0,0,0,0,0 32, 0,0, PFD_MAIN_PLANE, 0, 0,0,0, } CCLientdc(this); intpixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd); BOOLsuccess=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd); m_hRC=wglCreateContext(dc.m_hDC); 选择WM_DESTORY消息,在OnDestory()中添加以下代码: wglDeleteContext(m_hRC); 在MyTestView.cpp中,将以下代码添加到PreCreateWindows()函数中: cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS; OpenGL只对WS_CLIPCHILDREN|WS_CLIPSIBLINGS类型窗口有效; 在MyTestView.cpp中,将以下代码添加到OnDraw()函数中: wglMakeCurrent(pDC->m_hDC,m_hRC); DrawScene();//用户自定义函数,用于绘制三维场景; wglMakeCurrent(pDC->m_hDC,NULL); 在MyTestView.cpp中,添加成员函数DrawScene(): voidCMyTestView::DrawScene() {/*绘制三维场景*/} (4)在MyTestView.h中包含以下头文件并添加类成员说明: #include #include #include 在CTestView类中的protected:段中添加成员变量声明: HGLRCm_hRC; 同时添加成员函数声明: DrawScene(); 这样,一个基于OpenGL标准的程序框架已经构造好,用 户只需在DrawScene()函数中添加程序代码即可。 建立三维实体模型 三维实体建模是整个图形学的基础,要生成高逼真 度的图像,首先要生成高质量的三维实体模型。 OpenGL中提供了十几个生成三维实体模型的辅助库函 数,这些函数均以aux作为函数名的前缀。简单的模型,如球 体、立方体、圆柱等可以使用这些辅助函数来实现,如 auxWireSphere(GLdoubleradius)(绘制一半径为radius的网状球体)。 但是这些函数难以满足建立复杂三维实体的需要,所以用 户可以通过其它建模工具(如3DS等)来辅助建立三维实体模 型数据库。笔者在三维实体的建模过程中采用3DS提供的2D Shape、3DLofter和3DEditor进行模型的编辑,最后通过将模型数 据以DXF文件格式输出存储供应用程序使用。 真实感图形的绘制 1.定义光照模型和材质 (1)光源。OpenGL提供了一系列建立光照模型的库函 数,使用户可以十分方便地在三维场景中建立所需的光照 模型。OpenGL中的光照模型由环境光(AmbientLight)、漫射光 (DiffuseLight)、镜面反射光(SpecularLight)等组成,同时还可设 置光线衰减因子来模拟真实的光源效果。 例如,定义一个黄色光源如下: GlfloatLight_position[]={1.0,1.0,1.0,0.0,}; GlfloatLight_diffuse[]={1.0,1.0,0.0,1.0,}; glLightfv(GL_LIGHT0,GL_POSTTION,light_position);//定义光源位置 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);//定义光源漫射光 光源必须经过启动后才会影响三维场景中的实体,可以通过以下指令使光源有效:< glEnable(LIGHTING);//启动光照模型; glEnable(GL_LIGHT0);//使光源GL_LIGHT0有效; OpenGL中一共可以定义GL_LIGHT0~GL_LIGHT7八个光源。 (2)材质。OpenGL中的材质是指构成三维实体的材料在 光照模型中对于红、绿、蓝三原色的反射率。与光源的定义 类似,材质的定义分为环境、漫射、镜面反射成分,另外还 有镜面高光指数、辐射成分等。通过对三维实体的材质定义 可以大大提高应用程序所绘制的三维场景的逼真程度。例 如: /*设置材质的反射成分*/ GLfloatmat_ambient[]={0.8,0.8,0.8,1.0}; GLfloatmat_diffuse[]={0.8,0.0,0.8,1.0};/*紫色*/ GLfloatmat_specular[]={1.0,0.0,1.0,1.0};/*镜面高光亮紫色*/ GLfloatmat_shiness[]={100.0};/*高光指数*/ glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);/*定义环境光反射率*/ glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);/*定义漫射光反射率*/ glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);/*定义镜面光反射率*/ glMaterialfv(GL_FRONT,GL_SHINESS,mat_shiness);/*定义高光指数*/ (3)材质RGB值与光源RGB值的关系。OpenGL中材质的颜色 与光照模型中光源的颜色含义略有不同。对于光源,R、G、B 值表示三原色在光源中所占有的比率;而对于材质定义,R、 G、B的值表示具有这种材质属性的物体对于三原色的反射 比率,场景中物体所呈现的颜色与光照模型、材质定义都相 关。例如,若定义的光源颜色是(Lr,Lg,Lb)=(1.0,1.0,1.0)(白光), 物体的材质颜色定义为(Mr,Mg,Mb)=(0.0,0.0,0.8),则最终到达人 眼的物体颜色应当是(Lr*Mr,Lg*Mg,Lb*Mb)=(0.0,0.0,0.8)(蓝色)。 2.读取三维模型数据 为了绘制三维实体,我们首先必须将预先生成的三 维实体模型从三维实体模型库中读出。下图描述了读取三 维实体模型的流程。 3.三维实体绘制 由于3DS的DXF文件中对于三维实体的描述是采用三角 形面片逼近的方法,而在OpenGL函数库中,提供了绘制三角形 面片的方法,所以为三维实体的绘制提供了方便。以下提供 了绘制三角形面片的方法: glBegin(TRANGLES);//定义三角形绘制开始 glVertexf((GLfloat)x1,(GLfloat)y1,(GLfloat)z1);//第一个顶点 glVertexf((GLfloat)x2,(GLfloat)y2,(GLfloat)z2);//第二个顶点 glVertexf((GLfloat)x3,(GLfloat)y3,(GLfloat)z3);//第三个顶点 glEnd();//绘制结束 为了提高三维实时动画的显示速度,我们利用了 OpenGL库中的显示列表(DisplayList)的功能,将三维场景中的实 体分别定义为单独的显示列表,预先生成三维实体。在图形 显示时,只需调用所需的显示列表即可显示相应的三维实 体,而不需要重新计算实体在场景中的坐标,避免了大量的 浮点运算。在调用显示列表前所作的旋转、平移、光照、材 质的设定都将影响显示列表中的三维实体的显示效果。具 体实现算法如下: for(ObjectNo=0;ObjectNo<实体个数;ObjectNo++) { glNewList(ObjectNo,GL_COMPILE);//创建第ObjectNo个实体的显示列表 for(Fac

ogc标准的wms服务和opengis的wms服务一样吗

是一样的,因为OGC标准是统一的,他下面的服务必须是一样的,不然这个行业就没有办法使用了。ArcGIS server发布的WMS服务,用openjs都可以调用的!

Modern OpenGL - 顶点数组、属性与绑定点(OpenGL 4.5+)

上一节 我们讲了如何在Modern OpenGL下渲染矩形体,但其中用到的主要是OpenGL 3.x中内容。OpenGL 4.x增添了很多新内容,并且一部分3.x的内容得到改进。本节中会详细讲解新版和与旧版的区别与联系,并给出应用最新技术的例子。 OpenGL 4.5中给了我们DSA,可以在调用方法时直接传入要操作的OpenGL对象,而不再需要绑定操作,更加高效。与之对应的,所有 glGen* 方法均不再使用,因为这些方法只生成了一个对象(实质上是分配了一个ID),并没有定义这个对象的类型。在4.5以前,一个对象的定义发生在首次绑定时。例如: 从OpenGL 4.5起,由于不再需要绑定操作,所有 创建 OpenGL对象的操作都被 glCreate* 所替代,例如: 如果依然使用 glGen* 而不进行首次绑定,则该OpenGL对象是无效对象,操作时会报出GL_INVALID_OPERATION错误。 Modern OpenGL渲染中必须使用VAO,它无处不在。VAO本身不存储任何顶点数据,它会保存我们要渲染时所需要的顶点的 定义、规格与配置 。一旦我们配置好了一个VAO,只要绑定它,就可以直接调用渲染函数,而不需要调用任何定义/配置类的函数。 顶点属性是顶点着色器(Vertex Shader)的输入。在Modern OpenGL中,我们必须自己定义我们需要哪些顶点属性。每定义的一个属性,都可以叫做通用顶点属性。与之对应的,在传统固定管线中,顶点着色器存在内置顶点属性,但它们都已经废弃。所以我们说的顶点属性都是指通用顶点属性,它们的名字、类型都是完全自定义的。例如,我们的顶点着色器: 顶点属性用 in 表示, location = 0 显式指定了属性索引(attribute index)是0,location不一定连续。属性名在这种情况下仅在shader内使用。 顶点缓冲绑定点是在一个VAO内共享的,我们可以将一种配置绑定到一个绑定点上,再将一个或多个顶点属性与之绑定,这样就可以随时切换顶点属性而不需要重新配置缓冲。也就是说,我们定义一个绑定点,和它如何从VBO中读取数据,这个定义信息会被存入VAO,关系图如下: 比如:我们定义0号绑定点对应12个字节大小,然后我们的VBO创建为vbo_first,它的数据是每12个字节一组顶点属性,那么offset是0,stride为12。如果它第8到20字节,28到40字节以此类推,是我们需要的数据的话,那么offset是8(第一组数据是8开始),stride是20(8到28是20, 20到40是20)。剩下的一个个8字节(0到8,20到28...)也许是其他地方需要的数据。因为一个VBO可以存任何东西,VBO用一个还是多个,数据怎么存放,可自由设置。 重点来了,虽然我们在shader中定义了顶点属性,但OpenGL不知道我们是如何定义的,也就不知道怎么把数据传给shader的attribute,所以我们必须指定它们。 第一个参数传入我们的VAO。attribindex传入属性索引,也就是顶点着色器中(location = 几)的几。 注意:上面的函数最终会把数据转成浮点型。如果使用 glVertexArrayAttribIFormat (多了一个I, Integer),则会转成整数类型,并且 type 只能 GL_BYTE , GL_UNSIGNED_BYTE , GL_SHORT , GL_UNSIGNED_SHORT , GL_INT 和 GL_UNSIGNED_INT 。这个方法不含 normalized 参数。 此外还有一个relativeoffset参数,相对偏移量,也就是在绑定点中的偏移量,而不是VBO中的偏移量。我们刚刚定义了绑定点0占据12个字节,这样的话我们可以把之前的 vec2 a_Pos 和 vec4 a_Color 都绑定到这个绑定点上,如果我们的VBO是前8个字节是坐标,后4个字节是颜色,那么就分别调用: 在VBO中存储后4个字节为RGBA颜色值,标准化到浮点型,因为unsigned int是0~255,所以转换时会除255得到shader中使用的颜色值。8是因为坐标2两个浮点值8字节,一个绑定点是12字节。 别忘了, glVertexArrayAttribFormat 只定义了属性格式,要绑定到绑定点上,还需要调用 glVertexArrayAttribBinding : 第一个参数是VAO,第二个是属性索引,第三个是绑定点的索引。这里我们就需要把0和1号属性全都绑定到0号绑定点: 假设我们顶点着色器中还有2号和3号属性,也是vec2和vec4。那么只需最开始调用glVertexArrayAttribFormat,然后在需要切换的时候调用glVertexArrayAttribBinding切换绑定即可。你会发现,我们并没有重新配置绑定点,也就是怎么从VBO中读取。而且,我们从来没绑定过VBO,它只是作为参数传入。 如果需要索引绘制(indexed drawing),我们还要将所使用的EBO配置进VAO: 这样一来,所有的配置都存进了VAO,由多个VBO存放顶点数据,只要绑定VAO即可渲染,渲染循环如下: 要更新顶点数据,只需在下一帧渲染开始前使用 glNamedBufferSubData 更新VBO即可。

opengl如何绘制一个三维平面

你好,下面是opengl绘制三维图像的代码。#include "stdafx.h"#include<GL/freeglut.h>#include<GLFW/glfw3.h>// 绘图棱锥void display(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 三维图形由三维空间中的三角形拼接而成 glBegin(GL_TRIANGLES); // 指定棱锥的四个顶点 GLfloat vertex[4][3] = { {0, 0, 0.5}, {0.2, 0.2, 0}, {-0.3, 0, 0}, {0, -0.3, 0} }; // 绘制三角形 glColor3f(0.5, 0.5, 0.9); for (int i = 0; i < 2; i++) { for (int j = i + 1; j < 3; j++) { for (int k = j + 1; k < 4; k++) { glVertex3fv(vertex[i]); glVertex3fv(vertex[j]); glVertex3fv(vertex[k]); } } } glEnd(); // 绘制顶点连线 glBegin(GL_LINES); glColor3f(1, 0, 0); for (int i = 0; i < 3; i++) { for (int j = i + 1; j < 4; j++) { glVertex3fv(vertex[i]); glVertex3fv(vertex[j]); } } glEnd(); glFlush();}int main(){ glfwInit(); GLFWwindow* window = glfwCreateWindow(400, 400, "hello, glfw", NULL, NULL); glfwMakeContextCurrent(window); glfwSwapInterval(10); while (glfwWindowShouldClose(window) == GL_FALSE) { // 绘制棱锥 display(); glfwSwapBuffers(window); glfwPollEvents(); } glfwDestroyWindow(window); glfwTerminate(); return 0;}

用C++或者OpenGL或者Ogre实现鼠标移动轨迹

这和OpenGL或Ogre有什么关系么。。用一个容器比如标准库的vector不断记录发给窗体的WM_MOUSEMOVE消息的坐标,然后依次绘制直线即可。用GDI的LineTo就搞定了。

ogre 和opengl 这两个对于新手来说学那个比较合适啊 这两者的区别是什么

opengl是底层的API了,跟它同级的还有directx。ogre可以说就是对opengl和directx的封装了,让你更好的去使用。初学还是学opengl吧,图形学的基础,了解了底层才能更好的去运用。ogre的资料肯定是没有opengl的多了。学opengl可以看《nehe的教程》配合《OPENGL编程指南》看。

OGRE与openGL Direct3D是什么关系?在三维可视化中作用是什么?

lz还是用ogre的sdk吧...不需要directx sdkogre是个3d引擎,可以用opengl也可以用directx渲染lz去看一下,写点东西就明白了

visual studio2005用c编写opengl 的时候出来 一个无法解析的外部命令

GL/glut.h中没有函数 glutCreatWindow 的声明。

《ThePenguinDictionaryofSociology》pdf下载在线阅读,求百度网盘云资源

《The Penguin Dictionary of Sociology》(Abercrombie, Nicholas)电子书网盘下载免费在线阅读链接:https://pan.baidu.com/s/1-FvDs2coSm-dxJevptaYyQ 提取码:nny8书名:The Penguin Dictionary of Sociology作者:Abercrombie, Nicholas出版社:Penguin出版年份:2006-12-12页数:496内容简介:The ultimate sociological resourceWritten by three eminent professors, this reference has been updated to reflect the shifts of sociological thought in the last five years, making it the most comprehensive, authoritative, and up-to-date dictionary of sociology available.

https://wellpeng.gitee.io的时间不对

解决方法如下:1、安装ntpdate。2、ntpdate不能直接使用,需要找到一个ntp服务器。3、使用ntpdate同步,注意因为修改系统时间需要修改系统文件所以需要sudo权限。4、然后用date命令看即可成功。

hey zhang peng we have a new classroom怎么读

uff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0cuff0c:

OpenGL与Direct3D的不同

OpenGL(全写Open Graphics Library)是个定义了一个跨程式语言、跨平台的编程介面的规格,它用於三维图象(二维的亦可]]。这个介面由近二百五十个不同的函数调用组成,用来从简单的图元绘制复杂的三维景象。在电子游戏工业裏,它是颇普遍的,并拿来跟Microsoft Windows上的Direct3D。(详见Direct3D对OpenGL)。OpenGL常用於CAD、虚拟实境、科学视觉化程式和电子游戏开发。OpenGL的高效实现(利用了图形加速硬体)存在於Windows,很多UNIX平台和MacOS。这些实现一般由显示设备厂商提供,而且非常依赖於该厂商提供的硬体。开放源代码库Mesa是一个纯基於软体的图形API,它的代码相容与OpenGL。但是,由於许可证的原因,它只声称是一个「非常相似」的API。OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些特别兴趣於建立一个统一的普遍可用的API的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems(Microsoft,创立成员之一,在2003年3月退出了)。

OpenGL 与 Direct3D,那个较好?

「Direct3D 」is part of Microsoft"s DirectX API. Direct3D is only available for Microsoft"s various Windows operating systems (Windows 95 and above) and is the base for the graphics API on the Xbox and Xbox 360 console systems. Direct3D is used to render three dimensional graphics in applications where performance is important such as games. Direct3D also allows applications to run fullscreen instead of embedded in a window though they can still run in a window if programmed for that feature. Direct3D uses hardware acceleration if it is available on the graphic board. The entire or part of the 3D rendering pipeline can be accelerated in hardware. Direct3D exposes the advanced graphics capabilities of 3D graphics hardware including z-buffering anti-aliasing alpha blending mipmapping atmospheric effects and perspective-correct texture mapping. Integration with other DirectX technologies enables Direct3D to deliver such features as video mapping hardware 3D rendering in 2D overlay planes and even sprites providing the use of 2D and 3D graphics in interactive media titles. Direct3D is a 3D API. That is it contains many mands for 3D rendering however since version 8 Direct3D has superseded the old DirectDraw framework and also taken reponsibility for the rendering of 2D graphics.[1] Microsoft strives to continually update Direct3D to support the latest technology available on 3D graphics cards. Direct3D offers full vertex sofare emulation but no pixel sofare emulation for features not available in hardware. For example if sofare programmed using Direct3D requires pixel shaders and the video card on the user"s puter does not support that feature Direct3D will not emulate it. The API does define a Reference Rasterizer (or REF device) which emulates a generic graphics card although it"s too slow to be used in any application to emulate pixel shaders and is usually ignored. Direct3D"s main petitor is OpenGL. There are numerous features and issues that proponents for either API disagree over see parison of Direct3D and OpenGL for a summary. 「OpenGL 」(Open Graphics Library) is a standard specification defining a cross-language cross-platform API for writing applications that produce 2D and 3D puter graphics. The interface consists of over 250 different function calls which can be used to draw plex three-dimensional scenes from simple primitives. OpenGL was developed by Silicon Graphics Inc. (SGI) in 1992[1] and is popular in the video game industry where it petes with Direct3D on Microsoft Windows platforms (see Direct3D vs. OpenGL). OpenGL is widely used in CAD virtual reality scientific visualization information visualization flight simulation and video game development. i fell Direct3D is good di 参考: m e 唔知你问咩比较好,so答你可能唔match 如果你讲用,而家多数人会用Direct3D,因为version新,support多game同sofare

OPENGL与DIRECT3D有啥区别?

一个软件加速 一个硬件加速

CS1.5显卡模式OpenGL和Direct3D有什么区别,用哪种比较好,大神们帮帮忙

OPEN那个不容易掉帧,就是不容易卡。D3D那个如果配置不好就会掉帧的,打起不流畅

direct3D和OpenGL有什么区别?玩游戏哪个更好

  Direct X 微软公司专为PC游戏开发的API,特点是与windows 95和Win-dows NT操作系统兼容性好。可绕过GDI直接进行支持该API的各种硬件的底层操作,大大提高了游戏的运行速度。由于要考虑与各方面的兼容性,Direct- X在3D图形方面的效率比较低,而且用起来比较麻烦。 ●OPENGL(开放式图形界面) 由Silicon Graphics公司(即大名鼎鼎的SG1)开发,能够在Windows 95-.WindowsNT.Macos.Beos.Os/2.以及Unix上应用的API。程序员可用这个接口程序来直接访问图形处理的硬件设备,产生高品质的3D效果。它除了提供许多图形运算功能外,也提供了不少图形处理功能。由于OpenGL起步较早,一直用于高档图表工作站,其它3D图形功能很强,超过Direct X许多,可最大限度地发挥3D芯片的巨大潜力。  (名词解释:什么叫做API?API是Application Program-ming Interface的缩写,中文意思是应用程序设计接口。对于编写支持各种硬件设备或操作系统的程序而言,A-PI是许多程序的大集合。一个3D API能让编程人员所设计的3D软件只要调用其API内的程序,API就会自动和硬件的驱动程序沟通,启动3D芯片内强大的3D图形处理功能。  目前几种主流的3D API有Direct X.OpenGL.3DR.Renserwart.BRender.Glide及Quickdraw 3D Rave等) 了解了以上的这些我们就不难理解,OPENGL和D3D的插件只是基于不同的API开发出来的,使用不同的程序内核而已,由于OPENGL对3D显卡性能挖掘的更深,因而已经成为了好的显卡同志的不二选择,这就是OPENGL 比D3D插件要求高的根本原因,也是其效果好的根本原因~……但,反观D3D,由于其基于DIRECT X的API内核,正如前所说各方面的兼容性比较好,尤其对低配制的同志无疑是个福音,这也是此插件受欢迎的原因吧~~~笑` 个人使用过程中有些须小的体验,感觉,D3D对系统资源要求比较少,精确模拟效果稍微差点,其他还是让人满意的。举个例子,在WE2002中,用D3D插件会在读盘时(也可以说读ISO时),画面显示为暗灰色,比起OPENGL完全模拟PS上的纯黑色,还是让人觉得有些须遗憾的~

D3D、OpenGL和软件加速有什么区别(opengl和d3d谁更流畅)

Direct3D是Microsoft公司的硬件API。而OpenGL则是开放性的硬件API。软件加速是不利用硬件加速,纯粹依赖CPU计算来生成游戏图像。Direct3D和OpenGL旗鼓相当,都支持着一系列优秀的游戏。它们的基本作用都是在硬件与游戏程序之前提供一个中间层,使得游戏程序能正确,高效地调用图形硬件(主要是你的显卡)来完成画面的绘制。它们的性能就取决于你的图形硬件。软件加速是无视你的图形硬件的。它们纯粹依靠CPU计算来生成画面。因此对显卡之类的硬件没有要求。它的性能和画质也因此极大地落后于Direct3D与OpenGL。

请问 在3d max中 OpenGL和Direct 3D这两种模式有什么区别和优缺点? 刚接触 一窍不通 请详述 谢谢

两种3D API 一般情况下建议使用 Direct 3D 微软的windows系统使用Direct 3D 模式非常流畅OpenGL 则比较卡,软件驱动的话 更卡一般只要是DX9.0以上的推荐使用Direct 3D 如果显卡太老了,不支持DX9.0 则使用OPENGLOpenGL可利用横跨许多平台包括微软视窗 Direct3D 是微软 私有 API 设计

请问什么是direct3D和OpenGL

玩CS的吧???建议用OPENGL

directX,direct3D,openGL,3D加速之间有什么关系吗,这些名词我都不懂啊?

Direct3D为DirectX的一部分,DirectX为一个综合的多媒体API,包括图形、声音、网络等。Direct3D则是DX的图形APIOpenGL是一个业界标准,和Direct3D都是图形API3D加速就是则是通过专门的硬件来处理3D数据以减轻CPU负担的意思,专门的硬件也就是显卡

OpenGL 是什么意思,我在显卡里看见的

分类: 电脑/网络 >> 硬件 问题描述: 如题 解析: OpenGL是OpenGraphicsLib的缩写,是一套三维图形处理库,也是该领域的工业标准。计算机三维图形是指将用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术。 OpenGL就是支持这种转换的程序库,它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGL Architecture Review Board (ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了ARB规范全部测试的实现才能称为OpenGL。1995年12月ARB批准了1.1版本,最新版规范是1999.5通过的1.2.1。 OpenGL被设计成独立于硬件,独立于窗口系统的,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。它低端应用上的主要竞争对手是MS-Direct3D,该图形库是以COM接口形式提供的,所以极为较复杂,稳定性差,另外微软公司拥有该库版权,目前只在Windows平台上可用。D3D的优势在速度上,但现在低价显卡都能提供很好的OpenGL硬件加速,所以做3D使用Direct3D已没有特别的必要,在专业图形处理特别是高端应用方面目前还没有出现以Direct3D技术为基础的例子,而游戏等低端应用也有转向OpenGL的趋势。微软在Windows NT对OpenGL的支持始于3.51,在Windows9x中的支持始于Win95 OEM Service Release 2。Windows下常用的OpenGL库有两种,MS实现的和SGI实现的,MS-OpenGL调用会自动检测是否存在显示卡制造商提供的ICD(Installable Client DeviceDriver)驱动程序,有则调用ICD中的例程,否则才用CPU进行计算,所以能利用显示卡的OpenGL加速能力。对开发者来说使用方法并没有区别,只是有ICD驱动时更快些。SGI的版本是纯软件实现不能利用硬件加速并且SGI已经在1999年宣布停止支持,但这套库便于调试程序,仍有不少开发者使用。 SGI曾经宣布研发OpenGL++,该图形库最大的特点是面象对象,提供了树形场景支持,大大减省了使用OpenGL处理复杂场景的工作量。后来(1999)SGI宣布与M$合作开发Ferihant,即Windows的下一代图形处理体系,包括DirectX与OpenGL的低级图形处理接口和以场景图支持为特点的高级接口,并且就此停止对其在Windows下的OpenGL实现的支持以示决心。此举世瞩目,大家都以为Windows图形处理快要过上幸福生活了,然而,不久,SGI宣布中止合作,并撤回派出的科学家,Ferihant基本上夭折。SGI 称终止合作的原因是M$不肯积极合作,光想把SGI 的技术合并进DirectX,真正内幕不详。不过以SGI在图形处理界的老大地位来说,还是有几分可信度的,因为M$初支持OpenGL就不积极。 虽然早在WinNT3.51 时代M$就已经实现了它的OpenGL 版本,但不肯随其Windows95 时提供,称该API 适合高端应用,而Win95面向一般消费者的用不到,并且在其win3.x下开发的wing 图表库的基础上搞出了GameSDK,即后来的DirectX 库,称这套库是专门为高性能游戏开发设计的,在当时的硬件条件下,这无疑是非常有道理的,并且很快成为Windows环境下游戏开发的标准API 。该库实质上是提供了绕过Windows 直接访问显存的途径,从而很好的解决了GDI 体系性能方面的不足,但由于是以COM接口形式提供的,所以相当复杂,而稳定性也不是很好,所以有人称Direct3D 是为追求速度而不择手段的公司才用的。然而也就在这个时期,三维图形加速卡开始走向商用和家用,也就是在这时期S3公司以其性价比极高的带三维图形加速的显示芯片、板卡向当时Trident 公司的霸主地位发起了挑战。另外这时实时三维游戏开始流行,以Dos 下的第一人称射击游戏——暗杀希特勒(3d worlf) 大获成功、红极一时ID Sofare 的开始铸辉煌,推出了Doom 、Quake1 ,相信这两个名字在今天(2000.4) 的游戏圈子里应该是无人不知无不晓吧?1996.12.ID Sofare 的高手John Carmack 在开发下一代三维图形引擎时在其.plan 中写上了以下字句: Direct-3D IM is a horribly broken API. It inflicts great pain and suffering on the programmers using it, without returning any significant advantages. I don"t think there is ANY market segment that D3D is apropriate for, OpenGL seems to work just fine for everything from quake to softimage. There is no good technical reason for the existance of D3D. I"m sure D3D will suck less with each forthing version, but this is an oportunity to just bypass dragging the entire development munity through the messy evolution of an ill-birthed API. 此后以他为代表的一大批游戏开发人员开始多方呼吁MS积极支持OpenGL。M$终于在Win95的OSR2版本里集成了OpenGL,并为以前版本的Win95免费提供单独的OpenGL实现。(或许您还不了解这些人的影响力,不知道您听说过以生产Voodoo系统图形加速卡而著称于世的3dfx公司吗?当年Quake的开发者不肯用Voodoo的glide API对voodoo做优化版本,差点没把3dfx吓蒙,于是赶紧搞了一个针对游戏的OpenGL子集:MiniGL,让ID Sofare的人只要在制作OpenGL时只使用MiniGL API做过优化就成,这样Quake总算可以用上voodoo的硬件加速能力了。这样也造就了一个新名词:MCD--MiniGL Client Driver,用于Windows的MiniGL驱动程序,而标准的OpenGL则依靠ICD驱动)。

software opengl direct3d 都有什么区别?

software 是软件加速opengl direct3d 是硬件加速的2种不同方式opengl需要驱动支持direct3d需要安装相应的 directX 打CS的话推荐opengl direct3d 不光画质不同,速度也有提升

3D MAX 图形驱动程序设置该选“软件、opengl、direct3d中的哪一个

您好,这样的情况建议您下载最新版本的驱动精灵,或是直接在线升级一下驱动精灵。希望可以帮到您。

OpenGL和Direct 3D有什么区别?

Direct 3D对显卡要求比较高~~玩CS用openGL最好了(不好意思楼上的兄弟正好说反了~~~)

OPENGL和DIRECT3D是什么东西

我不知道是什么东西,大概知道是做什么用的。OPENGL和DIRECT3D是显示模式,CS里面就有。至于DirectX 9.0c那个是电脑必备的,装了肯定没错!

openGauss使用的是哪个优化器,CBO or RBO? 有啥区别?

RBO 应该已经废弃; CBO,主要由“查询转换、代价评估、执行计划生成”三部分组成,其依赖于统计信息(1.analyze收集;2.pg_statistic系统表存储有关该数据库中表和索引列的统计数据,需要有系统管理员权限)。区别如下:RBO: Rule-Based Optimization 基于规则的优化器CBO: Cost-Based Optimization 基于代价的优化器

我想买显卡,但是不知道哪种显卡是支持OpenGL的,我现在用MODO由于我的集成卡不支持OPENGL

您好,我是新手!愿意让我回答您的问题吗?我是来自珠海北理工的大三学生,专门玩单机的,对显卡配置掌握熟稔。您的问题找对人了。支持OpenGL的显卡,据本人所知如下,仅供参考:G卡Nvidia Geforce 9400GT 512MB,300-350元(已停产,存货)Nvidia Geforce 9500GT 512MB,400-450元(已停产,存货)Nvidia Geforce 9600GSO 512MB,500-550 元Nvidia Geforce 9800GT 512MB/1GB,600-650元Nvidia Geforce GTX 240 512MB/1GB,600-650元Nvidia Geforce GTX 450 512MB/1GB,700-750元Nvidia Geforce GTX 480 512MB/1GB。750-800元A卡ATI Radeon HD 3870 512MB/1GB,300-350元ATI Radeon HD 4850 512MB/1GB,400-450元ATI Radeon HD 5750 512MB/1GB,450-500元如有不实,请谅解。收到后请回复。

OpenGL是什么意思??????/

(1) OpenGL简介 作者: pioneer OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等等。值得一提的是,随着Microsoft公司在Windows NT和最新的Windows 95中提供了OpenGL标准及OpenGL三维图形加速卡(如北京黎明电子技术公司的AGC-3D系列三维图形加速卡)的推出,OpenGL将在微机中有广泛地应用,同时也为广大用户提供了在微机上使用以前只能在高性能图形工作站上运行的各种软件的机会。 (2)OpenGL特点及功能 OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能: 1) 建模 OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面(如Bezier、Nurbs等曲线或曲面)绘制函数。 2) 变换 OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、 旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透 视投影两种变换。其变换方法与机器人运动学中的坐标变换方法完全一致,有利于减少算法的运行时间,提高三维图形的显示速度。 3) 颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。 4) 光照和材质设置 OpenGL光有辐射光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光 的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。 5) 纹理映射(Texture Mapping):利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。 6) 位图显示和图象增强:图象功能除了基本的拷贝和像素读写外,还提供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。以上三条可是被仿真物更具真实感,增强图形显示的效果。 7) 双缓存(Double Buffering)动画:双缓存即前台缓存和后台缓存,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。从而实现了消隐算法。

opengl是什么,SATA和SATA2区别在哪?

没有分?自己百度去~~

手机里的“OpenGL跟踪”是干什么的?

这功能对手机用户没什么用, 对开发人员才有用。因为安卓的界面可以用opengl来绘制 ,而程序员需要了解绘制时候的过程是怎样,某一时刻gpu在干嘛?OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能:1) 建模 OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面(如Bezier、Nurbs等曲线或曲面)绘制函数。2) 变换 OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法与机器人运动学中的坐标变换方法完全一致,有利于减少算法的运行时间,提高三维图形的显示速度。3) 颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。4) 光照和材质设置 OpenGL光有辐射光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。5) 纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。6) 位图显示和图象增强 图象功能除了基本的拷贝和像素读写外,还提供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。以上三条可是被仿真物更具真实感,增强图形显示的效果。7) 双缓存(Double Buffering)动画 双缓存即前台缓存和后台缓存,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。从而实现了消隐算法。

我linix系统电脑没法上网,安装QT提示cannot find lGL,查了一下说是缺少OPENGL,但是没法上网怎么安装?

打开终端,用ifconfig 看看本地连接是否已经启动,没就"ficonfig 设备名 start"来启动,如果是用wifi连接,则用iwcofnig来替换。

我的问题就是因为OPENGL不支持...

是你的显卡 驱动 问题, 你换个显卡驱动 绝对可以解决问题!

OpenGL底层是靠xwindow吗?xwindows是显卡驱动?

应该这样理解吧,驱动是最底层的,上面一层是X-window,然后再是OpenGL! X-Window系统并不是一个软件,而是一个协议,这个协议定义一个系统成品所必需具备的功能(就如同TCP/IP,属于更底层的协议)。 然后OpenGL又是图形程序的接口,可以方便其他程序调用图形库,就是位于更上层面的接口, 我们可以这样理解,OpenGL是其他应用程序的接口,然后OpenGL需要链接到X-window,通过X-window调用底层的显卡驱动调用显卡!

DirectX和OpenGL比较?和显卡有什么关系吗?

DirectX是事实上的标准,游戏领域的主流,OpenGL则较多应用于工业领域。显卡都能支持这两个接口标准,显卡不支持,程序使用了也无法运行。

NVIDIA OpenGL Driver错误 怎么解决

1、搜索并下载Display Driver Uninstaller (DDU)并解压。2、按Win键,或点击屏幕左下角开始键,选择设置-更新和安全-恢复,找到高级启动,并点击“立即重新启动”。3、点击“疑难解答”-“高级选项”-“启动设置”,按4或F4启用安全模式。4、重新进入高级启动模式,按7或F7禁用驱动程序强制签名。5、进入控制面板,打开“程序和功能”,点击“启用或关闭Windows功能”,在“.Net Framework 3.5(包括.Net2.0和3.0)”前打钩(黑色方块也行)。6、选择“让Windows更新为你下载文件”,等待安装完成后重启电脑。7、右键点击屏幕左下角“开始”键,选择“Windows Powershell(管理员)”。输入或复制粘贴下列命令,按Enter执行。

NVIDIA OpenGL Driver错误 怎么解决

内核异常,重启重装,替换,删除,都试试

lian第2声加上peng第2声这个词语是什么?

pengawas英文的辞职信怎样写

  In China, the employee"s resignation letter can be in accordance with the "labor law" thirty-first, "labor contract law," the specific provisions of article thirty-seventh can be written. I can know Baidu, Baidu or Sogou Search ask the library "6 yuan water" and "water" writing "letter of resignation, resignation, resignation, resignation, resignation notice, report, notice of termination of labor contract notice (worker the employer)" Fan Wenlai read reference.  "Labor law" the thirty-first labour contract, shall be 30 days in advance written notice to the employer.  "Labor contract law" thirty-seventh workers 30 days in advance to inform the employer in writing, you can terminate the labor contract. The employee may terminate the labor contract within 3 days of the probation period.  The following is a concrete example:   Letter of resignation   (laborer to employer)Zhenyuan International Hotel:↙  My name is Ji, female, economist, identity card was born in October 15, 1990 (26 years old), in June 1, 2012 the recruitment into the Zhenyuan * * international hotel work, now for personal reasons not willing to continue to engage in the work of labor quota management. Therefore, after careful consideration I decided to submit the letter of resignation to the labor and personnel department of the hotel ", according to the "labor law" article thirty-first, "labor contract law" stipulates that the thirty-seventh 30 days in advance to inform the Zhenyuan XX International Hotel, the expiration of 30 days from the day after Thursday February 16, 2017 shall go through the formalities of termination of labor contract law.  Sincerely!   Written by: Ji * (Autographed)   January 16, 2017 Monday  Archive: Ji * (retained by the letter)  Cell phone: 1499493344

关于openGL和VRML

openGL与c可以画图VRML与java做成的是可以网页浏览的,比如说一些产品的发布,。。。以前的在线游戏,也是用vrml做的

opengles shader 可以用for吗

Shader可以说是现代OpenGL的灵魂。这牵涉到一个历史遗留问题:GL 1.x中只有固定管线,渲染效果是固定的,而在GL 2.0中增加了可编程管线,想要什么渲染效果都可以自己往加。GL 3.0+就废弃了固定管线,也就是说不写Shader是不推荐的。不写Shader的固定管线时代早就在十多年前过去了。回到GLES中,GLES 1.0是固定管线(为了某些原因),不需要也不能写Shader;GLES 2.0+是可编程管线,必须写Shader。建议题主少走点弯路,直接上可编程管线。虽然比固定管线稍微要多做点工作,但长远来看是好的,能做出更炫的效果并充分利用GPU。退固定管线保平安。

请问directx和opengl是对显卡的编程吗?那shader又是什么?三者有什么关系呢?

GL DX都是API。是一个接口,是专门针对显卡的,利用显卡的硬件资源去绘图。跟Windows 的GDI不同,GDI是用CPU绘制的,然后再传递绘制好的图像显示。CPU通常处理的是图像,GPU处理的是矢量图形。准确的说不是对显卡的编程,他们是API,就像win32 API一样。编译出来的都是CPU指令,只是告诉CPU怎么控制显卡绘制。但是shader是对GPU的编程,就是控制顶点,跟像素怎么着色的。编译后是由GPU执行的指令。shader实际上是显卡GPU能读懂机器指令。但是编译链接,生成shader有多种语言。CG,GLSL(opengl API中带的编译器),HLSL(dx带的编译器)。注意GLSL HLSL的编译器都不是应用程序,是API内置的编译方式。

penguin品牌有多贵

500元以上。penguin是服饰的品牌,全名是OriginalPenguin,这个品牌来自于美国,在当地非常有名气,市场价格在500元以上,主要是按照制作工业手法,质量判定价格是多少。

penguin的英文单词是什么?

penguin。1、英 [u02c8peu014bɡwu026an] 2、美 [u02c8peu014bɡwu026an] 3、n、企鹅4、N-COUNT 企鹅 :A penguin is a type of large black and white sea bird found mainly in the Antarctic. Penguins cannot fly but use their short wings for swimming.

penguin的英语是什么?

penguin。1、英 [u02c8peu014bɡwu026an] 2、美 [u02c8peu014bɡwu026an] 3、n、企鹅4、N-COUNT 企鹅 :A penguin is a type of large black and white sea bird found mainly in the Antarctic. Penguins cannot fly but use their short wings for swimming.

penguin的音标是什么啊?

penguin。1、英 [u02c8peu014bɡwu026an] 2、美 [u02c8peu014bɡwu026an] 3、n、企鹅4、N-COUNT 企鹅 :A penguin is a type of large black and white sea bird found mainly in the Antarctic. Penguins cannot fly but use their short wings for swimming.

penguin怎么读 penguin的意思

1、penguin的读音:英[u02c8peu014bɡwu026an],美[u02c8peu014bɡwu026an]。 2、n.企鹅。 3、例句:The penguin is a flightless bird.企鹅是一种不会飞的鸟。 4、短语 Penguin Egg 企鹅蛋 rockhopper penguin 跳岩企鹅

penguin是什么词性

penguin是名词,表示企鹅的意思。企鹅(学名:Spheniscidae):是鸟纲、企鹅科所有物种的通称。有“海洋之舟”美称的企鹅是一种最古老的游禽,它们很可能在地球穿上冰甲之前,就已经在南极安家落户。全世界的企鹅共有18种,大多数都分布和生活在南半球。特征为不能飞翔;一般而言,企鹅的腿和膝盖都藏在了它的肚子里,脚生于身体最下部;企鹅在地面站立时,髌骨卡在股骨与胫跗骨关节处,起到稳定膝关节的作用,也可借其将股骨与胫跗骨定位固持;趾间有蹼;跖行性(其他鸟类以趾着地);前肢成鳍状;羽毛短,以减少摩擦和湍流;羽毛间存留一层空气,用以保温。背部黑色,腹部白色。各个种的主要区别在于头部色型和个体大小。企鹅能够在严寒的气候中生活、繁殖。在陆地上,它活像身穿燕尾服的西方绅士,走起路来,一摇一摆,遇到危险,连跌带爬,狼狈不堪。可是在水里,企鹅那短小的翅膀成了一双强有力的“划桨”,游速可达每小时25-30千米。一天可游160千米。 主要以磷虾、乌贼,小鱼为食。企鹅共有18个独立物种,体型最大的物种是帝企鹅,平均约1.1米高,体重35千克以上。最小的企鹅物种是小蓝企鹅(又称神仙企鹅),体高40厘米,重1千克。本身有其独特的结构,企鹅羽毛密度比同一体型的鸟类大三至四倍,这些羽毛的作用是调节体温。虽然企鹅双脚基本上与其它飞行鸟类差不多,但它们的骨骼坚硬,后肢粗壮、跗跖骨极短,髌骨发达,呈块状结构。并且脚比较短且平。这种特征配合有如二只桨的短翼,使企鹅可以在水底“飞行”。南极虽然酷寒难当,但企鹅经过数千万年暴风雪的磨炼,全身的羽毛已变成重叠、密接的鳞片状。这种特殊的羽衣,不但海水难以浸透,就是气温在零下近百摄氏度,也休想攻破它保温的防线。南极陆地多,海面宽,丰富的海洋浮游生物成了企鹅充沛的食物来源。 企鹅是一种最古老的游禽,它很可能穿上冰甲之前,就已经在南极安家落户。南极陆地多,海面宽,丰富的海洋浮游盐腺可以排泄多余的盐分。企鹅双眼由于有平坦的眼角膜,所以可在水底及水面看东西。双眼可以把影像传至脑部作作望远集成使之产生望远作用。企鹅是一种鸟类,因此企鹅没有牙齿。企鹅的舌头以及上颚有倒刺,以适应吞食鱼虾等食物,但是这并不是他们的牙齿。
 1 2 3  下一页  尾页