ope

阅读 / 问答 / 标签

购买VPS选择openvz还是xen,两者有什么区别

XENXen 由剑桥大学开发,它是基于硬件的完全分割,物理上有多少的资源就只能分配多少资源,因此很难超售。可分为Xen-PV(半虚拟化),和Xen-HVM(全虚拟化)。Xen是不能超售内存和硬盘的,当母服务器只有16G内存以及100G硬盘时,当开Xen架构(任意一个虚拟化)的1G内存、25G硬盘的子机时,会直接占用服务器1G内存,以及25G硬盘,所以Xen的性能,相比OpenVZ在超售的情况下要好。Xen-PV:半虚拟化,所以它仅仅适用于linux系列VPS,但它的性能损失比较少,大概相对于母机的4%-8%左右。Xen-HVM:全虚拟化,可以安装windows或自由挂载ISO文件安装任意系统,由于是全虚拟化,所以性能损失较大,大概相对于母机性能损失8%-20%左右。Xen适用人群:预算较为充足,且希望VPS有较高性能的客户Xen注意事项:注意Xen-PV和Xen-HVM的区别。Xen可用系统:Xen-PV:纯Linux,Xen-HVM:支持Windows、Linux等。OpenVZOpenVZ(简 称OVZ)采用SWsoft的Virutozzo虚拟化服务器软件产品的内核,是基于Linux平台的操作系统级服务器虚拟化架构。这个架构直接调用母服 务器(母机)中的内核,模拟生成出子服务器(VPS,小机),所以,它经过虚拟化后相对于母服务器,性能损失大概只有的1-3%。当然 OpenVZ可以超售,意思味着一台服务器总共16G内存,他可以开出配置为1G内存×17台以上的子服务器。因为他的虚拟架构关系属于:客户用多少,就 扣除母服务器多少,所以OpenVZ架构的VPS较为便宜。但由于存在超售因素,如果服务商毫无休止的超售会导致服务器的性能急剧下降。OpenVZ另一个特点是,它是直接调用母服务器的内核,所以会导致部分软件无法使用,以及部分内核文件是无法修改。OpenVZ适用人群:新手、低预算客户OpenVZ注意事项:资源不是自己独有的,安装VPN服务需要注意检测虚拟网卡支持。OpenVZ可用系统:Linux(不支持Windows)xen会比OpenVZ贵,建议按需选择,更详细地说明可以查看这篇博文:http://www.138vps.com/vpsjc/315.html

游戏王霍普的英文是hope,希望,但有人说霍普雷叫hopeless,绝望的,大家觉得合适吗?

不合适也,霍普,霍普雷,不如叫hope-rey

利用 OpenWrt 实现 THU IPv6 + 宽带叠加完美双 WAN

经常玩 PT 的同学很可能也遇到过下面这个令人头疼的问题:目前大多数路由器并不支持 IPv6 的局域网转发,虽然可以利用 Lan 口互相是桥接的原理强行把路由器接成交换机模式实现校园网的 AP 接入,但是这样也同时失去了同一路由器下多设备的局域网互联,这给平时多设备的数据传输带来了很大的不便。为此,我们需要一台 OpenWrt 的路由器解决这个问题。 我的网络环境为: 设备环境为: 理想实现的效果: 路由器配置的最难点在于对 IPv6 的支持上,尽管 OpenWrt 三四年前的版本就已经可以转发 IPv6 流量了,但是依旧不完善,尤其是图形化界面的操作大不如 IPv4。 我通过整理一些大神的技术博客流传下来的资料,了解到现在 IPv6 转发有以下三种方式: 这是最早用的一种模式,即用路由器作为中继,路由器获得 IPv6 公网地址,获得数据后,转发给后面所有连接到路由器的局域网设备。 实现中继模式有以下两种方法: 众所周知,在 IPv4 网络下路由器是用 NAT 进公网到局域网地址转换的,NAT6 即为 IPv6 编写的 NAT 服务。网上也能搜到很多有关 NAT6 配置的方法,事实上,这种模式现在非常稳定,使用过程中完全察觉不到,和普通的 IPv4 路由没有什么区别。 不过 NAT6 模式下还是有个小问题,就是由于后面的设备都是局域网 IPv6 地址,加上 OpenWrt 可能对端口转发之类的支持不太好,所以挂 PT 时,utorrent 的连接性很差。 目前来看,对于教育网 IPv6 环境,这可能是最适合的一种转发方式。事实上,它和我们平时用到的反插网线强行交换机模式的原理很相似,通过设置将 IPv6 网线接口与 LAN 口桥接,这样 LAN 口相当于 AP 接入校园网 IPv6 环境;与此同时我们再叠加一个 IPv4 的宽带即可。这样的方式下,路由器本身没有 IPv6 地址,但是后端所有设备都有公网 IPv6,非常适合拿来刷 PT。不过由于路由器没有公网 IP,所以想用路由器挂 PT 的可能要考虑上述两种方式了。 对于用路由器做主力 NAS 的情况 : 首选 NAT6 对于每个设备都需要公网 IP 的情况 : 首选桥接 WNDR3800 上只有一个原生 WAN 口,我们首先要先通过 luci 界面的 交换机 设置 VLAN,把一个 LAN 口用作 WAN6 。 设置方式为: CPU 接口: 所有 VLAN 均需与之 已标记(Tagged) VLAN 连接的接口: 设置为 未标记(Untagged) 未与 VLAN 连接的接口: 设置为 关闭(Closed) 设置完后的 VLAN 如下 这样,连接在 LAN 1 的网口 VLAN 2 就可以用作一个新的 WAN 口。 在 luci 中找到 接口 ,比较新的 OpenWrt 中应该都自带添加了 WAN 和 WAN6 两个接口,如果没有的话,手动添加一个接口并命名为 WAN6 。 对于 WAN 口,正常设置即可,比较重要的一点是,因为我不想用移动宽带的 IPv6,要在 接口 - 高级设置 - 获取 IPv6 地址 设置为 已禁用 。 对于 WAN6 口,找到 物理设置 ,选择接口为 VLAN "eth0.2" (默认 IPv6 插在了刚刚设置的 LAN 1,宽带插在 WAN)。 之后就是重头戏,我们要设置 IPv6 的桥接。网上教程中提到需要安装 ebtables 去转发即将设置桥接的 WAN 口的 IPv4 数据,但是显然在我们这个双 WAN 的操作中是用不到的,因为校园网 IPv4 计流量而宽带不限量,故忽略这一步。 直接在 接口 - LAN - 物理设置 ,会看到已经有了一个桥接,这个是把 2 个 WLAN 接口及 LAN(eth0.1 即交换机设置中原有的 VLAN1)桥接在一起,使得 LAN 下的设备彼此互联。我们在这个已有的桥接中添加勾选 VLAN "eth0.2" 即把 WAN6 和全部 LAN 桥接在一起。 虽然原理讲起来非常复杂,但实际操作我们只需这样简单的一个操作,就完成了 IPv6 的桥接穿透。 当然,根据网上教程最后还需要在 启动项 中禁用 odhcp,以免它反复报错。 由于开机过程比较缓慢,在路由器刚启动时,DHCP 还没有来得及给设备分 IP,这时由于桥接,设备已经获取到了校园网的 IPv4 地址,这显然是我们不希望的。这个现象目前我的解决办法就是开机先让路由器缓一会儿再连网,还没有找到更好的办法。 理论上来说,通过 ip6tables 可以设置 IPv6 的端口转发,不过囧于 luci 没有很好地适配 ip6tables,所以需要在命令行操作,加之我自己没有需要,就懒得研究了,以后有空了没准会研究一下。

wander和hope

want:想要,一般带不定式:+to+动词,如:I want to be a teacher. hope:希望,一般带不定式:+to+动词,如:I hope to see you off on Sunday. wonder:想知道,一般接宾语从句,如:I wonder if you could give me a hand. think:认为,想,一般也是接宾语从句,如:I think you are right. intend:打算,想要,一般接不定式:+to+动词,如:I intend to join the party at tomorrow evening.

有一首歌是一个男的第一次见到一个女的对她一见钟情的,还有一句貌似是love is open the door 男女合唱的

歌名是【Love Is an Open Door】Love Is an Open Door - Kristen Bell&Santino FontanaOkay, can I just, say something crazy?I love crazy!All my life has been a series of doors in my faceAnd then suddenly I bump into youI was thinking the same thing! cuz likeI"ve been searching my whole life to find my own placeAnd maybe it"s the party talking or the chocolate fondueBut with you (but with you)I"ve got my place (I see your face)And it"s nothing like I"ve ever known beforeLove is an open doorLove is an open doorLove is an open doorWith you (with you)With you (with you)Love is an open doorI mean it"s crazy (what?!)We finish each other"s (sandwiches)That"s what I was gonna say!I never met someoneWho thinks so much like me (Jinx! Jinx again!)Our mental synchronizationCan have but one explanationYou and I were just meant to beSay goodbye (say goodbye) to the pain of the pastWe don"t have to feel it any moreLove is an open doorLove is an open doorLife can be so much moreWith you (with you)With you (with you)Love is an open doorCan I say something crazy? Will you marry me?Can I say something even crazier? Yes!

为什么地铁“本侧开门”的翻译是“This Door Open”?

这是祈使句,中文英文全都一样,都省略了主语。句中的门不是主语而是宾语,所以动词应该是第二人称,不能用第三人称。中文原意也是请打开本侧车门的意思。 开门关门,门都是宾语,是动作的施加对象,而不是做出动作的主体。不是主语。open的动作主体是乘客,这句话是对你们“乘客们”说的,是第二人称句,但是省略了“你们”这个主语。在汉语和英语中祈使句一般都可省略主语。

外国人是讲yep还是yop 发现两个都有,还有 是nope?

yep和nope都有,口语化的英语 yep D.J.[jep] K.K.[ju025bp] adv. 〈俚〉是 nope D.J.[nu0259up] K.K.[nop] adv. 不,不是 没有yop

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 坐标通常在顶部

oped代表什么意思?

意思是片头曲。解析如下:1、OP。即片头曲,英文Opening Theme/Song是电视剧或电视动画剧初播放的乐曲、歌曲。数目如多于一首歌的,在随后发行的原声CD、及动画资料中会以OP1、OP2或主题曲一、主题曲二·..等来表示。部份作品的片头曲里会显示原作或编剧、导演、制作、赞助商、片头曲词曲歌手等讯息。有些没有片尾曲的作品,会加上脚本、声优或演员等这些只是常例,依作品会有不同情形。2、ED即片尾曲,英文Ending Theme / Song,电视剧、电视动画中剧末出现(但常在下集预告或是一些特别画面前,有些时候是直接叠在本片最后一两秒后开始播放,如机动战士高达 SEED系列),有时数目会多于一首歌。在随后发行的原声CD、及动画资料中会以ED1、ED2或片尾曲一、片尾曲二等来表示。片尾曲的数目通常比片头曲多。扩展资料:在不同国家上演、播放的作品,有时会由于不同的风俗民情等因素,会另请填词人以本土语言重新填写歌词,并会另请歌手、配音演员或其他人士代唱。例如欧美地区,几乎都会把歌曲与歌词重新改写,影像则是会和原作品有部分差异。台湾、香港动画歌曲中,亦有部分歌曲有改唱(使用原曲,以本地语言填词和主唱)。一般而言,主题曲是指片头曲;但有时主题曲是另外一首,而非片头曲;而且有时片尾曲(或插曲)也被视为主题曲。

为什么我下载了opentelnet却打开不了 一打开就关闭。。。本电脑室WINDOW7的舰旗版本的 有关系吗?谢谢了。

opentelnet.exe 要在CMD命令提示符中运行就不会闪一下就不在了。你可以试试这个批处理,和opentelnet.exe的工作原理是一样的,所以他能开的这个也能开!这个小程序名为:opentelnet.bat@echo offtitle opentelnet cheng...MODE con: COLS=44 LINES=15:zjmclscolor 0afor /l %%i in (1,1,5) do echo.echo -简介- echo.echo 依靠ipc$来开启Telnet!echo 请按提示输入...echo.set/p ip= 输入IP: if /i "%ip%"=="q" exitset/p user= 用户名: if /i "%user%"=="q" exitset/p password= 密 码: if /i "%password%"=="q" exitecho.echo 正在建立ipc$连接...net use \%ip%ipc$ "%password%" /user:%user%IF ERRORLEVEL 1 goto errorIF ERRORLEVEL 0 goto ipc$ok:errorcolor 0cecho ipc$连接失败!请查看错误提示!按任意键返回...pause>nul & goto zjm:ipc$okclscolor 0aecho.echo.ping 127.1 -n 1 >nul 2>nulecho ipc$连接成功!ping 127.1 -n 1 >nul 2>nulecho 正在开启Telnet..ping 127.1 -n 1 >nul 2>nulsc \%ip% config TlntSvr start= demand >nul 2>nulsc \%ip% start TlntSvr >nul 2>nulping 127.1 -n 1 >nul 2>nulecho Telnet成功开启!!!ping 127.1 -n 1 >nul 2>nulecho 删除ipc$连接关系...ping 127.1 -n 1 >nul 2>nulecho.net use \%ip%ipc$ /del /yping 127.1 -n 1 >nul 2>nulecho.echo 是否登陆 %ip% 呢?echo y:是 n:否echo.set/p shr= 请选择: if /i "%shr%"=="y" goto ljif /i "%shr%"=="n" goto qxIF ERRORLEVEL 1 goto cw:cwclsfor /l %%i in (1,1,8) do echo.echo 输入错误! 按任意键返回! pause >nul & goto ipc$ok:ljstart telnet %ip%goto zjm:qxgoto zjm

关于如何应对压力 How to Cope with Stress的英文范文?急需

With the development of society, the competition of the entire society is more and more intense, causing increasing pressure to people. Stress of study, work and life are ubiquitous, but how can we deal with it? Here are some tips that I hope can be useful.Firstly, keep good health. A healthy body is the premise to face presure. It"s the least capacity to cope with stress when a person is sick. Secondly, to accept the pressure. The reason why many people can not cope with stress is that they resist and escape it. Actually, there always is trouble and problems once we chose a path to go, because almost everything worth doing is not so easy. Thirdly, solve the problem, rather than complain about it. Many people complain about the surroundings and don"t think about the solutions when faced with problems.....全文你参考这个“英语作文网”吧: http://www.adreep.cn/dxyy/2964.htmllcl1977

什么是OME版本的操作系统?什么是open paper license?

OEM版本就是买某厂家的电脑产品,赠送你的某些正版操作系统OEM一般是不会销售的它是厂家赠送的!

opencv中有没有计算图像四大纹理特征能量,熵,相关性,惯性矩的函数?

opencv有一个灰度共生矩阵能计算这些,但是那个类是在cxcore中定义的,实际使用也发现该函数存在问题(内存泄露,根据网上的改完,你实际使用还是发现跟matlab的精度差很多尤其是相关性2,经常计算不出来。2.1是这样,2.2不清楚)。

sinopec与opec的关系

中国石化集团公司欧佩克

如何给simulink中的scope增加多个信号输入口?

太简单啦,打开scope 然后点击打印旁边的按钮,设置信号输入的个数就可以了

myc epitope tag 是什么东西

mycepitope tag

求opera 韩文歌词

ub77cud2f4, ub77cud2f4 uc27duc9c0 uc54auc740 uc5b8uc5b4ub4e4ub85c ub610 ud639uc740 uadf9uc801, uadf9uc801 uc2a4ud1a0ub9acuc5d0 ube60uc838ub4e4uace0uac00uc7a5 ube44uc2fc uc637uc744 uc637uc744 uc785uace0 uc6b0uc544 uc880 ub5a8uba74uc11c uadf9uc7a5uc758 uac00uc7a5 uc88buc740 uc88cuc11duc5d0 ub9ccuc871ud55c ub108uc5ecuae34 ub2e4ub974ub2e4*ub0b4 uc448, ub0b4 uc448, uc624ud398ub77c ub178ub798ud558ub294 uc624ud398ub77c ucda4ucd94ub294 ub0b4 uc624ud398ub77cub108ubb34 uc88buc73cub2c8uae4c uc815ub2f5uc740 uc774uac70ub2c8uae4cub0b4 uc448, ub0b4 uc448, uc624ud398ub77c ub0b4uac00 ub9ccub4e0 uc624ud398ub77c uc138uc0c1 uba4buc9c4 uc624ud398ub77cuc774uac8c uc88buc73cub2c8uae4c ub2e4 uae30ubd84 uc88buc73cub2c8uae4c**ub108ubb34 uc88buc73cub2c8uae4c uc815ub2f5uc740 uc774uac70ub2c8uae4c uc774uac8c uc88buc73cub2c8uae4c ub2e4 uae30ubd84 uc88buc73cub2c8uae4cubb34ub300 uc704 uadf8 ucc2cub780ud55c uc870uba85uc544ub798ub85c uc5b4uae68 uc704 uc3dfuc544uc838 ub0b4ub9acub294 uadf8 uac08ucc44 uc18duc5d0ub3c4ubaa8ub450uac00 ud55cubc88ucbe4 uafc8 uafbc uc0acub791, ubc30uc2e0uae4cuc9c0ub3c4 uc774 uc9e7uc740 3ubd84, 4ubd84 uadf8 uc548uc5d0 ub2e4 uc788ub2e4uace0ubc14ub85c uc5ecuae30ub2e4ub0b4 uc448, ub0b4 uc448, uc624ud398ub77c ub178ub798ud558ub294 uc624ud398ub77c ucda4ucd94ub294 ub0b4 uc624ud398ub77cub108ubb34 uc720uba85ud574uc11c ub2e4 ubbf8uccd0ub4e4 ubcf4ub2c8uae4cub0b4 uc448, ub0b4 uc448, uc624ud398ub77c ub0b4uac00 ub9ccub4e0 uc624ud398ub77c uc138uc0c1 uba4buc9c4 uc624ud398ub77c ub108ubb34 uba4buc788uc5b4uc11c ub2e4 uc6b8uace0 ub09cub9acub2c8uae4cub108ubb34 uc720uba85ud574uc11c ub2e4ub4e4 ubbf8uccd0 ubcf4ub2c8uae4cub108ubb34 uba4buc788uc5b4uc11c ub2e4 uc6b8uace0 ub09cub9acub2c8uae4cuc27duc9c0ub294 uc54auc9c0 ub098 uc228uc774 ucc28 ub9d0ub3c4 ubabbud560 ub54cuac00 uc788uc5b4 ub124 ub9d8uc774 uc6d0ud55c uac78 ucad3uc544 ubb34uac70uc6b4 uc218ud2b8 ubc97uc5b4 ubc97uc5b4ubaa8ucc28ub974ud2b8, ud5e8ub378, ube44uc81c uadf8 uc18duc758 uc5c4uccadub09c uc598uae30uac00 ud558ub098ub3c4 ubd80ub7fduc9c0 uc54auac8c ub0b4uac00 ub2e4 ubcf4uc5ecuc904uac8c uc798 ubd10*Repeat**Repeatub108ubb34 uc88buc73cub2c8uae4c uc815ub2f5uc740 uc774uac70ub2c8uae4c

(英语)outdoors与open air的区别?

如do exercise outdoors或者 do exercise in the open air。这里outdoors作副词,但是open air是名词短语。

developed什么意思

“developed”是“发达的,发达国家的”的意思。“developed”是英语中的一个形容词,通常用来形容某个地区或国家在经济、社会、文化等方面已经达到了比较高的发展水平。“developed”主要用于指代欧美、日本、澳大利亚、加拿大等一些高度发达的经济体。除了指代国家或地区之外,“developed”还可以用来形容某个技能或能力已经得到了很好的发展。还可以用作动词,意味着开发或者创造某个新产品、新技术、新工艺等。“developed”的近义词下面是"developed"近义词及其各自的含义:1、Advanced(先进的):表示在技术、科学或文化方面有很高水平的发展,并且在该领域中处于领先地位。2、Evolved(进化的):表示事物经过漫长的发展过程,逐渐变得更强大、更高级、更发达。3、Mature(成熟的):表示经过一段时间之后,事物已经到达了一个相对完善的状态。4、Improved(改进的):表示对事物进行了一些调整和改进,使其更好,更有效或者更完美。5、Upgraded(升级的):表示原本的事物经过更新或者升级后,性能和功能得到了大幅提升。“developed”造句1、She is a talented artist who has developed her skills through years of practice.她是一位有才华的艺术家,通过多年不断练习,她的技能得到了发展。2、The company has developed a new software product that will revolutionize the market.这家公司开发了一款新软件产品,将会彻底颠覆市场。3、The city has been transformed by the developed public transportation system.该市的公共交通系统经过完善和发展,城市面貌得到了改观。4、The new generation of smartphones is even more developed than their predecessors.新一代智能手机比其前身更加发达和先进。5、The medical industry has developed many novel treatments for various illnesses in recent years.最近几年医疗行业开发出了许多新型治疗方案,适用于各种疾病。

operational;imprison;prisoner;convict 这英语怎么读?

英语其实也不是特别难,难的是学精。可以把英语看作是我们所学习的拼音,这样我们就会很快适应并能准确学会单词的发音。就比如这个 imprison /u026am"pru026az(u0259)n/ (vt. 监禁;关押;使…下狱)首先把元音挑出来读一遍, u026a和u0259, 然后把旁边的辅音连在一起拼读出来:u026a,u026am; u026a,ru026a, pru026a; u0259,u0259n,z(u0259)n; pru026az(u0259)n; 最后连在一起拼读 /u026am"pru026az(u0259)n/ 这方法就跟我们学习拼音一样,没有什么难度哦,其他几个单词也是以此类推,音标如下,注意发音时咬字准确。学单词发音的同时掌握其义。关键还是要多练多记。/u0252pu0259"reu026au0283(u0259)n(u0259)l/ adj. 操作的;运作的/"pru026az(u0259)nu0259/ n. 囚犯,犯人;俘虏;刑事被告/ku0259n"vu026akt/ vt. 证明…有罪;宣告…有罪 n. 罪犯谐音会影响单词的正确发音,所以最好不要用谐音去识记哦。

宏基笔记本电脑开机黑屏只显示【operating system not found】,怎么变回正常

意思是没有找到系统,可能是硬盘坏了或是硬盘与主板的接口松了,如果还在保修期内的话就送保吧

谁能告诉我,这表示啥意思operating system not found

朋友,你好:开机显示: operating system not found .它的英文是:操作系统没有找到。造成这样的原因很可能是主引导记录损坏,或者操作系统的系统文件被损坏或者丢失,造成系统损坏,无法引导操作系统的画面,处理方法如下:(1)造成这个现象的主要一个原因是:硬盘的主引导记录(MBR)出现错误,所以就要从重建主引记录(MBR)入手,处理方法如下:首先要准备一张带PE的GHOST版的最新安装光盘,不管是XP还是WIN7,(一般软件店或者电脑店都有买¥5-8一张)或者准备一个带PE的U盘启动盘,接着开机按下F12键或者开机按下DEL进入到BIOS中,设好第一启动项为光驱(或者U盘),放入光盘(或者插入U盘),进入光盘中(或者U盘中),进入WINPE中,找到一个叫diskgenius的软件,打开这个软件,找到主机的“硬盘”,选中硬盘,点右键,会弹出一个下拉列框,上面就有一个“重建主引导记录(MBR)”,点击这个“重建主引导记录(MBR)”,然后就会弹出一个对话框,点击“是”,然后弹出“任务成功完成”的对话框,点击“确定”,就可以修复主引导记录了。 然后重启电脑,电脑也就能够进操作系统了,百分之九十五可以解决问题。(如下图)(2)由于操作系统文件被损坏或者丢失,比如中毒,其它原因导至系统文件损坏或者中毒,而无法引导系统,所以找不到操作系统,出现这种情况,只能一键还原或者用光盘或者U盘重装系统,教一种用GHOST光盘安装系统的方法如下:先要到软件店或者电脑店买一张带PE的GHOST WIN7 SP1或者GHOST WINXP版光盘(一般5-8元一张)然后按下面的步骤来做:(这里以WIN7 为例,XP的过程也是一样)第一步:开机以后,马上按下ESC键,这个键叫开机启动项快捷键,这时会出现一个启动项菜单(Boot Menu)的界面,你只要找到DC/DVD ROM,这一项,就可以从光驱启动了。第二步:把光盘放入光驱,启动电脑,进入到一个启动菜单界面,选择WINPE(WIN2003或者 WIN8PE)进入,然后打开“我的电脑”或者“计算机”,找到C盘,然后格式化C盘,(文件类型选择NTFS ,快速格式化)确定即可。第三步:返回主菜单,只要点1或A就搞定了,它会自动安装系统和驱动。第四步:重启后,很多应用软件会自动安装,(当然不想要,可以卸载或者不要勾选安装),然后想要什么软件上网下载什么安装。最后重启,安装成功。第五步:用GHOST版光盘上的一键还原做好备份(也可以手动GHOST),就可以了。希望对你有所帮助,祝你快乐~~

电脑开机提示“Operating System Not Found”怎么办

开机后出现operatingsystemnotfound的意思是:没有找到操作系统。引起的原因:1、操作系统文件损坏。2、MBR表损坏。3、硬盘数据线松了。4、硬盘坏了。解决方法:1、重新安装操作系统。2、用U盘或光盘引导,进入PE系统,用分区软件修复MBR表(有的软件叫修复引导)。3、检查硬盘数据线、电源线,将接头插紧,如果是线坏了就更换新的。4、BIOS里能认到硬盘,就重装系统试下,如果重装不了,尝试重新给硬盘分区,如果分不了区,尝试低级格式化硬盘。BIOS里认不到硬盘,只能更换新硬盘了。

电脑开机提示operating system not found怎么办

没装系统,需要装个系统

operating system not found是什么问题?

笔记本提示operating system not found表示未找到操作系统,可以通过重装系统来解决,重新安装系统的方法如下:1、首先将笔记本关机,然后把系统光盘插入电脑的光驱中。2、将笔记本开机,紧接着连续按下Delete键进入BIOS设置界面,并找到Boot Menu选项,在Boot Menu选项中找到光驱选项,一般都是DVDRAM,接着按下Enter键将光驱启动设置为第一启动项。3、接着笔记本会自动重新启动,出现press any key to boot from CD的提示,此时按下键盘上的任意按键即可启动。4、从光驱启动成功后,会出现如下界面,直接选择第一项“安装win7系统到C盘”,选中后按下回车键即可。5、点击安装Win7系统到C盘后,便会自动开始进行系统安装操作,只需耐心等待安装完成即可。6、安装完成后,笔记本会自动重启,然后会进入到电脑桌面,当出现如下画面时,就说明系统已经安装完成,可以正常使用了。

索尼笔记本开机就显示Operating System Not Found要怎么解决

电脑提示operatingsystemnotfound的原因主要是因为电脑没有找到操作系统,解决方法如下:1、可以先开机,第一个屏幕将有如何进入BIOS的键值参考。按键进入BIOS。2、输入启动项,然后选择硬盘知识启动。从菜单中,选择BIOS功能设置选项。3、使用键盘上的向上和向下键,选择硬盘,按F10保存设置,重新启动计算机,然后输入操作系统。4、若是这样的BIOS菜单,请选择boot(引导)子菜单harddisk(硬盘),然后再次按F10保存设置并重新启动计算机。5、也可按F8键选择安全模式来改善这种情况。6、进入安全模式,检查设备管理器中是否有任何异常的驱动程序应答(黄色警告设备),启动,重新启动,重新启动计算机,然后继续按F8此时,您可以使用向上和向下键选择“last correct configuration”以启动Windows选项来解决问题。

电脑开机提示Operating System not found是什么意思?

开机后出现operatingsystemnotfound的意思是:没有找到操作系统。引起的原因:1、操作系统文件损坏。2、MBR表损坏。3、硬盘数据线松了。4、硬盘坏了。解决方法:1、重新安装操作系统。2、用U盘或光盘引导,进入PE系统,用分区软件修复MBR表(有的软件叫修复引导)。3、检查硬盘数据线、电源线,将接头插紧,如果是线坏了就更换新的。4、BIOS里能认到硬盘,就重装系统试下,如果重装不了,尝试重新给硬盘分区,如果分不了区,尝试低级格式化硬盘。BIOS里认不到硬盘,只能更换新硬盘了。

蓝屏提示operation system not found是什么原因?

operating system not found”的意思是“没copy有找到操作系统”原因可能是硬盘上系统启动信息损坏了,找不到相关的系统信息,所以它说找不到;再就是硬盘分区表损坏了,导致找不到系统,需要修复分区表即可;三是系统确实没有了,比如被格式化、新硬盘、分区未激活等;再就是硬盘有问题了,包括百物理损坏、逻辑错误等。如果不是新硬盘,建议你用带有WINPE的启动光盘或U盘,运行系统启动修复工具(NTBOOTautofix v2.5.7)检查修复下试试。如果不行,请检查硬盘分区表,用DISKGENIUS修复下试试,并检查主分区是否激活。再不行就检查修复硬度盘错误和坏道了。如果安装系统时遇到这种情况,最简单的方法就是更换一个IOS文件,亲测有效本人更换前iso为图一,是常用的ghost,安装会出现上诉问题"operating system not found"是未找到操作系统的知意思,原因有很多:硬盘问题,硬盘坏了或接口松了,检查一下硬盘数据线是否松动,关闭计算机切断电源后把数据线重新插接一次;你可以借助工具软件(比如“HDTune”)对硬盘进行一下查测。道如果版排除硬盘的故障,那很有可能就是BIOS的设置出了问题,你可以尝试将BIOS恢复为默认设置。另外还有一种情况就是系统故障,如果是这样,一般重装系统可以解决这个权问题。电脑开机后无法进入系统,蓝屏或者黑屏并提示operating system not found,可copy以通过开机时不断地按F2,进入后台操作系统进行查看和解决问题。步骤:第一、开机不停地按f2进入bios的界面,进到bios后会按右方向键把光标移动到“Boot”,这时可以看到有一个显示UEFI的黑色框 然后直接点知击Enter回车。第二、这时会出现一个选择框,有UEFI和Legacy BIOS两个选项,选择“Legacy BIOS”按下回车。第三、回车后会弹出一个警告的对话框,继续按下回车,进入下一步。第四、之后弹出yes或no,选择yes按下回车,这时boot mode 已设置成Legacy BIOS,最后按f10保存并退出。退出之后就可以正常打开电脑系统了。

operating system not found是什么问题?

直接看这个吧,实用的方法:系统启动提示“operating system not found”解决方案!http://www.qiankoo.com/thread-2264-1-1.html(出处: 千酷论坛)

The proper study of mankind is man。

人类的追求是进行正确的学习!

openxyl读取有图表的EXCEL文件报错?

根据错误信息,您的程序似乎在读取Excel文件中的图表时出现了问题。可能是由于openpyxl库不支持读取Excel图表导致的。目前,openpyxl库不支持读取Excel图表的功能,可以使用其他库或工具来读取包含图表的Excel文件。以下是几种可供选择的解决方案:1. 使用pandas库:pandas库是一个流行的Python数据分析库,它可以读取包含图表的Excel文件,并将其转换为DataFrame对象。您可以使用以下代码读取Excel文件:```import pandas as pddf = pd.read_excel("your_file.xlsx", sheet_name="your_sheet_name")```2. 使用xlrd和xlwt库:这些库可以读取和写入Excel文件,但不支持图表。如果你只需要读取Excel文件中的字符和公式,这些库可能是一个好的选择。您可以使用以下代码读取Excel文件:```import xlrdworkbook = xlrd.open_workbook("your_file.xlsx")worksheet = workbook.sheet_by_name("your_sheet_name")```3. 将Excel文件转换为CSV文件:如果您只需要读取Excel文件中的数据,而不需要图表,那么将Excel文件转换为CSV文件可能是一个好的选择。您可以使用Excel软件将文件另存为CSV格式,然后使用Python的内置csv库读取CSV文件。

d3.js,openlayer,Leaflet或其他,哪些适合Web GIS的开发

d3.js 这个是可视化框架库,它和 leaflet, openlayers等应当是互补的关系。互补的例子:Map using leaflet.js and d3,js overlaid,javascript - Using d3 in Leaflet, d3 Integration。至于leaflet和openlayers3选哪一个,如果不想看代码,那么目前leaflet更热门一些,没什么包袱的话就选leaflet吧。如果想看看代码呢,那么:OpenLayers 3,http://leafletjs.com/examples/quick-start.html,看自己平时的编程习惯,哪个顺眼就选哪一个就是,两个在成熟度、社区、用户群体、插件、扩展性等方面都差不多。

resin java.util.zip.ZipException: error in opening zip file

你的resin没有改过任何文件吗? 还是在webapps目录里面放了war文件呢?如果有可以去掉重启resin看看 如果还不行你就重新解压resin试试把

直方图与gamma校正 — OpenCV& Python

··· import cv2 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D img_path = "C:/Users/WZChan/Desktop/" img = cv2.imread(img_path + "test_600x350_imwrite.jpg") hist_b = cv2.calcHist([img], [0], None, [256], [0, 256]) hist_g = cv2.calcHist([img], [0], None, [256], [0, 256]) hist_r = cv2.calcHist([img], [0], None, [256], [0, 256]) def gamma_trans(img, gamma): gamma_table = [np.power(x / 255.0, gamma)*255.0 for x in range(256)] gamma_table = np.round(np.array(gamma_table)).astype(np.uint8) img_corrected = gamma_trans(img, 0.5) cv2.imwrite(img_path + "gamma_corrected.jpg", img_corrected) hist_b_corrected = cv2.calcHist([img_corrected], [0], None, [256], [0, 256]) hist_g_corrected = cv2.calcHist([img_corrected], [0], None, [256], [0, 256]) hist_r_corrected = cv2.calcHist([img_corrected], [0], None, [256], [0, 256]) fig = plt.figure() pix_hists = [ [hist_b, hist_g, hist_r], [hist_b_corrected, hist_g_corrected, hist_r_corrected] ] pix_vals = range(256) for sub_plt, pix_hists in zip([121, 122], pix_hists): ax = fig.add_subplot(sub_plt, projection = "3d") for c, z, channel_hist in zip(["b", "g", "r"], [20, 10, 0], pix_hists): cs = [c] * 256 ax.bar(pix_vals, channel_hist, zs=z, zdir="y", color=cs, alpha=0.618, edgecolor="none", lw=0) ax.set_xlabel("Pixel Value") ax.set_xlim([0, 256]) ax.set_ylabel("Counts") ax.set_zlabel("Channels") plt.show() ···

Tear-open-outfit.是什么意思

Tear-open-outfit.拆装。

centos 6.5 怎么查看NSS的版本,或者怎么替换成OpenSSL??谢谢

怎么查看NSS的版本可执行命令yum info nss.x86_64在我的系统跟OpenSSL可共存并不冲突

Openswan和freeswan的区别?

openswan采用的是ipsec技术实现的VPN,由于在IP层实现,效率高,历史悠久,网上相关的配置文章也多,稳定。可以实现p2p,p2net,net2net. openvpn采用SSL技术实现,由于主要工作在应用层,效率低,如果单位流量比较大,还是不要用这个了。另个他采用了SSL技术,也不是我们通常所说的SSL VPN。 目前市场上比较流行的硬件VPN都是采用的ipsec技术。所以选择第一种对你以后更换硬件有帮助。 基本上来说,市场上的硬件VPN产品很少采用openvpn这样的技术的。

PUSH DOWN&TURN CLOSE TIGHTLY TO OPERN 是什么意思

我的理解:往下推,反方向用力压紧旋转打开。

gap opening penalty 是什么意思

Gap opening penalty:空格罚分设置,增加一个空格就罚相应的分值,增加这一分值会降低空格出现的频率。一般扣5-10分

亮声open真名叫什么

都是脑瘫么?人家问的是亮声,不是亮声open,亮声不是只有一个open

wHAT IS A SOAP OPERA?请用英语回答一下 也写上汉语 谢谢

什么是肥皂剧

CSS 透明度怎么设置。 filter:alpha(opacity=10); 我这句话在IE中有效 在其它的浏览器中就没效(Opera)

filter:alpha(opacity=0);moz-opacity: 0;-khtml-opacity: 0;opacity:0;

小米路由3可以刷Pandorabox或OPENWRT吗

方法/步骤1首先,我们拿到手的小米路由3 ( 在以下文中以 MINI 代替 ),系统是官方稳定版的。要想刷 OpenWRT ( 在以下文中以 OP 代替 ) , 我们需要刷入 开发版 的 MINI 系统。 打开 miwifi 点 com 点击 ——> 下载 然后找到 小米路由器mini ROM ————> 开发版 0.4.96(8月29日更新) ————> 立即下载 下载好以后,我们需要用到一个U盘,随便 2G 或者 4G 都可以,把U盘格式化为 FAT32 格式。 然后把下载好的 NIMI 开发版 系统 复制到 U盘 根目录下,并改名为 miwifi.bin 路由器断电,插入U盘 ,按住复位键 ,路由器通电 ,指示灯闪烁的时候,放开复位键,然后等待刷机完成。 当MINI的指示灯由 黄色长亮 变成 蓝色长亮的时候,我们的MINI 开发版系统就刷好了。2 然后就是把路由器的网络接入方式设置好,并绑定你的 小米 帐号。 下一步,就是获取 ROOT 权限。 我们打开 miwifi 点 com ,点击 ————> 开放 下拉 点击 ————> 开启SSH工具 然后,再打开的网页中 ,记住你的 root密码 ,在后面的操作中用得到。 点击 ————> 下载工具包 把下载下来的 miwifi_ssh.bin 复制到刚才的U盘中, 这个时候,要把前面复制进去的开发版系统文件 miwifi.bin 删除掉。 同样的,断电,插入U盘,按住复位键,通电,在黄色指示灯闪烁的时候,放开复位键,等待.... 当指示灯变成 蓝色长亮的时候,说明我们获取到 root 权限了。可以接下去的操作了。 我们打开 h t t p : //downloads.openwrt.org.cn/PandoraBox/Xiaomi-Mini-R1CM/ 我们下载MINI 的 OP 程序 PandoraBox-ralink-xiaomi-mini-r474-20140703.bin 这个里面,已经安装了一些插件了3我用的是这一个。 PandoraBox-ralink-xiaomi-mini-r515-20140719.bin 这个里面,是纯净版的 OP 我们把它改一个名字,因为然面要把OP程序的名字打出来,所以我们就把前面的英文都删掉 , 改成 20140703.bin 然后我们在百度下载一个工具 winscp 下载好后,安装完成。 打开 winscp , 文件协议 我们选择 SCP ,主机名是路由器IP :192.168.31.1 ,端口是:22 点击登录 需要我们输入用户名, root 和 密码,这个密码,就是在上面,获取ROOT权限的时候,网页上显示的 root密码, 在弹出的窗口上,我们选择 是 。 然后在,右边我们打开 /tmp/ 左边找到下载好的 MINI 的 OP程序 ,把它从左边的框拖到右边的框,也就是把文件复制到 MINI 的 /tmp/目录下 到这里,我们就可以把 winscp 关掉了。 然后,再下载一个工具 百度 putty 它是一个绿色的小软件,不需要安装 ,下载后,直接打开 我们在 Host Name(of IP address) 下面的空白的地方,输入MINI 的IP地址 :192.168.31.1 在弹出的对话框上点 是 或者是 YES ,然后,输入帐号 root 回车 再输入 root密码, 注意:我们输入的root密码,在窗口上是不显示出来的,你只要在键盘上面,按出密码的字母和数字,然后回车就进入路由器了。 进入路由器以后,输入 cd /tmp/ 回车 然后,输入 mtd -r write /tmp/20140703.bin firmware 回车 然后就是在刷入OP到 MINI 里面了。 等待一下 大概40秒到一分钟的样子,我们按一下,方向键 上 。 然后路由器就自动 刷好 重启了 。4稍微等待一下,你可以用手机搜索一下周边的WIFI,你就会看到 PandoraBox开头的非常好的 WIFI 网络,不需要密码。 到了这一步,我们的MINI 也终于刷好了 OP 了 下面我们需要重新获取一下IP地址。 如果你的电脑是手动输入IP地址的,请改一下,让他自动获取,获取到IP地址后,我们在浏览器输入 192.168.1.1 回车 进入OP 了,点击管理 ,然后输入帐号和密码。默认的帐号是 root 密码是 admin 回车就可以进去了。 然后设置好相关的参数,修改系统时间和密码。 如果想要刷回 MINI 官方系统,请参照上面,刷入开发版系统操作。

a second day 怎么翻译。第二天? 例句:The polls are open for a second day in southern Sudan.

又一天的意思

sherlock opencv视觉软件怎么样

还不错。opencv是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库。其功能是,提供了丰富的视觉处理算法,其中一些是用C语言编写的。由于它的开源特性,它可以被正确处理,并且链接生成执行程序可以在不添加新的外部支持的情况下完全编译,因此许多人使用它来移植算法。

sherlock opencv视觉软件怎么样

还不错。opencv是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库。其功能是,提供了丰富的视觉处理算法,其中一些是用C语言编写的。由于它的开源特性,它可以被正确处理,并且链接生成执行程序可以在不添加新的外部支持的情况下完全编译,因此许多人使用它来移植算法。

js使window.open打开的弹窗不可移动,双击标题栏无效,最小化无效

window.open ("page.html", "newwindow", "height=100, width=400, top=0,left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no") height=100 窗口高度; width=400 窗口宽度; top=0 窗口距离屏幕上方的象素值; left=0 窗口距离屏幕左侧的象素值; toolbar=no 是否显示工具栏,yes为显示; menubar,scrollbars 表示菜单栏和滚动栏。 Resizable=no 是否允许改变窗口大小,yes为允许; location=no 是否显示地址栏,yes为允许; status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;

window.open的窗口特性

feature参数是一个用逗号分隔的功能列表。如果该参数为空或者没有指定该参数,新的窗口将拥有所有的功能。另一方面,如果feature参数只指定了某一项或某几项功能,那么其他没有被指定的功能将不会出现在新的窗口中。该字符串不能包含任何空格或其它空字符串。列表中的每个元素的格式:功能[=值]对于绝大多数的功能来说,它们的值一般都是yes或no。对这些功能,等号和值都可以省略不写。对于 width和height特性, 必须给它们指定一个以像素为单位的值。以下是一些普遍支持的功能和它们的含义:alwaysLoweredInternet Explorer:不支持Navigator:版本 4+指定窗口总是保留在堆栈的最下面。换言之,不管新窗口是否激活,总是其他窗口下。window.open(alwayslowered.html,_blank,alwaysLowered);alwaysRaised  Internet Explorer:不支持Navigator:版本 4+指定窗口总是保留在堆栈的最上面。换言之,不管新窗口是否激活,总是其他窗口上。window.open(alwaysraised.html,_blank,alwaysRaised);channelmodeInternet Explorer:版本 4+Navigator:不支持指定是否按照剧场模式显示窗口,以及是否显示频道区。window.open(channelmode.html,_blank,channelmode);dependentInternet Explorer:不支持Navigator:版本 4+定义是否窗口成为当前打开窗口的依赖子窗口。依赖窗口就是当它的父窗口关闭时,它也随即关闭。在windows平台上,一个依赖窗口不会在任务栏上显示。window.open(dependent.html,_blank,dependent);directoriesInternet Explorer:所有版本Navigator:所有版本指定是否显示目录按钮(比如众所周知的What"s Cool and What"s New 按钮)。Internet Explorer将这些目录按钮引用为链接工具栏,Navigator(版本4和以上)称之为个人工具栏。window.open(directories.html,_blank,directories);fullscreenInternet Explorer:版本 4+Navigator:不支持定义是否按照全屏方式打开浏览器。请小心使用全屏模式,因为在这种模式下,浏览器的标题栏和菜单都被隐藏,所有你应该提供一个按钮或者其他可视的线索来帮助用户关闭这个窗口。当然,使用热键ALT+F4也能关闭窗口。window.open(fullscreen.html,_blank,fullscreen);heightInternet Explorer:所有版本Navigator:所有版本以象素pixel为单位定义窗口文档显示区域的高度,最小数值是100。如果仅仅定义高度,Internet Explorer使用给定的高度和默认的宽度。对于Navigator,如果不同时指定width或者innerWidth,那么就将忽略这个属性。window.open(height.html,_blank,height=200,width=300);hotkeysInternet Explorer:不支持Navigator:版本 4+如果没有定义(或者为0),那么就屏蔽了没有菜单条的新窗口的大部分热键。但是安全以及退出热键仍然保留。window.open(hotkeys.html,_blank,hotkeys=0,menubar=0);innerHeightInternet Explorer:不支持Navigator:版本 4+以象素pixel为单位定义窗口文档显示区域的高度,最小数值是100。在Navigator版本4中,这个特征替换height,为得是保持向后兼容。对于Navigator,如果不同时指定width或者innerWidth,那么就将忽略这个属性。window.open(innerheight.html,_blank,innerHeight=200,innerWidth=300);innerWidthInternet Explorer:不支持Navigator:版本 4+以象素pixel为单位定义窗口文档显示区域的宽度,最小数值是100。在Navigator版本4中,这个特征替换width,为得是保持向后兼容。对于Navigator,如果不同时指定height或者innerHeight,那么就将忽略这个属性。window.open(innerwidth.html,_blank,innerHeight=200,innerWidth=300);leftInternet Explorer:版本 4+Navigator:不支持以象素为单位定义窗口的X左标。window.open(left.html,_blank,left=20);locationInternet Explorer:所有版本Navigator:所有版本定义是否显示浏览器中供地址URL输入的文本域。window.open(location.html,_blank,location);menubarInternet Explorer:所有版本Navigator:所有版本定义是否显示菜单条(菜单条位于窗口顶部,包括“文件”和“编辑”等)。window.open(menubar.html,_blank,menubar);outerHeightInternet Explorer:不支持Navigator:版本 4+以象素为单位定义窗口(它的外部边界)的总高度,最小数值比100多一些,因为窗口内容区域的高度必须至少是100。如果没有同时定义outerWidth,Navigator将忽视这个特征。window.open(outerheight.html,_blank,outerHeight=200,outerWidth=300);outerWidthInternet Explorer:不支持Navigator:版本 4+以象素为单位定义窗口(它的外部边界)的总宽度,最小数值比100多一些,因为窗口内容区域的宽度必须至少是100。如果没有同时定义outerHeight,Navigator将忽视这个特征。window.open(outerwidth.html,_blank,outerHeight=200,outerWidth=300);resizableInternet Explorer:所有版本Navigator:所有版本定义是否窗口可以通过它的边界进行大小缩放控制。依赖于平台不同,用户也许还有其他改变窗口大小的方法。window.open(resizable.html,_blank,resizable);screenXInternet Explorer:不支持Navigator:版本 4+以象素为单位定义窗口的X坐标。window.open(screenx.html,_blank,screenX=20);screenYInternet Explorer:不支持Navigator:版本 4+以象素为单位定义窗口的Y坐标。window.open(screeny.html,_blank,screenY=20);scrollbarsInternet Explorer:所有版本Navigator:所有版本定义是否激活水平和垂直滚动条。window.open(scrollbars.html,_blank,scrollbars);statusInternet Explorer:所有版本Navigator:所有版本定义是否在窗口的下部添加状态栏。window.open(status.html,_blank,status);titlebarInternet Explorer:Version 5+Navigator:版本 4+定义是否显示窗口的标题栏。在Internet Explorer中,除非调用者是一个HTML应用程序或者一个可信任的对话框,那么这个特征是被屏蔽的。window.open(titlebar.html,_blank,titlebar=0);toolbarInternet Explorer:所有版本Navigator:所有版本定义是否显示浏览器的工具栏(位于窗口的上部,包括“后退”和“向前”)。window.open(toolbar.html,_blank,toolbar);topInternet Explorer:版本 4+Navigator:不支持以象素为单位定义窗口的纵坐标。window.open(top.html,_blank,top=20);widthInternet Explorer:所有版本Navigator:所有版本以象素pixel为单位定义窗口文档显示区域的宽度,最小数值是100。如果仅仅定义宽度,Internet Explorer使用给定的宽度和默认的高度。对于Navigator,如果不同时指定height或者innerHeight,那么就将忽略这个属性。window.open(width.html,_blank,height=200,width=300);z-lockInternet Explorer:不支持Navigator:版本 4+定义窗口激活时不在堆栈中浮起,就是说,新窗口当被激活时并不能位于其他窗口之上。window.open(zlock.html,_blank,z-lock);

用js window.open在新窗口中打开链接,关于设置URL地址设置为变量的问题

你明明已经把href传到openwin方法中了,但是你没有接收,把openwin改下function openwin(url) {alert(url); //获取不到href属性window.open (url,"newwindow","height=600,width=800") ;}

window.open 怎么去掉最大化和最小化按钮?(js)

在窗体的属性中,将FormBorderStyle改为FixedToolWindow即可

如何关闭用window.open打开的窗口?

利用以下代码<img src="B窗口的图片" onclick="this.close();" />

window.open 打开新窗口带有原来地址怎么处理

地址加上 http:// 试试

关于opencv mat类型和countNonZero函数

这个代码是偏matlab风格的,意思就是以矩阵为基础来进行的计算或者比较,你这个时候应该把UCHAR_MAX看成是大小与oROI一样,每个元素都为UCHAR_MAX的矩阵,然后把每个UCHAR_MAX中和oROI中的对应位置上的元素相比较,得到的结果仍然还是一个大小与oROI一样的矩阵,这个时候它的元素就应该是0或者1了,那么countNonZero就是计算这个矩阵中1的个数。所以能用int a = (oROI<UCHAR_MAX)&(oROI>0)类型是不匹配的

谁帮忙翻译一句话,关键是两种卫星怎么翻译satellites in orbit 和operational satellites

同意楼上!

SEW参数中spindle slope是什么意思

pindle slope主轴倾斜

latin europe是哪里

根据维基百科,latin europe指讲罗曼斯语族(有时也叫拉丁语族,属印-欧语系)诸语言的欧洲国家。主要包括:西班牙语、葡萄牙语、法语、意大利语和罗马尼亚语。

求助 linux c 编写openssl socket套接字通信 运行时报错 网络编程 不知道该怎么办啊

1.TCP流式套接字的编程步骤在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK!SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字(socket)。SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换Unsigned short为网络字节序的格式addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);客户端代码如下:#include <Winsock2.h>#include <stdio.h>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );加载套接字库if ( err != 0 ) {return;}if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup()( );return; }SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);创建套接字(socket)。SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));向服务器发出连接请求(connect)。char recvBuf[100];和服务器端进行通信(send/recv)。recv(sockClient,recvBuf,100,0);printf("%s ",recvBuf);send(sockClient,"This is lisi",strlen("This is lisi")+1,0);closesocket(sockClient);关闭套接字。WSACleanup()();//必须调用这个函数清除参数}

scope ,range,domain,rank

D 领域 只有该词符合题意

u200bMINI Cooper S最强GP套件包JCW登场,手动前驱钢炮,赛道利器

Author / 酷乐 汽车 Source / MINI # MINI # # GP # # 钢炮 # MINI的新惊喜又来了,买JCW版本的车主可以选装GP版本的套件,更酷,更拉风。 2019年,MINI在洛杉矶车展上发布了 John Cooper Works GP 车型, 2.0T的四缸涡轮引擎可以输出302匹马力 ,此外就是外观和内饰套件的全面升级,巨大的GP尾翼帅的异乎寻常,百公里加速时间在5秒上下。 但是,此处新发布的版本是GP Racing的外观套件,也就是说普通的JCW车型可以获得GP车型灰色金属外观、车头的红色GP字母,特殊版本的GP轮圈以及大量帅气非凡的完美细节,但是红色GP字样的超大尾翼和夸张的外观样式还是没有的。 内饰方面,GP Racing套件包还搭配了Dinamica的真皮运动座椅,带有红色缝线和GP字母的定制方向盘、原厂脚垫和诸多GP完美细节,CVT版本的拨片上也带有GP字母。 动力方面,依然是标准的JCW,但是依然够用。 直列四缸涡轮引擎可以输出228hp的马力 ,同时可以在6速手动变速箱和8速自动变速箱之间选择,依然是前驱钢炮的设定,同时JCW本身就有更运动的悬架设定和更强大的制动系统,原厂状态下依然可以刷圈跑赛道,完全够用。 百公里加速时间6秒左右,作为一辆前驱手动挡的小钢炮,这已经很足够了。 MINI官方消息,GP Racing套件包将在2020年7月发布,价格尚未公布,期待中国地区可选MT+GP套件。

Ajax下同步异步执行下,用window.open()打开窗口的原理是什么?为什么会不一样?

我觉得原因是:

heliotrope希腊语怎么读

在希腊语中,heliotrope这个词是ηλιοτρu03ccπιο(ēliotrópio),它的发音为:ē-li-o-tró-pio。η (ē) 发音为 /i/,类似于英语中的字母 ee,但更短暂,λι (li) 发音为 /li/,类似于英语中的 lee,ο (o) 发音为 /o/,与英语中的 o 相似,τρu03cc (tro) 发音为 /tro/,类似于英语中的 tro,πιο (pio) 发音为 /pio/,类似于英语中的 pee-o。heliotrope这个词在中文中常用作植物的名称,特指一种向阳植物,即植物的花朵或叶子会随着太阳的位置而转动,以最大程度地接收阳光。例如,在园艺中,可以用heliotrope来描述某些具有这种特性的植物。此外,heliotrope也可以用作颜色的名称,指的是一种紫色调的浅紫罗兰色。在设计和时尚领域中,heliotrope可以用来描述具有这种颜色的物品或材料。例句:1、我在花园里种了一些向阳植物,它们会跟随太阳的移动而转动。2、她选择了一件漂亮的连衣裙,颜色是heliotrope的,非常适合夏天的气氛。除了植物的名称和颜色,heliotrope这个词也可以引申为其他含义。例如:1、化学:在化学领域,heliotrope是指一种紫红色的染料,通常用于染色或指示剂。2、香水:Heliotrope是一种常见的香水成分,其气味被描述为甜美、温暖和芳香,类似于杏仁和香草。3、文学和艺术:Heliotrope有时也用作文学、诗歌或艺术作品的题目或主题,以表达对阳光、光明、希望或追求幸福的情感。在使用词语heliotrope的时候的注意事项1、上下文明确:由于heliotrope并不是一个常见的词汇,使用时应确保上下文明确,让读者或听众能够理解你所指的具体含义。2、领域限定:根据使用场合和领域,确保你所使用的heliotrope的含义是准确的。例如,在讨论植物时,它指的是一种向阳植物;而在化学领域,它可能指的是一种染料。3、意象和联想:考虑到heliotrope是一个形容词,使用时可以引起读者或听众对阳光、颜色或气味等方面的联想。在表达中加入相关的描述来帮助理解。

devstack安装卡在 venv-tempest installdeps: -chttps://git.openstack.org/cgit/

在tempest仓库下执行命令tox -e genconfig1会在etc文件夹下生成tempest.conf.sample配置文件模版初始化确定测试环境目录,例如/opt目录,在/opt目录下执行命令tempest init tempest-test-dir1会在/opt目录下生成tempest-test-dir测试文件夹,文件夹结构[root@controller tempest-test-dir]# tree.├── etc│ ├── tempest.conf│ └── tempest.conf.sample├── logs└── tempest_lock3 directories, 2 files123456789修改配置文件修改测试文件夹下的etc/tempest.conf文件,主要包括修改认证信息、镜像信息、网络信息等。详细配置请参考tempest开发者文档————————————————

VB Open 提示 文件己打开

在保存之前加个判断。。

open and squash什么意思

open and squash开放和南瓜

什么是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模式确实更好,尤其是鼠标不会那么飘。

什么是OpeenGL

OpenGL目录 概述 Open GL现状 高级功能 OpenGL编程入门 OpenGL与DirectX的区别 概述 OpenGL - 高性能图形算法行业标准 OpenGLu2122 是行业领域中最为广泛接纳的 2D/3D 图形 API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGLu2122 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGLu2122 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。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图形设计软件制作的DXF和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支持。 今年08年正式公布OpenGL3.0版本。并且得到了,nv的支持,其官方网站上提供针对N卡的sdk下载。[编辑本段]高级功能 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 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()。
 首页 上一页  1 2 3 4 5 6 7 8  下一页  尾页