制作一个游戏,要买买药什么网游戏制作机器吗

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
绘画、动画、游戏、CG技术研究爱好者,非权威高手。博客文章自由共享,转载时请保持内容完整。
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
1.有时属于一类应急性的工程,也就不好去定什么风格细节,大致描绘下一个影子轮廓,参考下自己熟悉的游戏资料。2.为了达到最佳的资源利用,需要有一个模型面数上的限制,这里我就以2000三边面作为上限。
3.一开始不需要拘泥于面数限制,先尽可能的完善形体;当然,需要注意面数不能超过太多,要确保有机会在稍后的优化中精简面数。
4.因为只使用一张1024分辨率的贴图,如何分配并共用模型UV,就成为贴图精度的决定性因素。目标就是:将精度的贴图发挥出精度的效果。
5.AmbientOcclusion环境闭塞贴图是很实用的,通常最好想办法获取。由于有UV共用,因此将所有会发生UV重叠的面删除后再执行烘焙。 Maya中使用MentalRay渲染器来进行OCC贴图的烘焙,具体操作是:选择需要烘焙的模型组件,在Rendering模块下,Lighting/Shading-&BatchBake(mental ray),然后设置如下(如果该功能是灰色的,说明你还没启用mentalRay渲染器,需要进入Maya的插件管理面板中启用):
6.使用Photoshop进行贴图绘制。这里有几点比较实用的方案:(1)根据模型风格,收集纹理素材,将需要的素材都放置于一个文件夹中;
&(2)活用图层样式,绘制出凹凸感的细节;
&(3)借助外部纹理,进行不同的组合叠加(柔光,线性减淡,正片叠底是最常用的),创造出一个基本的纹理;(4)OCC贴图可以很好的帮我们区分贴图上的明暗区域,因此在最终使用图层混合模式前,可先利用OCC贴图来定位纹理细节;
(5)先绘制明暗,再通过图层叠加颜色,可以在后续绘制高光贴图和法线贴图时提供很便利的帮助。7.当细节完成差不多,将模型导入C4D(或者Bodypaint)中,赋予模型材质,贴图使用Photoshop绘制的纹理贴图。利用C4D的Bodypaint模块的映射绘制,将模型转折处的磨损纹理绘制出来;如果需要进行各种色彩搭配,此时也可以在Bodypaint中完成。我使用的是内置的笔刷,并调节一定的“抖动”效果。
同时,也可以利用Bodypaint中的克隆工具处理UV接缝的纹理过渡(幸运的是,磨损的边缘已经帮我们遮挡住了接缝)。8.将Bodypaint绘制的磨损贴图导入Photoshop中,进行局部的修正。最后,将OCC贴图设置“正片叠底”的图层混合模式,然后降低透明度为50%。至此,漫反射贴图绘制完毕。& &9.制作高光贴图。高光贴图也就是通过灰度来控制高光强弱的区域。因为前面已经认真的进行了漫反射贴图绘制,所以很容易分辨出高光强弱的地方:磨损的地方。步骤:(1)隐藏颜色图层或者使用“黑白”的调整图层,将漫反射贴图变为灰度图;(2)有些黑色的地方其实应该是具有高光反射的,因此我们要根据需要将这些地方的颜色进行调整。例如图中的灯罩,如果需要外壳也具有高光,那么就应该将黑色填为白色。
(3)使用“色阶”调节图层,调节灰度图的黑白对比,将高光区域的强弱更好的区别开。
10.制作法线贴图。这种机械类模型,如果按传统的高模+低模来生成法线贴图,效果不一定好,而且工序上浪费很多时间。漫反射贴图已经包含了一定的凹凸细节,因此我们只要将类似Bump贴图的灰度图转为Normal法线贴图即可。先生成灰度的Bump贴图:(1)去掉没有明显凹凸效果的纹理层和图层式样;(2)最底层的背景层,使用一个中间灰度色填充;(3)比背景色深的颜色表示凹陷,比背景色浅的颜色表示凸起;(4)保存贴图为BMP格式。&使用软件ShaderMap (类似的还有CrazyBump)将灰度Bump贴图转为彩色的法线贴图:特别提示,常用的免费法线贴图生成软件Xnormal,也有用于Photoshop的法线贴图生成插件。(1)将灰度图以高度贴图的形式导入软件中;&(2)预览凹凸效果;
(3)点击按钮生成法线贴图。
因为漫反射贴图中已经绘制了一定的OCC效果,因此这里我不需要生成OCC贴图。最终得到如下三张贴图:漫反射Diffuse,高光Specular,法线Normal。11.打开Maya,赋予模型一个phone材质,将漫反射,法线,高光贴图分别连接如下:12.法线贴图虽然是以Bump2D节点进行连接,但是还需要将节点的模式更改为TangentSpaceNormals(切线空间法线),才能让法线贴图生效。
13.使用高质量显示或者Maya2011新加入的Viewport2.0进行预览,可看到最终效果。14.由于使用的是默认灯光,因此模型看起来会有些暗,不过基本效果已经可以看出。
15.最后,要导入游戏引擎前,设定好模型比例。多数游戏是以现实单位计算模型高度的。===============================================【网盘下载模型源文件】链接:/s/1o7Uez94&密码:ag7u===============================================
阅读(3836)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_094067',
blogTitle:'【Game】游戏模型制作:战斗机器人',
blogAbstract:'1.有时属于一类应急性的工程,也就不好去定什么风格细节,大致描绘下一个影子轮廓,参考下自己熟悉的游戏资料。',
blogTag:'游戏,机器人,法线',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:6,
publishTime:1,
permalink:'blog/static/',
commentCount:10,
mainCommentCount:5,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'绘画、动画、游戏、CG技术研究爱好者,非权威高手。博客文章自由共享,转载时请保持内容完整。',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}推荐:等级3
等级:10.0(1个好评)
《机械塔防》是一款相当传统的塔防游戏,放置炮塔、升级、消灭怪物,然后顺利过关即可,虽然游戏亮点不多,但是仍然是一个打发时间的好游戏。
【游戏介绍】略简陋的俯视TD,三种塔,没有关于兵种的设定,也没有每波来袭的进度时间条。
【游戏配置】安装完毕直
推荐:等级3
等级:6.0(12个好评)
在荒废的城市小镇里,充满着阴森的气息,玩家们需要在此地展开一场调查,寻找出真相,解开机械灵魂的传说。
【游戏介绍】《汽车城:机械灵魂》是一款由Wellore Games制作,Alawar发行的冒险解谜类游戏。游戏和大多数冒险解谜游戏一样,就是用鼠标一通乱点。由于
推荐:等级3
等级:.0(0个好评)
【游戏介绍】
&&& 这是一款非常有意思的重力解谜游戏,玩家可以旋转六面体,控制女孩找到出去的门,静下心来玩一下这款游戏活动活动沉睡已久的脑袋吧。
&&& Vanessa是一位爱好谜题的奇怪小女孩。有一天,在探索父亲的古董店时
推荐:等级3
等级:10.0(0个好评)
非常血腥的一款横版射击游戏,选择你的主副武器,然后去消灭不断涌来的成堆敌人,地图上会有各种道具让玩家去收集。
【游戏介绍】一款血腥十足的横版射击游戏。
【游戏配置】无需担心配置。
【基本操作】移动:WASD换枪:E装弹:R攻击:鼠标左键
推荐:等级3
等级:10.0(1个好评)
游戏用一种独特的风格来给玩家展示了一款策略游戏,或许游戏的画面并不好,但是游戏的策略性十足,对于喜欢策略游戏的玩家来说是个不错的选择。
【游戏介绍】《机械战争》(Machines at War)是一款实时在线策略类游戏,其精致的画风,靓丽的操作都将令你惊喜不
推荐:等级3
等级:10.0(0个好评)
灵活的手臂让我们做起很多事情来都轻而易举,但是你是否想过如果你的手臂变成了一个机械手臂,那么你的生活会变成什么样呢?来这里尝试一下吧。
【游戏介绍】灵感来自于外科医生2013的一款新游戏,在一次摩托车事故中。你失去了手臂,于是要给你换上一只机械之手
推荐:等级6
等级:5.7(280个好评)
《机械迷城(Machinarium)》是由捷克独立开发小组AmanitaDesign设计制作的一款冒险游戏(AVG)。本游戏在2009年独立游戏节上获得了视觉艺术奖。游戏将采用传统点击式互动界面,玩法和AmanitaDesign之前制作的《银河历险记(Samorost)》相同,游戏采用2D背景和人物,没有文字对白,但《机械迷城》的游戏时间将更长更复杂,游戏画面全部由手工绘制。
推荐:等级3
等级:10.0(0个好评)
机械蜘蛛中你要做的事情不是去利用你的蜘蛛网往来抓捕昆虫,而是作为一个会发射激光的高科技机械蜘蛛,来帮助那些不幸被蛛网留下来的飞虫。
【游戏介绍】你操作一个蜘蛛形状的高科技机器人,四种激光武器可用,你要想方设法去帮助粘在蜘蛛网上的飞虫们逃脱
推荐:等级3
等级:10.0(1个好评)
真人过场动画加上令人感觉有点不舒服的蜘蛛怪物,都给这款游戏营造了许多惊悚气氛。个人对于蜘蛛这种多脚的生物在身上爬时,总是会感觉心里有太多的不舒服……
【游戏介绍】当你乘坐的火车停靠安德维欧时,黑寡妇已在此恭候多时,你被无情拖进一个谎言编织的网中
推荐:等级3
等级:5.0(1个好评)
《机械学者的崛起》这款解密游戏非常的有意思,虽然说可能我们现在对于化学早都已经几乎忘的一干二净了,但是这款游戏却会带你再次走进化学的世界,你会发现其实化学很简单,也很有趣。
游戏中需要玩家通过提供的工具在适当的位置摆放,然后将粒子转化为需要的需
推荐:等级3
等级:6.6(34个好评)
相信很多人还记得《机械迷城》这款游戏,作为一款AVG游戏中的黑马作品,机械迷城至今还存在在很多人的电脑中。《不机械城》的风格与它非常相似,虽然名为不机械,但是游戏却依然是机器人以及各种齿轮零件的机械城。游戏中将会有许多的谜题留给玩家去解开,充满
推荐:等级3
等级:5.0(1个好评)
一个被机器统治的世界里,你的步兵们必须克服困难拯救同伴,修复故障的发电机以保障能源供给。游戏特色:50+关卡;5种环境等
推荐:等级3
等级:.0(0个好评)
&【游戏简介】
&& 机械袭击画面简单,但是射击的效果做的还不错。摧毁的开关,进入下一关的门才会打开。
【配置要求】
一般电脑都能玩
推荐:等级3
等级:5.7(4个好评)
《机械之刃》是一款以机甲为主题的对战游戏,类似于日本的高达系列,独特的自由组合系统让游戏的娱乐性大大提升。
【游戏介绍】一款国产3d动作游戏,游戏最大的特色是玩家可以自由设计自己的机器人,组装自己独创的武器、设计攻击动作、绑定控制按键,并可以使用
推荐:等级3
等级:5.0(1个好评)
国产精心 打造的机器人大战,玩家们通过组装合成机器人,打造属于自己的风格,与敌人展开激烈决斗。【游戏介绍】一款国产3d动作游戏,游戏最大的特色是玩家可以自由设计自己的机器人,组装自己独创的武器、设计攻击动作、绑定控制按键,并可以使用自己的作品和
推荐:等级6
等级:6.8(559个好评)
《火炬之光2》是一部ARPG游戏,是《火炬之光》的续作游戏,由位于美国西雅图的RunicGames开发,游戏于日上市。《火炬之光2》有非常独特的艺术风格,这些在《火炬之光》中就已经形成,经过升级将使这款游戏适合的玩家群体更为广泛,玩家在游戏中可以单人游戏、多人局域网游戏和在线链接服务器游戏。该游戏开发组曾经领导了《暗黑破坏神》、《暗黑破坏神2》、《神话》等著名游戏。
推荐:等级6
等级:8.2(490个好评)
《火炬之光》是2009年RunicGames制作的一款暗黑风格ARPG,游戏不管是在装备上,界面上还是属性,技能上都于暗黑2有神似的地方,但是这不妨碍它成为一款受人欢迎的作品,冒险者将从火炬之光这个城镇出发,进入附近山区寻找能给他们的武器提供能量,但同时却也危及他们性命的魔法矿石。游戏利用简单直接的操作界面,力求呈现出一个充满迅速火爆的动作体验,以及绚烂动人的游戏世界。
推荐:等级5
等级:8.1(13个好评)
火炬之光2的所有imba技能已经全部推出,更加暴力的各个职业,让你感受到完全不一样的火炬之光。这次为大家提供的mod版中,整合了相当多的有趣mod。
【10月25日新增内容】
加入大背包mod以及额外的合成配方,具体请参照mod说明
大背包mod:http://www.962.
推荐:等级5
等级:5.0(3个好评)
这个mod版的火炬之光2中,加入了耐丸mod的最新v11版本,同时还有法师imba技能的mod,玩家安装完毕后直接运行即可。
耐丸mod的更新内容比较多,已经加入游戏中的说明文件,感兴趣的玩家可以慢慢看,下面至列出比较直观的几点:
附魔:现在普通附魔商人支持最多
推荐:等级5
等级:2.6(73个好评)
RunicGames制作的《火炬之光》在2009年大卖之后,2012年终于发行了其续作《火炬之光2》,在2中除了更加精致的画面,效果,更加庞大的地图,剧情,还新增了多人局域网游戏和在线链接服务器游戏。只要使用我们免费的角色匹配服务,可以轻易的召集在线玩家和新朋友,一同探险凶险的废墟、诅咒的洞穴和神秘的随机地城,旅程中充满了各种巨大的怪物和全新的敌人,强大的魔法战利品等着你们来收集,各式游戏任务也等着你们来挑战。
推荐:等级3
等级:4.7(19个好评)
在火炬之光2即将发售来临的时刻,诸多火炬之光的衍生版本再一次吸引了不少的玩家,这个创世纪的版本中,加入了很多中国风的地图以及武器装备,同时新设计的天赋也变的很给力。
游戏中的新地图帝王陵怪物等级为60级,而且难度相对来说比较大,需要玩家穿过竹林才
推荐:等级6
等级:8.0(521个好评)
火炬之光合体版,增添了众多新要素,增加十几个新职业,包括死亡骑士DK、盗贼、恶魔猎手、刺客信条中的主角以及暗黑血统中的主角,重置职业技能,还具有变声系统、武器镶嵌系统,玩法多样,可以说《火炬之光合体版》是目前最好玩的版本。火炬之光合体版,增添了众多新要素,增加十几个新职业,包括死亡骑士DK、盗贼、恶魔猎手、刺客信条中的主角以及暗黑血统中的主角,重置职业技能,还具有变声系统、武器镶嵌系统,玩法多样,可以说《火炬之光合体版》是目前最好玩的版本。
推荐:等级6
等级:5.0(227个好评)
《无主之地》为一款RPG风格合作FPS游戏,在《无主之地2》中的AI将会比一代有明显进步,敌人不再是一盘散沙。比如机器人会互相照顾,盗贼会爆发火拼;某些带有元素属性的生物(比如FireSkag)会对该元素免疫,而一群没有元素属性的Skag小崽子在一只FireSkag的激励下会变形为FireSkag幼崽,它们将完全继承来自FireSkag的元素属性。第二代游戏仍然扮演来自前作的自定义英雄,同时引入了名为“圣安德列斯风格”的升级系统。并且该作取消在线多人模式,支持合作模式。
推荐:等级6
等级:5.4(130个好评)
游戏将角色扮演与FPS游戏有机的结合到一起,给射击游戏赋予了更多元化的玩法,人物升级、技能树、情节驱动模式等等。游戏内置了65万3千种枪械,掉落的每一只枪都有随机属性,比如射速、装弹时间、弹匣容量等。任务类似MMO的驱动机制,4人联机合作攻关,打怪抢夺掉落战利品,武器随机属性、装备配件组合,人物技能升级等等,引用shacknews和GiantBomb的话本作就像是《暗黑破坏神》和《光环》的结合体。后使用快捷导航没有帐号?
查看: 7796|回复: 39
新人欢迎积分1 阅读权限40积分609精华0UID帖子金钱823 威望0
Lv.4, 积分 609, 距离下一级还需 391 积分
UID帖子威望0 多玩草0 草
SS之路的时候出了个游戏制作人,恰好又赶上送异界,就玩了个男机械,现在84级了,拿的是加10的游戏制作人,纵火套5件了,25魔攻附魔宝珠也打了,徽章没屯货暂时镶嵌的蓝色的。但是!!!我现在刷个格蓝迪勇士的深渊都要死不止一次!!!感觉还不如其他职业随便穿个假紫伤害高!!!这是为什么!!!
PS:男机械首饰附魔怎么选择,小78貌似不是火属性吧。
&呵呵,又是一个以为捡根武器就能逆天的。&
&看你小78的强化,目前不到13伤害无法超过同等级强化的火影&
&纵火5 ???你是来搞笑的对不对?我们不想笑想打你,你知道吗?&
&纵火9+金玉项链, 称号-CD.武器小78+10086...小机器人不吃黄白爆,吃武器高强和火属性强化&
&高达加毒蛇炮加刺钉加BBQ加滑铲 你跟我说会死好几次&
&典型拉不出翔来怪地球引力&
&特么你玩具5说个蛋,等9再来说&
&额 不是有伪装吗&
&不加12你永远是一只咸鱼&
新人欢迎积分0 阅读权限255积分11575精华2UID帖子金钱2912 威望1
UID帖子威望1 多玩草148 草
韩服机械要回炉重新弄技能了。。国服。。还要黑暗一段时间。。
&看你回了这么多次帖子中午认真会一次 不水了&
&这个版本的公鸡不行?&
新人欢迎积分1 阅读权限99积分44512精华0UID帖子金钱13154 威望10
Lv.10, 积分 44512, 距离下一级还需 10488 积分
UID帖子威望10 多玩草748 草
不太清楚,机器人吃属强吗?
:不吃属强?但是是火属性攻击是吧?&
&看技能说明不吃属强,看攻略他们又说不吃黄白爆&
新人欢迎积分1 阅读权限0积分12405精华0UID帖子金钱29781 威望0
头像被屏蔽
大湿一无所有
UID帖子威望0 多玩草722 草
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
新人欢迎积分1 阅读权限20积分31精华0UID帖子金钱46 威望0
头像被屏蔽
Lv.2, 积分 31, 距离下一级还需 19 积分
UID帖子威望0 多玩草0 草
提示: 该帖被管理员或版主或楼主屏蔽
新人欢迎积分1 阅读权限70积分5982精华0UID4385581帖子金钱11174 威望0
Lv.7, 积分 5982, 距离下一级还需 4018 积分
UID4385581帖子威望0 多玩草27 草
不是吧,我的公鸡如果不停止放炮台敌人都落不了地,你是怎么死的?
新人欢迎积分1 阅读权限80积分14291精华0UID261255帖子金钱13856 威望3
Lv.8, 积分 14291, 距离下一级还需 5709 积分
UID261255帖子威望3 多玩草79 草
跟机械组队会烧显卡
我是火焰化身
新人欢迎积分1 阅读权限80积分13907精华0UID帖子金钱9308 威望6
Lv.8, 积分 13907, 距离下一级还需 6093 积分
UID帖子威望6 多玩草56 草
机械师深渊你是怎么死的?
星星之火可以燎原,而你即将引火上身
新人欢迎积分0 阅读权限50积分1363精华0UID帖子金钱1816 威望0
Lv.5, 积分 1363, 距离下一级还需 1137 积分
UID帖子威望0 多玩草0 草
还行吧,我的纵火9轻松格兰迪王者,啥都没弄。
权限犭句真恶心
新人欢迎积分0 阅读权限1积分14616精华0UID帖子金钱30985 威望1
头像被屏蔽
UID帖子威望1 多玩草748 草
五件你也好意思说
签名被屏蔽
新人欢迎积分1 阅读权限255积分31380精华1UID帖子金钱60686 威望1
欲戴其冠 必受其重
UID帖子威望1 多玩草228 草
这就是操作问题了
新人欢迎积分1 阅读权限60积分3762精华0UID帖子金钱5538 威望0
Lv.6, 积分 3762, 距离下一级还需 1238 积分
UID帖子威望0 多玩草60 草
你是怎么死的,我全身路边捡的异界装备,11小78没附魔,没振幅都不至于死啊
新人欢迎积分0 阅读权限60积分3605精华0UID帖子金钱7750 威望0
Lv.6, 积分 3605, 距离下一级还需 1395 积分
UID帖子威望0 多玩草0 草
小号机械纵火9和+10的小78,没什么一般的FM,白图反正无比流畅,都是秒过图,不过机械太容易被制裁。。。
新人欢迎积分1 阅读权限50积分1064精华0UID帖子金钱16443 威望0
Lv.5, 积分 1064, 距离下一级还需 1436 积分
UID帖子威望0 多玩草0 草
手残怪XX系列,你就让机械助手放机器人你到处跑都不会死,还有秒不了怪就是没伤害系列。。。。。
新人欢迎积分0 阅读权限50积分1283精华0UID帖子金钱1008 威望0
Lv.5, 积分 1283, 距离下一级还需 1217 积分
UID帖子威望0 多玩草0 草
→_→讲道理&&我穿着假紫&&也就首饰70圣物&&配个传承打格蓝迪勇士也没死啊
剑灵少先队
你拿到了剑灵国服的第一滴血!
DNF功勋勋章
DNF功勋勋章
猴年新春勋章
猴年大吉,猴年行大运!
DNF手机盒子勋章
APP签到每日有好礼,每日登陆送勋章。
365天!天天有你
连续签到1年即可获得
手机论坛勋章
APP发帖双倍积分,登陆即送勋章!
我是一只羊咩咩
剑三功勋勋章
剑三功勋勋章
双子座勋章
双子座勋章
马年新春勋章
手机APP马年迎春,马上有钱!
一路有你,感恩相伴
你是猴子请来的逗比么
需要金钱:1100
手机盒子客户端点击或扫描下载
Powered byOpenGL(3)
OpenlGL游戏编程-简单的机器人制作(三)
!注意本教程是基于java的,我会在这里从创建java项目一步一步的写。(java版本为java8)
上节课,我们之前学习了如何去创建一个窗口,如何让一个机器人显示在屏幕上,那么这节课,我们将学习如何让机器人自己动起来,实现走路的效果,完成一个简单的
首先,将上节课的GameRobot类打开,修改如下,我会将修改处加上注释:
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoD
public class GameRobot{
float legAngle[];
float armAngle[];
boolean leg1 = true;
boolean leg2 = false;
boolean arm1 = false;
boolean arm2 = true;
public GameRobot(GLAutoDrawable glad) {
this.glad =
gl = glad.getGL().getGL2();
legAngle = new float[2];
armAngle = new float[2];
private void drawHead(float xPos, float yPos, float zPos) {
gl.glPushMatrix();
gl.glColor3f(1f, 1f, 1f);
gl.glTranslated(xPos, yPos, zPos);
gl.glScaled(2f, 2f, 2f);
drawCube(0f, 0f, 0f);
gl.glPopMatrix();
private void drawBody(float xPos, float yPos, float zPos) {
gl.glPushMatrix();
gl.glColor3f(0f, 1f, 0f);
gl.glTranslated(xPos, yPos, zPos);
gl.glScaled(3f, 5f, 2f);
drawCube(0f, 0f, 0f);
gl.glPopMatrix();
private void drawLeg(float xPos, float yPos, float zPos) {
gl.glPushMatrix();
gl.glColor3f(1f, 1f, 0f);
gl.glTranslated(xPos, yPos, zPos);
gl.glScaled(1f, 5f, 1f);
drawCube(0f, 0f, 0f);
gl.glPopMatrix();
private void drawArm(float xPos, float yPos, float zPos) {
gl.glPushMatrix();
gl.glColor3f(1f, 0f, 0f);
gl.glTranslated(xPos, yPos, zPos);
gl.glScaled(1f, 4f, 1f);
drawCube(0f, 0f, 0f);
gl.glPopMatrix();
private void drawEar(float xPos, float yPos, float zPos) {
gl.glPushMatrix();
gl.glColor3f(0.5f, 0.5f, 0.5f);
gl.glTranslated(xPos, yPos, zPos);
gl.glScaled(0.25f, 0.25f, 0.25f);
drawCube(0f, 0f, 0f);
gl.glPopMatrix();
private void drawMouth(float xPos, float yPos, float zPos) {
gl.glPushMatrix();
gl.glColor3f(1f, 0f, 1f);
gl.glTranslated(xPos, yPos, zPos);
gl.glScaled(0.75f, 0.25f, 0.25f);
drawCube(0f, 0f, 0f);
gl.glPopMatrix();
private void drawCube(float xPos, float yPos, float zPos) {
gl.glPushMatrix();
gl.glTranslated(xPos, yPos, zPos);
gl.glBegin(GL2.GL_QUADS);
gl.glVertex3f(0f, 0f, -1f);
gl.glVertex3f(0f, 0f, 0f);
gl.glVertex3f(1f, 0f, 0f);
gl.glVertex3f(1f, 0f, -1f);
gl.glVertex3f(0f, -1f, -1f);
gl.glVertex3f(0f, -1f, 0f);
gl.glVertex3f(1f, -1f, 0f);
gl.glVertex3f(1f, -1f, -1f);
gl.glVertex3f(0f, 0f, 0f);
gl.glVertex3f(0f, -1f, 0f);
gl.glVertex3f(1f, -1f, 0f);
gl.glVertex3f(1f, 0f, 0f);
gl.glVertex3f(0f, 0f, -1f);
gl.glVertex3f(0f, -1f, -1f);
gl.glVertex3f(1f, -1f, -1f);
gl.glVertex3f(1f, 0f, -1f);
gl.glVertex3f(0f, 0f, -1);
gl.glVertex3f(0f, 0f, 0f);
gl.glVertex3f(0f, -1f, 0f);
gl.glVertex3f(0f, -1f, -1f);
gl.glVertex3f(1f, 0f, -1);
gl.glVertex3f(1f, 0f, 0f);
gl.glVertex3f(1f, -1f, 0f);
gl.glVertex3f(1f, -1f, -1f);
gl.glEnd();
gl.glPopMatrix();
public void drawRobet(float xPos, float yPos, float zPos) {
gl.glPushMatrix();
gl.glTranslated(xPos, yPos, zPos);
drawHead(2f, 2f, 0f);
drawBody(1.5f, 0f, 0f);
drawMouth(2.625f,0.35f,0.25f);
drawEar(1.75f,1.0f,-0.825f);
drawEar(3.75f,1.0f,-0.825f);
gl.glPushMatrix();
if (arm1) {
armAngle[0] += 0.5f;
armAngle[0] -= 0.5f;
if (armAngle[0] &= 15.0f) {
arm1 = false;
if (armAngle[0] &= -15.0f) {
arm1 = true;
gl.glTranslated(0f, -0.5f, 0f);
gl.glRotatef(armAngle[0], 1f, 0f, 0f);
drawArm(4.5f, 0f, -0.5f);
gl.glPopMatrix();
gl.glPushMatrix();
if (arm2) {
armAngle[1] += 0.5f;
armAngle[1] -= 0.5f;
if (armAngle[1] &= 15.0f) {
arm2 = false;
if (armAngle[1] &= -15.0f) {
arm2 = true;
gl.glTranslated(0f, -0.5f, 0f);
gl.glRotatef(armAngle[1], 1f, 0f, 0f);
drawArm(0.5f, 0f, -0.5f);
gl.glPopMatrix();
gl.glPushMatrix();
if (leg1) {
legAngle[0] += 0.5f;
legAngle[0] -= 0.5f;
if (legAngle[0] &= 15.0f) {
leg1 = false;
if (legAngle[0] &= -15.0f) {
leg1 = true;
gl.glTranslated(0f, -0.5f, 0f);
gl.glRotatef(legAngle[0], 1f, 0f, 0f);
drawLeg(4.5f, -4.5f, -0.5f);
gl.glPopMatrix();
gl.glPushMatrix();
if (leg2) {
legAngle[1] += 0.5f;
legAngle[1] -= 0.5f;
if (legAngle[1] &= 15.0f) {
leg2 = false;
if (legAngle[1] &= -15.0f) {
leg2 = true;
gl.glTranslated(0f, -0.5f, 0f);
gl.glRotatef(legAngle[1], 1f, 0f, 0f);
drawLeg(0.5f, -4.5f, -0.5f);
gl.glPopMatrix();
gl.glPopMatrix();
原理就是用二个布尔类型,还判断前后摆动,用4个浮点型数来控制摆动幅度,在这里非常体现了坐标系调理清晰的重要性,这点,当你自己写的时候就深有体会了,当然你要是想象力逆天我也没有办法-_-!
还记得上节课的GameGLEventListener类么,我们要让他动起来,就需要时刻刷新页面,首先,我们要先将其修改成如下:
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoD
import com.jogamp.opengl.GLEventL
import com.jogamp.opengl.glu.GLU;
import com.jogamp.opengl.util.FPSA
public class GameGLEventListener implements GLEventListener {
GLU glu = new GLU();
boolean flag = true;
float high = 45f;
public void init(GLAutoDrawable glad) {
robot = new GameRobot(glad);
GL2 gl = glad.getGL().getGL2();
gl.glShadeModel(GL2.GL_SMOOTH);
gl.glClearDepth(1.0f);
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glDepthFunc(GL2.GL_LEQUAL);
gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);
public void dispose(GLAutoDrawable glad) {
public void display(GLAutoDrawable glad) {
GL2 gl = glad.getGL().getGL2();
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(high, h, 0.1f, 100f);
glu.gluLookAt(10f,10f, 10f, 0f, 0f, 0f, 0f, 1f, 0f);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glClearColor(0f, 0f, 0f, 1f);
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glPushMatrix();
gl.glTranslated(0f, 0f, -30f);
gl.glRotatef(0f, 0f, 1f, 0f);
robot.drawRobet(0f, 0f, 0f);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glTranslated(0f, 0f, -30f);
gl.glRotatef(180f, 0f, 1f, 0f);
robot.drawRobet(0f, 0f, 0f);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glTranslated(-8f, 0f, -30f);
gl.glRotatef(90f, 0f, 1f, 0f);
robot.drawRobet(0f, 0f, 0f);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glTranslated(8f, 0f, -30f);
gl.glRotatef(270f, 0f, 1f, 0f);
robot.drawRobet(0f, 0f, 0f);
gl.glPopMatrix();
gl.glFlush();
if (flag) {
high += 1f;
if (high &= 180) {
flag = false;
high = 180;
high -= 1f;
if (high &= 1) {
flag = true;
public void reshape(GLAutoDrawable glad, int x, int y, int width, int height) {
GL2 gl = glad.getGL().getGL2();
if (height &= 0) {
height = 1;
h = (float) width / (float)
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(high, h, 0.1f, 100f);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
修改的地方已经表明出来了,
glu.gluPerspective(high, h, 0.1f, 100f)这个函数用来投影变换的,具体的我之后会讲解
glu.gluLookAt(10f,10f, 10f, 0f, 0f, 0f, 0f, 1f, 0f)这个函数用来视口变换的,具体的我之后会讲解
其他类不变
执行成功后效果如下:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:76303次
积分:4974
积分:4974
排名:第5995名
原创:441篇
评论:23条
(加时请注明CSDN)
(5)(1)(20)(25)(22)(91)(160)(96)(18)(2)(5)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 买我网 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信