【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟
本系列文章由zhmxy555(毛星云)编写,转载请注明出处。
http://blog.csdn.net/zhmxy555/article/details/7555785
作者:毛星云 邮箱: happylifemxy@qq.com 期待着与志同道合的朋友们相互交流
本节内容主要介绍摩擦力系统的模拟,顺带着介绍了暴雪的神级作品《暗黑破坏神3》。
一.基础知识讲解
摩擦力是两个表面接触的物体相互运动时互相施加的一种物理力。广义地物体在液体和气体中运动时也受到摩擦力。摩擦力可谓无处不在,为了模拟出与现实生活相符的游戏场景,游戏或者游戏引擎中,用相关代码实现摩擦力的真实效果是十分必要的。
任何一款完善的物理引擎,都有模拟摩擦力系统的相关代码。如大名鼎鼎的havok物理引擎(暗黑破坏神3所采用的物理引擎),也如最近在移动平台上很热门的Box2d物理引擎。
上一节范例中并没有考虑小鸟下坠与弹跳时的摩擦力影响效果,这节笔记里面我们将其考虑其中,加入了使小鸟运动速度减慢的负向加速度,但忽略小鸟与空气之间的阻力。下面看看如何实现这样一个比较符合真实状况的小鸟下落与弹跳效果:
int x=0,y=100,vx=10,vy=0;//初始横坐标x=0,初始纵坐标y=100,初始水平方向速度vx=10,初始竖直方向速度vy=0) int gy=2,fx=-1,fy=-4; //重力加速度gy=2,x方向摩擦力为-1,f方向摩擦力为-4 x += vx; //计算X轴方向贴图坐标,每调用一次MyPiant(),x坐标就加上一个vx的当前值 vy = vy + gy; //计算Y轴方向速度分量,vy随着每一次MyPiant()函数的调用就加上一个gy(重力加速度) y += vy; //计算Y轴方向贴图坐标,每调用一次MyPiant(),y坐标就加上一个刚改变过后的vy,相当于加速运动 if(y >= rect.bottom-70) //判断是否触地,如果触碰到窗口边界,进行调整 { y = rect.bottom - 70; //X轴方向的摩擦力处理 vx += fx; // vx=fx+vx;这里fx为负值,所以每调用一次MyPiant(),vx恒定减小一个fx if(vx < 0) //当vx值递减到小于0时,就将其设为0,即小球在X方向不再移动。 vx = 0; //Y轴方向摩擦力处理 vy += fy; //vy=fy+vy;这里fy同样为负值,所以每调用一次MyPiant(),vy恒定减小一个fy if(vy < 0) //若速度减到小于等于0,置为零,即小球在Y方向不再移动。 vy = 0; vy = -vy;
这段代码里面小鸟由高出下落触及地面进行反弹,且存在落地时的摩擦力,使得小鸟在落地弹跳后速度减慢,最后呈现静止的状态,停在窗口边缘。
二.神级游戏作品《暗黑破坏神Ⅲ》的介绍
既然已经提到了这款革命性的作品,我们就来介绍一下,即将在2012年5月15日全球上市的神级作品——《暗黑破坏神Ⅲ》
(DIABLO Ⅲ)(浅墨习惯称作大菠萝3,呵呵)。
当然《暗黑破坏神Ⅲ》是由我们无所不能的C++来开发的~
浅墨在这里不打算花大篇幅介绍,就简明扼要地提一下吧。
先贴一张暗黑破坏神Ⅲ的封面美图:
暗黑Ⅲ用C++编程语言开发(C++由于其执行的高效性,一直是中大型游戏开发的统治性编程语言),采用暴雪自家定制的
3D图形引擎,物理引擎采用Havok,于PC和Mac两个平台发售,并暂时不会登陆XBOX 360及PlayStation等家用机平台。
《暗黑破坏神3》对于DirectX 11进行了特殊的优化和加速,官方推荐使用Windows Vista或者Windows 7来进行游戏以便获
得更好的体验效果。
正所谓“暴雪出品,必属精品”,昨天浅墨偶尔看了下暗黑3五种职业的技能介绍视频,看完后热血沸腾,暴雪真的是没有辜
负广大暗黑粉丝这么多年的等待,用心做出了这么一款任何溢美之词都无法形容其精美的天赐之作。
暗黑Ⅲ有诸多新的亮点,让暗黑系列的动作角色扮演游戏体验达到一个新的高度,浅墨在这里列一些出来:
★五种强大的职业可供选择,包括野蛮人、巫医、法师、武僧以及恶魔猎手
★全新3D图像引擎将带来无与伦比的视觉效果,Havok物理引擎技术
★ Sanctuary世界变幻莫测的室内外场景
★极具互动性的游戏环境,危险的陷阱与障碍,可被破坏的元素
★随机产生的事件与场景,带来无止境的动态游戏体验
★种类繁多的具有独特***方式和习性的恶魔与怪物
★全新任务系统加上角色定制选项,带来终极动作RPG体验
★可通过BN进行多人联网合作或对战
这张图是其中四种职业的合照(原本五职业),目测少了“恶魔猎手”这一帅气的职业:
更多内容去请大家前去http://d3.uuu9.com/欣赏,浅墨在这里就不赘言了。
3.详细注释的源代码欣赏
好了回到我们的主题摩擦力吧,为了演示的方便直观,我们选择将笔记二十源码的一些内容进行更改,在其基础上模拟实现出摩擦力系统的效果。
依旧是国际惯例,贴出详细注释的源代码:
#include "stdafx.h" #include <stdio.h> //全局变量 HINSTANCE hInst; HBITMAP bg,angrybird; HDC hdc,mdc,bufdc; HWND hWnd; DWORD tPre,tNow,tCheck; RECT rect; int x=0,y=100,vx=10,vy=0;//初始横坐标x=0,初始纵坐标y=100,初始水平方向速度vx=10,初始竖直方向速度vy=0) int gy=2,fx=-1,fy=-4; //重力加速度gy=2,x方向摩擦力为-1,f方向摩擦力为-4 //全局函数
转载于:https://blog.51cto.com/8241237/1348012
【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟相关推荐
- 【Visual C++】游戏开发笔记二十一 游戏基础物理建模 三 摩擦力系统模拟
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 【Visual C++】游戏开发笔记二十三 游戏基础物理建模 五 粒子系统模拟 二
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 【Visual C++】游戏开发笔记二十 游戏基础物理建模(二) 重力系统的模拟
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7496200 作者:毛星云 邮箱: h ...
- 【Visual C++】游戏开发笔记二十三 游戏基础物理建模(五) 粒子系统模拟(二)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7607916 作者:毛星云 邮箱: h ...
- 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云 邮箱: happylifemxy@163.com 期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...
- 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7707628 作者:毛星云 邮箱: happ ...
- 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8523341 作者:毛星云(浅墨 ...
- 【Visual C++】游戏开发笔记二十五 最简化的DirectX开发环境的配置
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7672101 作者:毛星云 邮箱: h ...
- 【Visual C++】游戏开发笔记二十五 最简化的DirectX 11开发环境的配置
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7672101 作者:毛星云 邮箱: happ ...
最新文章
- asp.net中jQuery $post用法
- b是python文件二进制打开_如何在Python中打开和显示原始二进制数据?
- 树莓派3B用Ubuntu MATE安装ros
- oracle存储过程 学习笔记
- 使用Spring AOP中MethodInterceptor记录日志
- SAP CRM WebClient UI F2页面里from pre-processing table标签位的含义
- 深度学习之基于卷积神经网络(VGG16CNN)实现海贼王人物识别
- 静态变量读取属性文件_一种通过变量插值读取属性的方法
- 内存参数 计算_Spark统一内存管理的实现
- 【数据库实验课堂】实验二 使用SQL Server管理数据表
- 设计师网站导航的好处
- 港铁将更换信号系统 或影响日间列车服务冀乘客谅解
- deeplearning.ai——构建循环神经网络
- ZXing条码扫描----竖屏解决方案
- Ubuntu16.0微信安装
- Masking GAN
- 一个游戏建模师一天的工作都在做什么?
- php 多核cpu,paip.提升性能--多核cpu中的java/.net/php/c++编程
- Android Gradle进阶配置指南 1
- SLAM/VIO/VINS AR/VR
热门文章
- 【AutoML】当前有哪些可用的AutoML平台?
- 【干货·课程】言有三的深度学习从入门到上线课程
- 全球及中国煤层气开发产业运营规模与十四五战略决策建议报告2022版
- 全球及中国铝拉丝润滑剂行业竞争格局及运营前景研究报告2021-2027年
- 新概念英语(1-61)A bad cold
- WCF创建到使用到发布
- POJ 3279(Fliptile)题解
- delphi编译缺少组件 imgedit excel2000等
- 常用正则表达式总结(js与C#对照) 。
- hibernate 高级查询 query 或查询 or ,Restrictions