Zh/VPhysics: Difference between revisions
< Zh
		
		
		
		Jump to navigation
		Jump to search
		 (Created page with "{{LanguageBar|VPhysics|title=VPhysics(物理引擎系统)}} {{Source topicon}}  '''VPhysics'''是{{L|Source}}引擎内置的3D物理模拟系统,通过模拟{{wiki|Mass|质量}}、{{wiki|Gravitation|重力}}、{{wiki|Friction|摩擦力}}、{{wiki|Drag (physics)|空气阻力}}、{{wiki|Inertia|惯性}}和{{wiki|Buoyancy|浮力}}等物理特性,使物体运动碰撞更真实。  该引擎基于Ipion Virtual Physics技术开发,现由{{wiki|Havok}}维护(后被微...")  | 
				mNo edit summary  | 
				||
| Line 4: | Line 4: | ||
'''VPhysics'''是{{L|Source}}引擎内置的3D物理模拟系统,通过模拟{{wiki|Mass|质量}}、{{wiki|Gravitation|重力}}、{{wiki|Friction|摩擦力}}、{{wiki|Drag (physics)|空气阻力}}、{{wiki|Inertia|惯性}}和{{wiki|Buoyancy|浮力}}等物理特性,使物体运动碰撞更真实。  | '''VPhysics'''是{{L|Source}}引擎内置的3D物理模拟系统,通过模拟{{wiki|Mass|质量}}、{{wiki|Gravitation|重力}}、{{wiki|Friction|摩擦力}}、{{wiki|Drag (physics)|空气阻力}}、{{wiki|Inertia|惯性}}和{{wiki|Buoyancy|浮力}}等物理特性,使物体运动碰撞更真实。  | ||
该引擎基于Ipion Virtual Physics技术开发,现由{{wiki|Havok}}维护(后被微软收购)。在{{  | 该引擎基于Ipion Virtual Physics技术开发,现由{{wiki|Havok}}维护(后被微软收购)。在{{Source 2|4}}引擎中其继承者为{{L|Rubikon}}。  | ||
== 碰撞模型 ==  | == 碰撞模型 ==  | ||
Revision as of 08:17, 27 June 2025
VPhysics是Source引擎内置的3D物理模拟系统,通过模拟
 质量、
 重力、
 摩擦力、
 空气阻力、
 惯性和
 浮力等物理特性,使物体运动碰撞更真实。
该引擎基于Ipion Virtual Physics技术开发,现由
 Havok维护(后被微软收购)。在
 起源2引擎中其继承者为Rubikon。
碰撞模型
Dr. Breen的关节碰撞网格
VPhysics碰撞模型不可见,因为物理模拟需要保持高效性。虽然实体可见部分会匹配碰撞模型形状,但模拟器完全忽略可见网格。
碰撞模型通常从模型文件内嵌的碰撞网格加载,也可通过包围盒等自动生成。球形碰撞模型也是可行的。
vcollide_wireframe 1可显示碰撞网格QPhysics
VPhysics与QPhysics(代码中称为"game physics")共存,后者是继承自Quake II的简易物理系统。玩家和行走NPC仍使用QPhysics,因为VPhysics的复杂性会超出AI处理能力。但载具和飞行单位使用VPhysics,func_rotating等移动笔刷实体也使用QPhysics。
QPhysics实体会生成VPhysics"影子"进行有限交互:可推动物理对象或作为约束锚点,但不受反向影响。某些笔刷实体会被物理对象临时阻挡。
笔刷实体使用轴向/平面brushside碰撞,点实体使用bounding box或hitbox。旋转QPhysics碰撞会导致异常,如影响滑翔玩法。
编程实现
VPhysics通过引擎库直接控制实体运动。激活时QPhysics定位函数失效,需通过力和[[Zh/
- Category:Constraints|约束]]控制系统行为(仍支持直接修改)。
 
以下生成函数创建物理模拟模型: ```cpp
- define MODEL "models/props_c17/FurnitureDresser001a.mdl"
 
void CMyEnt::Spawn() {
PrecacheModel(MODEL); SetModel(MODEL); VPhysicsInitNormal(SOLID_VPHYSICS,0,false);
}
初始化函数说明:
VPhysicsInitNormal- 前文示例所用函数。创建可自由运动的完整物理对象,支持全物理模拟和碰撞。
 VPhysicsInitStatic()- 创建静态碰撞体(永不移动)。
 VPhysicsInitShadow( bool allowPhysicsMovement, bool allowPhysicsRotation, solid_t *pSolid = 0 )- 创建与其他VPhysics对象碰撞的"影子对象",其位置由实体的QPhysics运动定义。注意:可能对普通物理对象产生强力作用,需谨慎使用!
 
VPhysicsInitNormal()不同,上述函数不会隐式调用SetSolid()。需手动设置,否则默认SOLID_NONE将导致初始化提前终止。SetSolid()无法启用VPhysics碰撞。计量单位
| 单位 | | |||||||
|---|---|---|---|---|---|---|---|
| 英寸 | | 千克 | | 立方英寸 | | 英寸/秒 | | 英寸/秒² | | 千克/立方米 | | 英寸·千克/秒² | | 度·千克/秒²        |
核心结构
 相关条目重要物理实体
 
  |