关于如何发大舌音r

Python044

关于如何发大舌音r,第1张

? 网上搜来各方资料有关如何发好这个R 颤音? 所谓颤音,是由肺部发出的快速气流引起声道内弹性部位的颤动而造成的一种辅音。比如大家都说俄国人说话总打嘟噜。这个嘟噜就是个大舌颤音。声道中可以颤动的部位有三处,双唇、舌尖和小舌。所以人可以发出的颤音也有三个,即双唇颤音、舌尖颤音和小舌颤音。其中舌尖颤音人们也往往称之为大舌音或大舌颤音。双唇颤音是最容易发出的颤音,有些小孩子就喜欢发出这样的声音。在汉语有些方言读“八”的时候,音色就差不多是个双唇颤音。舌尖颤音在汉语各方言中比较少见,而新疆有些少数民族语比如维吾尔语有这样的音。大家注意一下街上卖羊肉串或葡萄干的新疆兄弟说话就可以听到这样的音。在欧洲很多语言中都有这样的音,比如俄语、西班牙语、拉丁语。小舌颤音相对要少见一些,主要集中在欧洲。如法语、德语。如果按颤音的方式发音,但只颤一下,这就成了闪音。英语中的r大多时候就应该发成一个闪音,而不要发成汉语中的r。 颤音发音原理 其实和旗帜在风中飘扬差不多。我们可以手捏着一条纸条,用嘴吹纸条另一端,纸条就会不断颤动。所以学发颤音并不是很难。发音的时候只要注音发音部位不要过分紧张就行了。发音部位一紧张就相当于那条纸条换成了金属条,那自然就颤不起来了。发小舌颤音时只要想象一下早晨用水漱喉咙的感觉就行了。 增音练习: 1、增加与颤音发音部位相同的辅音,在音节当中体会舌的颤动。如:嘟——/tru/。练习时拉长音,注意力不要放在是否为舌尖上,而应放在气流的体验上。 2、音节末尾的颤音比较难发,根据个人情况可以随意增加一个元音,之后再把该元音弱化。 千万别控制,也不要企图从闪音、卷舌音过度到颤音,一定别控制尤其是舌头,多想一想疾风中的旗帜。 按说小舌颤音是最容易学会的。理由是一般人都会打呼噜。再一个理由是,小舌本身紧张不起来。也就是说,只要轻轻抬高舌根,呼出气流就很容易把小舌当作软活塞推动,让它震动起来。关键问题是人的知觉经验对此并不在意,不知道那就是小舌的颤动。知觉经验要逮住它,一定要情绪上放松起来,让发音器官的肌肉放松起来。一开始不必让声带同时震动,让喉头肌肉也放松起来。在最宽松的条件下让呼出气流去推动推动小舌,也就有了知觉经验了。那里的关键是呼出气流,是靠那种气流推动小舌的。小舌自己不会颤动,倒是有弹性的,全靠气流去推动。其次,小舌能够变成活塞,跟通气孔的大小有关系,所以要轻轻抬高、后缩舌根,让通气孔缩小。所谓颤音,只要震动三两下就够了。你听到“啪啪啪”,就 是震动。舌根抬起、后缩,而小舌不震动,可能是擦音。 舌尖颤音更要防止各种紧张因素。口腔不要开得太大,让舌面轻轻抬高,让舌尖去做自由弹性体活塞,用呼出气流去推动它。那个通气孔是关闭、打开交替的。那种开合不能靠舌部肌肉,只能靠气流推动,靠它自由震荡。舌尖稍微向上弯起一点,让那个弹性体细一点、短一点、薄一点(小一点),就容易推动它了。 先不考虑颤不颤,练习 tr 。声带先不震动。那个 t 不要送气,是一瞬间的“得”, 10 毫秒(正常音节的20 分之一时间;极端的时间,千万别用秒表计算;那么短的时间,连电视台报时都模糊了)。tr 中间也好,后边也好,什么元音都不要。从 t 到 r 的时间越短越好。仅仅就是用吹气的方式,去让舌尖 tr 一下。(再加上声带震动,就是赶马车吆喝的“得儿……驾!”)只要舌尖不紧张,tr 能够很快发出来,例如 50 毫秒完成,也就学会了。接着是 trrr 。接着是 rrr 。 严格说,舌尖不紧张,但是舌面两侧的边缘是要压住上牙床和齿龈的。轻轻压住就行。那里封不严,会有漏气问题。一说这话,就又多了一个教条。你要去琢磨这个、捉摸那个知识概念,肌肉就紧张起来了。少一点概念,多一点“碰运气”吧!反正压住哪里不管,只要舌头旁边不漏气就行。甚至什么概念都不管,只要搞出一个快速的 tr ,就是胜利。 大家说的“大舌音”应该就是舌颤音“R”吧 我认为不能借用D 这个字母来帮助发音,如果成习惯是不好改正的。 应该把舌头轻轻的放在上牙关,然后向外送气,使舌头自然有规律的震动发出声响练习方法: 1 用5 个元音A E I O U 分别和R 相拼 也就是 AR ER IR OR UR 一定要耐心,至于练习的成效要视个人情况 2 当步骤1 练习取得比较好的效果后,可以将字母的位置调个 也就是将元音放在后面 如:RA RE RI RO RU ? 我想发这个音的最关键地方是舌头一定不要紧张,让它自然贴住上颚。你可以先发双唇颤音体会一下用力的状态。我想发这个音的最关键地方是舌头一定不要紧张,让它自然贴住上颚。你可以先发双唇颤音体会一下用力的状态。 主要是舌头放松。如果你要发舌尖颤音,那就跟英语里的/s/差不多,(不过就跟汉语里的舌尖音有点不一样),气流的控制也不可以太快,最重要的我想是要保持稳定的气流。。。根据贝努勒定律,当气流通过一道狭窄的地方,空气粒子速度增加,压力降低。这样你的放松了的舌头就会被往上吸,碰到上牙后的齿槽(硬腭前端)。可是因为气流继续的往前,结果又把舌头跟上齿槽分开。如是者连续的发生,就成为颤音了。 我的方法是:先学会简单的“舌尖上齿颤音”,再向普通的舌尖颤音过渡。 “舌尖上齿颤音”也许人类语言中并没有,但的确是能发出来的,而且容易学。 具体步骤是: 1.先学会舌尖上齿颤音。这个比较简单。舌头轻抵上齿,想办法把舌头吹颤。如果不行,不断调整舌头的位置、抵住上齿的力度,最后总能颤起来的。 2.练熟舌尖上齿颤音。此时可以不在乎发音的力量:如果你觉得要很大劲才能吹动,吐沫四溅,那也没事。只要练熟就行了。 3.一边发舌尖上齿颤音,一边试着翘起舌头,不要让舌头停止颤动。这时你发的就是人类语言中常见的大舌颤音了。 4.尽量减短舌尖上齿颤音的发音时间,尽快让舌头翘起来。最后,你会发现你发出的音是变成了"drrrrrrrrrrr" 5.练熟之后,设法拜托前面的d.至此,大舌颤音就完全练成了。 6.尝试在吐气力度尽量小的情况下发出大舌颤音。 练习舌尖颤音的时候,舌尖轻轻向上卷起(轻到不费一点劲),轻轻接触硬腭前部(轻到没有多少接触的感觉,总之要放松),用连续的呼出气流吹动它,让它自己振动起来。学会吹动舌尖以后,再学习同时让声带振动。开始学习的时候宁可让舌尖多颤动一段时间。实际语言里可能只要颤动两三下就够了。小舌颤音甚至可以用漱口的办法让小舌颤动起来。 可以设想,在大风中空气很快流过高高烟囱的两侧,烟囱也会摆动起来。因为是使用气流吹动的,所以说是伯努利效应的结果。那种运动方式的原理,是跟闪音不一样的。舌尖闪音要靠人用神经指挥肌肉去让舌尖运动。 伯努利效应使飞机机翼产生升力,可以飞上天。或者说,机翼上表面的流线型比下表面的流线型长,飞机前进的时候,空气流过上表面比流过下表面快,于是气流压向机翼上表面的负压力大于下表面的负压力,飞机就获得了上升的力量。两条船挨得太近会相向靠拢或碰撞,也是那种负压力作用的结果。 声带所以能够振颤,主要是伯努利效应和弹性力的结果,不是神经脉冲指挥的。 补充一点。 练习发舌尖颤音的一开始,舌尖轻轻向上卷起,接触上腭。与此同时舌面边缘也要起作用,把口腔前边的出口全都堵住。舌面边缘用一定力量,紧靠左右两侧的上腭和牙床。它们不参加颤动,只是使舌尖的活门缩小,同时使舌尖有弹性。也就是说,舌面两侧的边缘是不动的。呼出气流的压力会把舌尖推开。如果吹不动舌尖,可能是舌尖太紧张(无声),更可能是两侧漏气(有 h...... 声)。如果吹的时候听到一声 th...... ,然后舌尖停在外头不动了,一定是缺少弹力,也就是两侧太放松,或者舌尖太紧张,也可能是舌尖后卷不够。如果听到的是一声 tx......,是舌根太高太紧张。舌尖活门调得小一些,可能更容易颤动起来。舌尖向上顶得太紧,会听到 trrr ,就累了。东北地区车把式的“得儿驾”就是 trjia…… 。关键是要学会 rrrrr 的轻松的颤动。 但是要注意同时声带要震动。初到法国时候我发R 是颤动小舌,但没有启动声带;引来法国朋友纠正; 后来干脆用江浙话的“合”声母代替;不颤动小舌,反到被接受了。 比如;rat 读成上海话“鞋”,虽然不十分标准,但能被接受;读成上海话或普通话的“哈”(清音)就通不过。 既然你已经学会大舌颤音,可以做一下“吹舌尖”的游戏。也就是,声带不要振动,用气流吹舌尖,让它颤动起来。如果你会吹动舌尖,就尝试尝试能不能少颤几下。如果学会只颤动三两下,再配合声带振动,保准不会整个头都在狂颤。发颤音舌尖颤动的次数只需要少数几下就足够了。 美丽的颤音[r] 汉语普通话里没有颤音或者闪音,为了方便我用[r]来一同记这两个音,在西方一些语言里这两个是区别词义的音位,在我们的蒙古语里这是不能区别词义的变体。在语图上颤音表现为 2 个以上间歇出现的的空白段和空白段间歇上的嗓音横杠,闪音表现为极短的空白段,如果闪音出现在词末,后面带有很长时间的弱短元音--即长时间的嗓音横杠的持续。不管闪音还是颤音其空白段的持续时间是20 毫秒左右,其发音方法为:舌尖抬起快速接触到齿龈位置后马上分开,然后再次抬起,快速接触齿龈位置为立即离开。这样说很不严肃,不过为了更通俗点,只能这样说了。下面请看颤音的语图和腭位图。 下面是闪音的语图和腭位图 ? 闪音只弹一次舌。 颤音弹多次舌。 东北二人转跟凤阳花鼓里都有颤音, 就是“一得儿喂”。 可能有颤音的语言多。 印欧语系的r 不是大舌颤音,就是小舌颤音。 但估计根可能是大舌颤音。 只有英语的r 发音是类似“日”,这大概是进化到后期的一种现象。 而法语的小舌颤音,也有懒化到念成“喝”。 阿拉伯语、泰语、日语、韩语、印地语、俄语、马来语、藏语、蒙语这些亚洲语言也都有颤音。 颤音是往复运动,是多次往复。跟颤音比,闪音只往不复,是半次,不是“一次”。颤音是舌尖作为弹性体的往复运动。颤音是气流吹动的,不是肌肉的主动行为。闪音是肌肉的主动行为。

Adobe Photosop是一个处理图片的软件.广泛应用于婚纱影楼,广告公司等地方.它可以很轻松的消除图像中的痕迹,比如人物脸上的伤疤,皱纹,痣等.

它处理的图片是由像素组成的"也就是一个图片放大很多倍的时候我们所看到的小方块"它的图片最大放大到1600倍.里边的小方块也就是像素.越高,图片就会越清楚,反之模糊.一般来说打印的分辨率是300每像素英寸.也就是每厘米118.11个像素,像素也叫做点,处理的图也叫做点阵图.

快捷键:

1.快速打开文件

双击Photoshop的背景空白处(默认为灰色显示区域)即可打开选择文件的浏览窗口

第二节:

1.针对所选择的区域进行处理。如果没有选定区域,则对整个图像做处理.

2.套索”工具中Shift和Alt键的使用方法:

增加选取范围按“Shift”键。

减少选取范围按“Alt”键。

两个选取框叠加的区域按“Shift+Alt”键。

魔杖”工具中Shift和Alt键的使用方法:

增加选取范围按“Shift”键。

减少选取范围按“Alt”键。

两个选取框叠加的区域按“Shift+Alt”键。

选框-M 移动-V 套索-L 魔棒-W

喷枪-J 画笔-B 铅笔-N 橡皮图章-S

历史记录画笔-Y 橡皮擦-E 模糊-R 减淡-O

钢笔-P 文字-T 度量-U 渐变-G

油漆桶-K 吸管-I 抓手-H 缩放-Z

默认前景和背景色-D 切换前景和背景色-X

编辑模式切换-Q 显示模式切换-F

3.如果我们按住Alt键后再单击显示的工具图标,或者按住Shift键并重复按字母快捷键则可以循环选择隐藏的工具。

4. 获得精确光标

按Caps Lock键可以使画笔和磁性工具的光标显示为精确十字线,再按一次可恢复原状。

5. 显示/隐藏控制板

按Tab键可切换显示或隐藏所有的控制板(包括工具箱),如果按Shift+Tab则工具箱不受影响,只显示或隐藏其他的控制板。

6. 快速恢复默认值

点按选项栏上的工具图标,然后从上下文菜单中选取“复位工具”或者“复位所有工具”

第三节:

7.自由控制大小

缩放工具的快捷键为“Z”,此外“Ctrl+空格键”为放大工具,“Alt+空格键”为缩小工具,但是要配合鼠标点击才可以缩放;相同按Ctrl+“+”键以及“-”键分别也可为放大和缩小图像;Ctrl+Alt+“+”和Ctrl+Alt+“-” 可以自动调整窗口以满屏缩放显示

使用抓手工具时,按住空格键后可转换成手形工具,即可移动视窗内图像的可见范围。在手形工具上双击鼠标可以使图像以最适合的窗口大小显示,在缩放工具上双击鼠标可使图像以1:1的比例显示。

8.键盘上的D键、X键可迅速切换前景色和背景色。

9.用任一绘图工具画出直线笔触:先在起点位置单击鼠标,然后按住Shift键,再将光标移到终点单击鼠标即可,使用绘画工具如(如画笔,向笔等),按住Shift键单击鼠标,可将两次单击点以直线连接.

10.在图层、通道、路径调板上,按Ctrl键并单击一图层、通道或路径会将其作为选区载入;按Ctrl+Shift键并单击,则添加到当前选区;按Ctrl+Shift+Alt键并单击,则与当前选区交叉。

复制技巧

1.按Alt键拖动选区将会移动选区的拷贝,

2.按住Ctrl+Alt键拖动鼠标可以复制当前层或选区内容。

3.如果你最近拷贝了一张图片存在剪贴板里,Photoshop在新建文件(Ctrl+N)的时候会以剪贴板中图片的尺寸作为新建图的默认大小。要略过这个特性而使用上一次的设置,在打开的时候按住Alt键(Ctrl+Alt+N)。

4.当我们要复制文件中的选择对象时,要使用编辑菜单中的复制命令。复制一次你也许觉不出麻烦,但要多次复制,一次一次的点击就相当不便了。这时你可以先用选择工具选定对象,而后点击移动工具,再按住“Alt”键不放。当光标变成一黑一白重叠在一起的两个箭头时,拖动鼠标到所需位置即可。若要多次复制,只要重复的放松鼠标就行了。

5.可以用选框工具或套索工具,把选区从一个文档拖到另一个上.

6.把选择区域或层从一个文档拖向另一个时,按住Shift键可以使其在目的文档上居中。

7.单击工具条中的画笔类工具,在随后显示的属性条中单击画笔标签右边的小三角,在弹出的菜单中再点击小箭头选择“载入画笔…”。

8.快捷键Ctrl+Z(可以自由地在历史记录和当前状态中切换),还增加了Shift+Ctrl+Z(用以按照操作次序不断的逐步恢复操作)和Alt+Ctrl+Z(使用户可以按照操作次序不断的逐步取消操作)两个快捷键。按Ctrl+Alt+Z和Ctrl+Shift+Z组合键分别为在历史记录中向后和向前(或者可以使用历史面板中的菜单来使用这些命令)。

9.打开Curve(曲线)对话框时,按Alt键后单击曲线框,可使格线更精细,再单击鼠标可恢复原状。

10.移动图层和选区时,按住Shift键可做水平、垂直或45度角的移动;按键盘上的方向键可做每次1个像

素的移动;按住Shift键后再按键盘上的方向键可做每次10个像素的移动。

图像模式及其转换.

在Adobe Photosop里,每一种颜色都有不同的用途,我们可以在处理图像时应根据自己的需要选择不同的颜色模式.

1.位图.

它使用两种颜色也就是黑跟白来表示图像的.特点是存储空间很少,但无法表现出图像丰富的色彩和色调.因此适用于一些黑白对比强烈的图像.要将图像转为位图之前,必须要先转为灰度.

2.灰度.

它是由256级的灰度来表示图像的,图像的每一个像素能够用0-255之间的亮度值表现,因而色调表现力强,图像也比较细腻,使用黑白相机得到的就是灰度的图像.它也可以由彩色照片转换得到,原图像的彩色信息删除,而只留下像素的亮度.图像转为灰度时颜色信息会全部丢失.

3.双色调.

通过用2-4种自定的油墨创建双色调,三色调,四色调的灰度图像.彩色图像专换为双色调前,必须首先转换成为灰度图像.

4.RGB

它是由红,绿,蓝也就是光的三原色组成的,这三种颜色重叠处会产生青色,洋红,黄色和白色,由于RGB合成可以产生白色,因此我们称它为加色模式,一般用于光照,视频和显示器.三种颜色的值为255时为白色的,反之为黑色的.它三种颜色可以在屏幕上重新生成多达1670万种颜色.

5.索引颜色

这种模式最多只能使用256种颜色,而且还可以将颜色数量减到更少以减小文件.通常输出到Web页和多媒体的图像文件.当彩色图像变为这种模式时将构建一个颜色表用于存放颜色.在索引颜色里只能进行有限的编辑,若要进一步的编辑,需临时变为RGB.

6.GMYK

理论上这个模式为青色,洋红,黄色合成的,他们合成后会生成黑色,因此这种颜色称为减色模式.它称为四色印刷.在准备要用印刷色打印图像的时候,应用CMYK模式,将RGB转为CMYK时会产生分色,最好是在创建图像开始就变成为CMYK.

7.Lab

它是目前包括颜色最多的一种模式,是Photosop在不同模式之间转换的中间模式.它是由亮度和两个色度分量组成的.L表示光亮,范0-100,

a表示从绿色到红色的色变化.b表示从蓝色到黄色的变化.两者都是-120-120.如果中想改变图像的亮度而不影响其他颜色值,可以将图像转为Lab,然后在L通道中进行操作.Lab最大的优点是颜色与设备无关,无论使用什么设备创建图像,都可以与产生的颜色保持一样.

调整图像

1.色阶

在色阶里可以调整图像的暗调,中间调和高光.以校正图像的色调范围和色彩平衡.常用于修改曝光不足和过度的照片.

2.自动色阶

可以将图像中最暗的像素变黑,最亮的像素变白,并在黑白之间扩展中间色调.一般使用它来调整缺乏明显对比度的图像.但是它有可能影响色彩平衡.

3.自动对比度

可以自动调整图像中的颜色的总体对比度.它不会单独调某个通道,所以不会引入或消除色偏,可以使高光显得更亮,暗调显得更暗.

4.自动颜色.

它以在图像查找得到的图像的高光和暗调的平均色来得到图像的对比度.并且自动设置图像中的中性灰色像素来调整图像的色彩平衡.可以用于校正色.

5.曲线

与色阶相似,它也是调整图像的整个色调范围,不同的是,曲线是用0-255色阶范围内的任意点来调整图片的,因而,利用曲线工具调整色调更精确,更细致.

6.色彩平衡

可以简单快捷的调整图像的阴影区,中间色调和高光区的色彩平衡.不过它只是能做精略的调整,若要精确调整图像中各色彩的成分,还是需要执行曲线和色阶.

7.亮度对比度.

可以调整图像的亮度和对比度.

8.色相饱和度

可以调整整个图像或单个颜色成色的色相,饱和度和亮度.色相就是颜色,每一种颜色都叫做一种色相,比如红色,绿色都是一种色相,饱和度就是颜色的纯度.亮度就是明暗了.

9.去色.

执行色命令,将彩色照片转换为相同颜色模式下的灰度模式,去色命令只对当前图层或图像中选区进行转化,不改变图像的模式.

10.替换颜色

可以在图像中选取特定颜色的图像范围,然后替换该颜色,相当于先使用色彩范围选定某个区域,然后使用色相饱和度命令调整该区域.

11.可选颜色

只对当前选择的颜色做改变,其他的不改.

12.通道混合器

通过输出的通道颜色来给图像做颜色调整.

13.渐变映射

将相等的图像灰度范围映射到指定的渐变填充色,就像是渐变完全融合到图像中一样.而不是单纯的叠加上去.

14.反相

反转图像中的颜色,此命令可以将一个正片黑白图像变成一个负片,也就是底片的效果.反相图像时通道中的每一个像素的亮度值转换为256级的颜色相反的值.

15.色调均化

将重新分布图像中各像素的亮度值,以便它们更均匀地呈现所有范围的亮度级别.它会查找图像中最亮和最暗值,并将最暗值变为黑色,最亮值为白色.

16.阈值

将灰度或彩色图像转换为高对比度的黑白图像,可以指定黑白的多少.

17.色调分离

可以指定图像中数据来出现色调分离的大小.

18.变化.

可以很直观的调整图像或选区的色彩平衡,对比度和饱和度.这个命令对于色调平均且不需要精确调整的图像是非常适用的.

文字的效果

注意:文字的效果对于我们所选的文字的字体是有很大的关系的.比如我们以后学的边框字就应该选一些比较粗的字体.如果细的话选区收缩会没有了.太小了.所以要多看一些字体.

1.投影字

输入文字,颜色无所谓,我们以后可以再改,提交,栅格化,这两个命令以后就省略了,因为这是最常用的以后应该很熟练.我们可以按住CTRL键用鼠标单击当前的文字层将它载入选区,也可以用选择菜单中的命令,但最好是用快捷键.载入选区后,我们可以随便给它加颜色和渐变 ,然后再做图层样式中的投影.

2.泥字

这个不用文字工具,所以也不用栅格化了,直接用画笔工具在背景上写上我们想要的字,然后做滤镜中风格化中的浮雕效果,调整参数就可以了,注意我们不可能做出一模一样的效果来,每做一次一般来说都有不同的效果,所以要想要做出好的效果来就要多调整.

3.图案字

先打开一幅图片,这个字我们用到的是蒙板文字工具,它不会产生文字图层,出现的是选区,当然如果选区太小的话我们可以用变换选区命令来变大.然后进行复制,粘贴.会出现一个图层,将当前图层做一些图层效果就可以了,如浮雕,投影都可以,我们做这个效果主要是做出文字从图像中凸出的效果.如果将图层移动的话就不对了.

4.风车字

这个字做出的效果是像风车转动的效果.输入文字,我们按住SHIFT键画出一个正圆,要保围整个文字.做扭曲中的极坐标,然后复制图层,将副本做模糊中的径向模糊,数量不用太大.再点击原图层将他的图层透明度小一点就可以了.

5.边框字

输入文字,载入选区做渐变,不要取消选区做选择修改中的收缩选区,数量不用太大,2就可以,然后再删除.然后再次载入选区,按住CTRL+ALT再加上光标轻移就可以了.做出立体效果.

6.卷毛字

输入文字,我们只需要按住SHITF键画一正圆,执行扭曲中的旋转扭曲就可以了,然后再用选区工具移动到合适的地方再次进行滤镜命令,也可以用CTRL+F也就是重复滤镜.

7.碎石字

输入黑色文字,将前景色设为白色背景为黑色,进行纹理中的染色玻璃,可以调整方格的大小,然后用魔棒工具选择白色,再点击选择中的选取相似然后删除,取消选区做图层样式中的斜面和浮雕就可以了,但是做完后还可以用套索工具选择碎的小块进行删除就可以了.

8.金属字

输入黑色文字,做模糊中的高斯模糊,再做风格化中的浮雕,再重复一次.最后做渲染中的光照效果,将通道选定为红色,为的是有立体效果,颜色改为黄色.

9.爆炸字

输入红色文字,做纹理中的龟裂缝,亮度最小,深度最大,用魔棒工具选择黑色进行选取相似.然后删除.画一个椭圆包围文字,给它做球面化.复制当前层,给副本做径向模糊,选择缩放,大小大一点.选择没有做模糊的那个层将当它的字一个一个的移动到前一图层的上面.然后再做一点外发光就可以了.

10.燃烧字

新建的是一个灰度模式.将背景色填充为黑色,字是白色的,先载入选区进行存储,用编辑中的顺时针转90度给他做风格化中的风,可以重复做向次,然后再逆时针转回来.做扭曲中的波纹.将模式变成索引,将颜色表中的灰度改为黑体.转为RGB模式后,将一开始存的选区载入回来,用选区工具移动到合适的位置上进行填充黑色.

11.凤尾字

输入文字,用选区工具一个一个的做渐变,复制当前层,用涂抹工具,调画笔的大小和压力进行涂抹.做完后做外发光.

12.根雕字

黑色的背景,字的颜色选深褐色.做纹理中的龟裂缝,扭曲中的波纹,做斜面和浮雕,加一点外发光,颜色是白色的,然后选小点的画笔压力值大点,进行涂抹,就可以了.

13.砖块字

颜色选择暗红色进行填充背景,做纹理中的纹理化,选择砖形,光照方向_左上,大小大一点,深度大一点,输入蒙板文字,复制粘贴,选择背景,将它变成白色.

还有另一种做法,将字的颜色变成暗红色,做纹理中的纹理化,然后按住Ctrl键点图层载入选区,轻移,做出立体效果,然后描一个白边.

14.电光字

设背景色为黑色字为白色,做滤镜中的风格化中的风,将四面都吹风,然后做扭曲中的波纹,将模式转为灰度,做风格化中的曝光过度,将模式转为索引,将颜色表的中灰度变为黑体,把模式转为RGB.

15.牵手字

输入数字(0 8 9)删格化,然后载入选区,做渐变.用选择工具选择数字Ctrl+x,Ctrl+v将数字分开层,然后选择其中的一个字的一部分,进行删除,使它们看起来有连在一起的感觉,然后加上连接符进行合并.做图层样式的斜面和浮雕.

16.双色字

输入黑色文字,放在中间,从标尺拖出辅助线,也在正中间,在背景上新建一层,用矩形画出选区,位置在左上角,再画出右下角,进行填充黑色,选择文字层做调整中的反相.

蒙板:分为文字蒙板,图层蒙板.快速蒙板工具.它们共同的特点是都是为了产生和修改选区的.

文字蒙板:它是单纯的利用文字的形状来产生选区的,点击文字工具后图像就会全部变成红色.如果现在提交的话,将没有选区产生,因为在蒙板文字里面红色就代表被保护的区域,选区就应该是红色以外的.蒙板文字的最终目标是产生选区不会产生文字图层.

图层蒙板:它是用来改变图层的隐藏和显视的.它是图层合成最常用的手段,使用它的好处是可以在不改变图层中图像的像素的情况下,实现多种混合图像的方案,并可权从中进行反复调整,蒙板里白色区域是显示当前图像的,黑色区域隐藏图像.而灰度则是对应的图像中半透明的效果.

快速蒙版:进入快速蒙板就是编辑和产生选区的,红色代表被保护的地方,选区是红色以外的地方.进入蒙板以后我们可以给选区做任何的滤镜效果.双击进入快速蒙板铵钮可以更改它的选项.

通道:它的作用是保存和修改选区和颜色的.

在通道里没有颜色,每一种颜色都有一种灰来表示,当然每一种灰也是一种透明度,纯白的是选区.纯黑不是.在通道里正常的文字也只能是产生选区的.在通道里,我们可以把选区当成一个图层来编辑可以给他做任何的滤镜效果.

路径:路径最大的功能就是能很好产生选区,因为路径可以变成选区,反之亦然.而路径又可以很方便的编辑.用路径产生的选区表面很平滑.

利用通道蒙版和路径做出来的效果:

圆锥体

新建图层,画一个矩形做渐变,自由变换透视把上面变小.存储选区,再画一个椭圆再存储.载入第一个选区后再载入第二个选择,从选区中减去.用矩形选择从选区中减去把上面减掉后,删除.再载入第二个选区后用调整中的色阶把颜色变暗.使它有立体的效果.

凹陷字:新建通道,输入字母,做模糊中的高斯模糊,然后做风格化中的查找边缘,回到背景,做渲染中的光照效果,选择通道1

撕纸字:新建通道,输入文字,复制当前通道,给复本做其它中的最大值,做画笔中的描边中的喷溅,在原通道重复滤镜,点击背景做纹理中的纹理化,载入第一个通道,做图层中的通过剪切的图层,再载入第二个通道,点击背景删除,给图层一做一个投影的效果.

雕刻字:

新建通道,输入文字,取消选区做模糊中的高期模糊,做曲线中的调整曲线,全选通道,复制到背景上粘贴.保存,做扭曲中的置换.再用色彩平衡来调整字的颜色.

用路径做出心形

新建图层,用钢笔工具画出心的大体形状,然后调整心的形状,将通过路径面板将路径变成选区,进行填充红色,自由变化,成比例缩小,定义画笔,点出工作路径,选择刚才定义的画笔,调整间距,描边路径,然后,给当前层做一些图层效果.

图片效果:

1.暴风雪

找开一幅适合做暴风雪的图片,复制背景,然后做象素中的点状化,数值为八,图象调整中的阈值,将黑白的比例平衡,做模糊中的动感模糊,将图层模式转化为滤色[屏幕].

2.立方体

新建文件,拖入三幅图片可以适当的将它们变小,再在背景上新建一层, 然后做滤镜的中3D效果,画出一个立方体,然后用轨迹球转出三个实面,将三幅图片用自由变换中的扭曲贴到三个面上,然后合并图层.

3.木质画框

打开一个图片,新建一个图层,全选,选择里的变换选区,成比例缩小,反选填充桔黄色,杂色中填加杂色,做模糊中的动感模糊,再做图层样式中的浮雕效果,加上等高线.

4.高尔夫球

新建图层,做白到黑的径向渐变从左上角到右下角,然后做滤镜中的扭曲中的玻璃中的小镜头,画一个正圆,做扭曲中的球面化,反选删除,可以把它变的小点,点击背景新建一图层,画椭圆填充黑色,模糊中的高期模糊,调不透明度,点击球的图层,给它做渲染中的镜头光晕,合并图层.

5.邮票

打开一幅图片,拖到一个新建的文件里面,产生一个图层,载入选区,新建一个图层,填充白色,倒换图层,自由变化往外拉,将选区变为路径,选择合适的画笔调整间距,描边路径,用魔棒工具选择黑色,删除,给当前层做投影.打上文字.

6.禁止吸烟

新建图层画正圆,填充红色,选择自由变化选区,变小,删除.新建图层,画矩形,做过滤嘴,做橙黄橙的渐变,添加杂色,数值小一些,变换选区,将选区拉长,做灰白灰的渐变,取消选区自由变换旋转,然后,移到适当的位置,再用套索工具画出烟燃烧的地方,填充黑色,填加杂色,数值大一点,然后再用红色画笔点一些火星,用直线工具,调整大小,将前景色变为红色,选择第三个单纯的填充,写上文字,用黑色的画笔点上烟雾.

7.手镯

新建图层,默认前景色和背景色,做渲染中的云彩,做液化中的涂抹,画正圆,删除,变化选区,变大删除,调整曲线加颜色,做图层样式中的浮雕效果,浮雕的暗调调到最小,等高线选择第四个,然后做投影.

8.羽毛

新建一个长方形的文档,填充黑色,新建一个图层,画一个矩形填充白色,旋转画布,做风格化中的大风,重复滤镜做模糊中的动感模糊,转回画布,将白色移到最下边,给它做编辑中的垂直翻转,然后做扭曲中的极坐标到平面坐标,用选框工具,把下边删除,复制当前层,垂直翻转,合并图层,自由变化,调整大小.也可以用透视.

9.海上日出

新建图层,做黄到红的径向渐变,从中心往外拉,再新建一个图层把前景色变成淡红色背景色变成白色,再做渲染中的云彩,扭曲中的玻璃,自由变换的透视将图像做出延伸的效果,再新建一个图层,画一正圆填充红色,做太阳进行高期模糊.再画一个椭圆进行羽化后做黄到红的径向渐变,做自由变化中的透视效果.将模式改为叠加.再到有云彩的图片中利用蒙板做出选区拖到图像中将模式改为线型减淡.再用画笔加一些鸟的形状.

10.放大镜

打开一副图片,画一个正圆复制粘贴,载入选区后做扭曲中的球面化,再新建一层进行描灰色边,再载放选区进行描黑色的边.再新新建一层画一个矩形做灰白灰的渐化,自由变化中的透视将一点向中间移,放到合适的位置上就可以了.

11.水晶球

默认的前背景色,在背景上做渲染中的云彩,再做扭曲中的极做标,选择平面做标到极作标,再做扭曲中的挤压,重复两次,画一正圆将它复制为一个图层.将背景色改为白色.通过曲线调整它的颜色.再做渲染中的镜头光晕,选择105毫米.数值为100,将位置放在三分之一的位置上.再做一次放在最下边.最后加上外发光就可以了,但是要注意外发光的模式为正常.否则会看不出它的效果.

12.水中倒影

新建图层,将前景色改为海水的淡蓝色,做渲染中的云彩,再做扭曲中的玻璃,用自由变换的透视做出海面由远到近的效果,移到中间,再新建一层,将前景色改为淡天蓝色做渲染云彩做天空. 将当前层放到最下边,输入文字后,栅格化,复制做变换中的垂直翻转.将副本的透明度小一点,做扭曲中的波纹.两个文字层加上连接符后自由变化中的透视,做出海面延伸的效果.

13统计饼图

新建图层.画一正圆,用第六种渐变从中心向外拉做第三种角度渐变.选择路径工具中的直线工具第三种一个单纯的填充,将大小改为2就可以了,进行切分,前景色为白色.切完后用魔棒工具选择其中一块白色选择相似然后删除.用多边形套索工具取下一块来,自由变换将它压扁.载入选区轻移做出立体效果.描白色的边.最后写上相关的数据就可以了.

14.沙漏

新建图层,画一个长方形,做黑白黑的渐变,做自由变换中的透视,画一个椭圆填充黑色再复制一个.用放大镜工具放最大,用矩形把它们断开的接上去.再做渐变,新建图层,画一个小一点的矩形填充黄色,进行添加杂色选择高斯分布\单色.数值大一点.用自由变换进行透视,再用选区工具把它们放在合适的位置上.图层的透明度小一点.再用涂抹工具进行涂抹,做出沙往下流的效果.

15.胶囊

背景色填充为黑色.新建图层,画一个小的正圆,做白到红的径向渐变,做轻移.用圆形选区从中间画分.用移动工具分开.复制一个,进行水平翻转放到合适的位置上.将它的透明度变小一点.全并图层,选其中一一个进行自由变化进行旋转.再新建一层用画笔点出小点来.

16.宇宙空间

暗蓝色的背景,进行填充.新建一层,默认的前背景色,画一个椭圆做渲染中的云彩,做扭曲中的旋转扭曲,数值调最大,羽化反选,删除,可以多删几次.自由变换进行压扁,旋转.再新建一层画一个正圆做白到黑的径向渐变,做扭曲中的玻璃将它的数值加大一点.用修补工具进行修补.画一个正圆放在中间羽化反选,将它剪切成一个单独的图层.放在最下边.新建图层.画一个正圆填充为白色,移动选区做羽化删除.用画笔点出一些白色的点来.新建一层,也可以用路径中的钢笔工具两点画一条线,选择合适的画笔变换颜色,进行画笔描边路径.自由变换透视.就可以了.

快捷键:

全选:Ctrl+A取消当前命令:Esc

反选:Shift+Ctrl+I 工具选项板:Enter

取消选择区:Ctrl+D 选项板调整:Shift+Tab

选择区域移动:方向键 打开文件:Ctrl+O

复制选择区域:Alt+方向键 关闭文件:Ctrl+W

恢复到上一步:Ctrl+Z 文件存盘:Ctrl+S

剪切选择区域:Ctrl+X 退出系统:Ctrl+Q

复制选择区域:Ctrl+C 获取帮助:F1

粘贴选择区域:Ctrl+V 剪切选择区:F2

填充为前景色:Alt+Delete 拷贝选择区:F3

填充为背景色:Ctrl+Delete 粘贴选择区:F4

调整色阶工具:Ctrl+L 显示或关闭画笔选项板:F5

调整色彩平衡:Ctrl+B 显示或关闭颜色选项板:F6

调节色调/饱和度:Ctrl+U 显示或关闭图层选项板:F7

自由变形:Ctrl+T 显示或关闭信息选项板:F8

增大笔头大小:“中括号” 显示或关闭动作选项板:F9

减小笔头大小:“中括号” 激活上一图层:Alt+“中括号”

选择最大笔头:Shift+“中括号” 激活下一图层:Alt+“中括号”

选择最小笔头:Shift+“中括号” 合并可见图层:Shift+Ctrl+E

重复使用滤镜:Ctrl+F 放大视窗:Ctrl+“+”

缩小视窗:Ctrl+“-”

OpenGL目录

概述

Open GL现状

高级功能

OpenGL编程入门

OpenGL与DirectX的区别

概述

OpenGL - 高性能图形算法行业标准

OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™ 帮助程序员实现在 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_pDCHGLRC 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=0i {

Q.x=P.x

Q.y=P.y

}

for(i=1i<m_Ni++)

{

R[m_N-i].x=Q[m_N-1].x

R[m_N-i].y=Q[m_N-1].y

for(j=m_N-1j>=ij--)

{

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=0i<m_Ni++)

{

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且硬件不支持时模拟,你要用大量代码分析硬件能力和采取不同策略