Publication Date: December 22, 2004 Written by an expert in the game industry, Christer Ericson's new book is a comprehensive guide to the components of efficient real-time collision detection systems. The book provides the tools and know-how needed to implement industrial-strength collision detection for the highly detailed dynamic environments of applications such as 3D games, virtual reality applications, and physical simulators. Of the many topics covered, a key focus is on spatial and object partitioning through a wide variety of grids, trees, and sorting methods. The author also presents a large collection of intersection and distance tests for both simple and complex geometric shapes. Sections on vector and matrix algebra provide the background for advanced topics such as Voronoi regions, Minkowski sums, and linear and quadratic programming. Of utmost importance to programmers but rarely discussed in this much detail in other books are the chapters covering numerical and geometric robustness, both essential topics for collision detection systems. Also unique are the chapters discussing how graphics hardware can assist in collision detection computations and on advanced optimization for modern computer architectures. All in all, this comprehensive book will become the industry standard for years to come. 实时碰撞检测是一门在游戏和模拟领域中至关重要的技术,用于检测和处理虚拟环境中的对象间相互作用。它保证了在高度复杂的动态环境中,如3D游戏、虚拟现实应用和物理模拟器等,可以准确、实时地检测到碰撞事件,从而提高了交互式应用程序的真实性和响应速度。 《Real-Time Collision Detection》这本书由游戏行业的专家Christer Ericson撰写,是一本全面指导高效实时碰撞检测系统组件的综合指南。书中不仅详细讲解了各种基础算法,还涵盖了关键的实现问题,包括几何和数值的鲁棒性,以及算法的缓存效率实现。这些内容对于程序员来说至关重要,但其他书籍很少会如此深入地讨论。 书中还探讨了空间和物体分割方法,这是构建高效碰撞检测系统的核心技术之一。Ericson提出了一系列的网格、树状结构和排序方法,这些方法可以帮助系统高效地管理和处理复杂的3D场景。通过这些结构,可以快速判断哪些对象可能相互作用,从而减少了不必要的碰撞检测计算。 此外,书中还介绍了一系列针对简单和复杂几何形状的交集和距离测试的集合,为处理碰撞检测中的几何问题提供了基础。为了实现这些测试,作者还提供了向量和矩阵代数的相关章节,作为线性规划、二次规划以及Voronoi区域和Minkowski和等高级主题的数学基础。 对于现代图形硬件如何协助碰撞检测计算的章节,本书提供了一个独特的视角。随着图形处理器(GPU)的性能日益增强,它们已经开始承担一些传统由CPU处理的计算任务。Ericson详细介绍了图形硬件加速碰撞检测的可能性,以及如何利用现代计算机架构进行高级优化。 《Real-Time Collision Detection》不仅为读者提供了丰富的算法和数据结构,还通过C++代码示例,给出了如何实现这些碰撞检测技术的具体指导。这些示例不仅限于游戏编程,还适用于更广泛的上下文,如物理模拟等。 该书的实用性和易读性得到了行业内众多专家的推荐,比如NVIDIA的高级软件开发者Matt Pharr、Valve的资深工程师Jay Stelly以及马里兰大学计算机科学教授Hanan Samet等。他们认为这本书是开发具有复杂环境的交互式应用程序者的“必备”参考书籍,它不仅涵盖了所有已知的碰撞检测方法,而且作者通过精确的数学描述、富有洞察力的图解和实用的代码,为图形程序员提供了一个难以在书架上长期保有的资源。Naughty Dog的资深程序员Eric Lengyel也对此书给予了高度评价,他指出,即便是那些认为自己对碰撞检测了如指掌的人,也会在这本书中发现惊喜,因为它不仅覆盖了迄今为止所有已知的碰撞检测技术,还通过简洁的数学、富有洞见的图形和实用的代码呈现这些技术,使之成为每个严肃的引擎程序员都应该拥有的宝贵资源。 总而言之,Christer Ericson的《Real-Time Collision Detection》提供了一个全面的、面向未来的碰撞检测技术库,它结合了理论和实践,并且对希望在图形和游戏开发领域取得成功的专业人士来说,这本书是不可或缺的参考资料。随着计算机图形学和交互式娱乐技术的不断发展,本书无疑会成为行业标准,并在未来数年内对碰撞检测技术的发展产生深远影响。
2026-03-30 19:50:20 14.08MB realtime collision detection
1
卫星计算 需要搅拌机!!! 所需的包 py pylab(matplotlib) urllib 数学 麻木 跑步 blender startup.blend --python main2.py 如果您不想启动Blender,而只想获取原始数据(控制台+ matplotlib),请像这样启动: blender startup.blend --python main2.py --background 代码: 从特定类别下载数据: TLE.download(category) example: TLE.download("iridium") 获取类别中的卫星数: TLE.numOfSat(category) example: TLE.numOfSat("noaa") 列印特定的TLE: TLE.printTLE(category, satNr) example: 从以下类
2023-01-15 12:18:02 4.85MB cpp blender satellite collision-detection
1
Java碰撞检测和物理引擎 100%Java 2D碰撞检测和物理引擎。 设计快速,稳定,可扩展且易于使用。 dyn4j可免费用于商业和非商业应用。 该项目由主要项目和此处管理的测试以及另外两个项目组成: 集合,以帮助入门 一个非平凡的桌面应用程序,允许用户构建场景,运行,保存和加载场景-所有这些都是以dyn4j作为模拟引擎构建的。 要求 Java 1.6以上 入门 dyn4j具有许多功能和可扩展性,但是入门很容易。 如果您想快速入门,请观看以下视频。 步骤1:将dyn4j添加到您的项目 通过从或GitHub软件包中添加Maven依赖项,将dyn4j添加到您的类路径中 < dependency> < groupId>org.dyn4j < artifactId>dyn4j < version>4.1.4
2022-08-26 19:05:01 1.08MB simulation physics-engine collision-detection dyn4j
1
This C library handles 2-dimensional bounding box collision detection. It is optimized to scale well from a few objects to many thousands of objects.
2022-03-25 19:35:11 1.7MB collision detection
1
1 Introduction 1.1 Contents Overview 1.2 About the Code 2 Collision Detection Design Issues 2.1 Collision Algorithm Design Factors 2.2 Application Domain Representation 2.2.1 Object Representations 2.2.2 Collision versus Rendering Geometry 2.2.3 Collision Algorithm Specialization 2.3 Different Types of Queries 2.4 Environment Simulation Parameters 2.4.1 Number of Objects 2.4.2 Sequential versus Simultaneous Motion 2.4.3 Discrete versus Continuous Motion 2.5 Performance 2.5.1 Optimization Overview 2.6 Robustness 2.7 Ease of Implementation and Use 2.7.1 Debugging a Collision Detection System 2.8 Summary 3 A Math and Geometry Primer 3.1 Matrices 3.1.1 Matrix Arithmetic 3.1.2 Algebraic Identities Involving Matrices 3.1.3 Determinants 3.1.4 Solving Small Systems of Linear Equation using Cramer's Rule 3.1.5 Matrix Inverses for 2x2 and 3x3 Matrices 3.1.6 Determinant Predicates 3.1.6.1 ORIENT2D(A, B, C) 3.1.6.2 ORIENT3D(A, B, C, D) 3.1.6.3 INCIRCLE2D(A, B, C, D) 3.1.6.4 INSPHERE(A, B, C, D, E) 3.2 Coordinate Systems and Points 3.3 Vectors 3.3.1 Vector Arithmetic 3.3.2 Algebraic Identities Involving Vectors 3.3.3 The Dot Product 3.3.4 Algebraic Identities Involving Dot Products 3.3.5 The Cross Product 3.3.6 Algebraic Identities Involving Cross Products 3.3.7 The Scalar Triple Product 3.3.8 Algebraic Identities Involving Scalar Triple Products 3.4 Barycentric Coordinates 3.5 Lines, Rays, and Segments 3.6 Planes and Halfspaces 3.7 Polygons 3.7.1 Testing Polygonal Convexity 3.8 Polyhedra 3.8.1 Testing Polyhedral Convexity 3.9 Computing Convex Hulls 3.9.1 Andrew's Algorithm 3.9.2 The Quickhull Algorithm 3.10 Voronoi Regions 3.11 Minkowski Sum and Difference 3.12 Summary 4 Bounding Volumes 4.1 Desired BV Characteristics 4.2 Axis-Aligned Bounding Boxes (AABBs) 4.2.1 AABB-AABB Intersection 4.2.2 Computing and Updating AABBs 4.2.3 AABB from the Object Bounding Sphere 4.2.4 AABB Reconstructed from Original Point Set 4.2.5 AABB from Hill-Climbing Vertices of the Object Representation 4.2.6 AABB Recomputed from Rotated AABB 4.3 Spheres 4.3.1 Sphere-Sphere Intersection 4.3.2 Computing a Bounding Sphere 4.3.3 Bounding Sphere from Direction of Maximum Spread 4.3.4 Bounding Sphere Through Iterative Refinement 4.3.5 The Minimum Bounding Sphere 4.4 Oriented Bounding Boxes (OBBs) 4.4.1 OBB-OBB Intersection 4.4.2 Making the Separating-Axis Test Robust 4.4.3 Computing a Tight OBB 4.4.4 Optimizing PCA-Based OBBs 4.4.5 Brute-Force OBB Fitting 4.5 Sphere-Swept Volumes 4.5.1 Sphere-Swept Volume Intersection 4.5.2 Computing Sphere-Swept Bounding Volumes 4.6 Halfspace Intersection Volumes 4.6.1 Kay-Kajiya Slab-Based Volumes 4.6.2 Discrete-Orientation Polytopes (k-DOPs) 4.6.3 k-DOP-k-DOP Overlap Test 4.6.4 Computing and Realigning k-DOPs 4.6.5 Approximate Convex Hull Intersection Tests 4.7 Other Bounding Volumes 4.8 Summary 5 Basic Primitive Tests 5.1 Closest Point Computations 5.1.1 Closest Point on Plane to Point 5.1.2 Closest Point on Line Segment to Point 5.1.2.1 Distance of Point to Segment 5.1.3 Closest Point on AABB to Point 5.1.3.1 Distance of Point to AABB 5.1.4 Closest Point on OBB to Point 5.1.4.1 Distance of Point to OBB 5.1.4.2 Closest Point on 3D Rectangle to Point 5.1.5 Closest Point on Triangle to Point 5.1.6 Closest Point on Tetrahedron to Point 5.1.7 Closest Point on Convex Polyhedron to Point 5.1.8 Closest Points of Two Lines 5.1.9 Closest Points of Two Line Segments 5.1.9.1 2D Segment Intersection 5.1.10 Closest Points of a Line Segment and a Triangle 5.1.11 Closest Points of Two Triangles 5.2 Testing primitives 5.2.1 Separating Axis Test 5.2.1.1 Robustness of the Separating Axis Test 5.2.2 Testing Sphere against Plane 5.2.3 Testing Box against Plane 5.2.4 Testing Cone against Plane 5.2.5 Testing Sphere against AABB 5.2.6 Testing Sphere against OBB 5.2.7 Testing Sphere against Triangle 5.2.8 Testing Sphere against Polygon 5.2.9 Testing AABB against Triangle 5.2.10 Testing Triangle against Triangle 5.3 Intersecting Lines, Rays, and (Directed) Segments 5.3.1 Intersecting Segment against Plane 5.3.2 Intersecting Ray or Segment against Sphere 5.3.3 Intersecting Ray or Segment against Box 5.3.4 Intersecting Line against Triangle 5.3.5 Intersecting Line against Quadrilateral 5.3.6 Intersecting Ray or Segment against Triangle 5.3.7 Intersecting Ray or Segment against Cylinder 5.3.8 Intersecting Ray or Segment against Convex Polyhedron 5.4 Additional Tests 5.4.1 Testing Point in Polygon 5.4.2 Testing Point in Triangle 5.4.3 Testing Point in Polyhedron 5.4.4 Intersection of Two Planes 5.4.5 Intersection of Three Planes 5.5 Dynamic Intersection Tests 5.5.1 Interval Halving for Intersecting Moving Objects 5.5.2 Separating Axis Test for Moving Convex Objects 5.5.3 Intersecting Moving Sphere against Plane 5.5.4 Intersecting Moving AABB against Plane 5.5.5 Intersecting Moving Sphere against Sphere 5.5.6 Intersecting Moving Sphere against Triangle (and Polygon) 5.5.7 Intersecting Moving Sphere against AABB 5.5.8 Intersecting Moving AABB against AABB 5.6 Summary 6 Bounding Volume Hierarchies 6.1 Hierarchy Design Issues 6.1.1 Desired BVH Characteristics 6.1.2 Cost Functions 6.1.3 Tree Degree 6.2 Building Strategies for Hierarchy Construction 6.2.1 Top-Down Construction 6.2.1.1 Partitioning Strategies 6.2.1.2 Choice of Partitioning Axis 6.2.1.3 Choice of Split Point 6.2.2 Bottom-Up Construction 6.2.2.1 Improved Bottom-Up Construction 6.2.2.2 Other Bottom-Up Construction Strategies 6.2.2.3 Bottom-Up N-Ary Clustering Trees 6.2.3 Incremental (Insertion) Construction 6.2.3.1 The Goldsmith-Salmon Incremental Construction Method 6.3 Hierarchy Traversal 6.3.1 Descent Rules 6.3.2 Generic Informed Depth-First Traversal 6.3.3 Simultaneous Depth-First Traversal 6.3.4 Optimized Leaf-Direct Depth-First Traversal 6.4 Example Bounding Volume Hierarchies 6.4.1 OBB-Trees 6.4.2 AABB-Trees and BoxTrees 6.4.3 Sphere-Tree through Octree Subdivision 6.4.4 Sphere-Tree from Sphere-Covered Surfaces 6.4.5 Generate-and-Prune Sphere Covering 6.4.6 k-DOP Trees 6.5 Merging Bounding Volumes 6.5.1 Merging Two AABBs 6.5.2 Merging Two Spheres 6.5.3 Merging Two OBBs 6.5.4 Merging Two k-DOPs 6.6 Efficient Tree Representation and Traversal 6.6.1 Array Representation 6.6.2 Preorder Traversal Order 6.6.3 Offsets Instead of Pointers 6.6.4 Cache-Friendlier Structures (Non-Binary Trees) 6.6.5 Tree Node and Primitive Ordering 6.6.6 On Recursion 6.6.7 Grouping Queries 6.7 Improved Queries through Caching 6.7.1 Surface Caching: Caching Intersecting Primitives 6.7.2 Front Tracking 6.8 Summary 7 Spatial Partitioning 7.1 Uniform Grids 7.1.1 Cell Size Issues 7.1.2 Grids as Arrays of Linked Lists 7.1.3 Hashed Storage and Infinite Grids 7.1.4 Storing Static Data 7.1.5 Implicit Grids 7.1.6 Uniform Grid Object-Object Test 7.1.6.1 One Test at a Time 7.1.6.2 All Tests at a Time 7.1.7 Additional Grid Considerations 7.2 Hierarchical Grids 7.2.1 Basic Hgrid Implementation 7.2.2 Alternative Hierarchical Grid Representations 7.2.3 Other Hierarchical Grids 7.3 Trees 7.3.1 Octrees (and Quadtrees) 7.3.2 Octree Object Assignment 7.3.3 Locational Codes and Finding the Octant for a Point 7.3.4 Linear Octrees (Hash-Based) 7.3.5 Computing the Morton Key 7.3.6 Loose Octrees 7.3.7 k-d Trees 7.3.8 Hybrid Schemes 7.4 Ray and Directed Line Segment Traversals 7.4.1 k-d Tree Intersection Test 7.4.2 Uniform Grid Intersection Test 7.5 Sort and Sweep Methods 7.5.1 Sorted Linked List Implementation 7.5.2 Array-Based Sorting 7.6 Cells and Portals 7.7 Avoiding Retesting 7.7.1 Bit Flags 7.7.2 Time Stamping 7.7.3 Amortized Time Stamp Clearing 7.8 Summary 8 BSP Tree Hierarchies 8.1 BSP Trees 8.2 Types of BSP Trees 8.2.1 Node-Storing BSP Trees 8.2.2 Leaf-Storing BSP Trees 8.2.3 Solid-Leaf BSP Trees 8.3 Building the BSP Tree 8.3.1 Selecting Dividing Planes 8.3.2 Evaluating Dividing Planes 8.3.3 Classifying Polygons with Respect to a Plane 8.3.4 Splitting Polygons against a Plane 8.3.5 More on Polygon splitting Robustness 8.3.6 Tuning BSP Tree Performance 8.4 using the BSP Tree 8.4.1 Testing Point against a Solid-Leaf BSP Tree 8.4.2 Intersecting Ray against a Solid-Leaf BSP Tree 8.4.3 Polytope Queries on Solid-Leaf BSP Trees 8.5 Summary 9 Convexity-Based Methods 9.1 Boundary-Based Collision Detection 9.2 Closest Features Algorithms 9.2.1 The V-Clip Algorithm 9.3 Hierarchical Polyhedron Representations 9.3.1 The Dobkin-Kirkpatrick Hierarchy 9.4 Linear and Quadratic Programming 9.4.1 Linear Programming 9.4.1.1 Fourier-Motzkin Elimination 9.4.1.2 Seidel's Algorithm 9.4.2 Quadratic Programming 9.5 The Gilbert-Johnson-Keerthi Algorithm 9.5.1 The Gilbert-Johnson-Keerthi Algorithm 9.5.2 Finding the Point of Minimum Norm in a Simplex 9.5.3 GJK, Closest Points and Contact Manifolds 9.5.4 Hill-Climbing for Extreme Vertices 9.5.5 Exploiting Coherence by Vertex Caching 9.5.6 Rotated Objects Optimization 9.5.7 GJK for Moving Objects 9.6 The Chung-Wang Separating Vector Algorithm 9.7 Summary 10 GPU-Assisted Collision Detection 10.1 Interfacing with the GPU 10.1.1 Buffer Readbacks 10.1.2 Occlusion Queries 10.2 Testing Convex Objects 10.3 Testing Concave Objects 10.4 GPU-Based Collision Filtering 10.5 Summary 11 Numerical Robustness 11.1 Robustness Problem Types 11.2 Representing Real Numbers 11.2.1 The IEEE-754 Floating-Point Formats 11.2.2 Infinity Arithmetic 11.2.3 Floating-Point Error Sources 11.3 Robust Floating-Point Usage 11.3.1 Tolerances Comparisons for Floating-Point Values 11.3.2 Robustness through Thick Planes 11.3.3 Robustness through Sharing of Calculations 11.3.4 Robustness of Fat Objects 11.4 Interval Arithmetic 11.4.1 Interval Arithmetic Examples 11.4.2 Interval Arithmetic in Collision Detection 11.5 Exact and Semi-Exact Computation 11.5.1 Exact Arithmetic using Integers 11.5.2 On Integer Division 11.5.3 Segment Intersection using Integer Arithmetic 11.6 Further Suggestions for Improving Robustness 11.7 Summary 12 Geometrical Robustness 12.1 Vertex Welding 12.2 Computing Adjacency Information 12.2.1 Computing a Vertex-to-Face Table 12.2.2 Computing an Edge-to-Face Table 12.2.3 Testing Connectedness 12.3 Holes, Cracks, Gaps, and T-Junctions 12.4 Merging Coplanar Faces 12.4.1 Testing Coplanarity of Two Polygons 12.4.2 Testing Polygon Planarity 12.5 Triangulation and Convex Partitioning 12.5.1 Triangulation by Ear Cutting 12.5.1.1 Triangulating Polygons with Holes 12.5.2 Convex Decomposition of Polygons 12.5.3 Convex Decomposition of Polyhedra 12.5.4 Dealing with "Nondecomposable" Concave Geometry 12.6 Consistency Testing using Euler's Formula 12.7 Summary 13 Optimization 13.1 CPU Caches 13.2 Instruction Cache Optimizations 13.3 Data Cache Optimizations 13.3.1 Structure Optimizations 13.3.2 Quantized and Compressed Vertex Data 13.3.3 Prefetching and Preloading 13.4 Cache-Aware Data Structures and Algorithms 13.4.1 A Compact Static k-d Tree 13.4.2 A Compact AABB Tree 13.4.3 Cache-Obliviousness 13.5 Software Caching 13.5.1 Cached Linearization Example 13.5.2 Amortized Predictive Linearization Caching 13.6 Aliasing 13.6.1 Type-Based Alias Analysis 13.6.2 Restricted Pointers 13.6.3 Avoiding Aliasing 13.7 Parallelism through SIMD Optimizations 13.7.1 4 Spheres versus 4 Spheres SIMD Test 13.7.2 4 Spheres versus 4 AABBs SIMD Test 13.7.3 4 AABBs versus 4 AABBs SIMD Test 13.8 Branching 13.9 Summary References Index
2022-01-11 10:02:06 3MB 碰撞检测
1
gjk.c –平原C的Gilbert-Johnson-Keerthi 这是在普通C语言中粗略但快速地实现GJK冲突检测算法的功能。只有一个C文件,少于200行,没有依赖关系。 目前处于2D模式,即将推出完整的3D版本。此2D版本使用Minkowski求和,并在Minkowski空间中构建一个三角形单形,以判断两个任意凸多边形是否发生碰撞。 3D版本将大致相同,但将在3维Minkowski空间内构建一个四面体单形。 它当前仅指示是否存在碰撞。 距离和接触点的C代码即将推出。 免责声明 他妈的许可证和版权。 我这样做是出于学习目的,这是公共知识,任何用法都是完全免费的。 使用范例 这是的示例案例的。 将两个测试的多边形定义为纯C矢量结构类型的数组。 GJK的这种实现实际上并不关心数组中顶点的顺序,因为它将所有点集都视为凸多边形。 struct _vec2 { float x; float
2021-11-17 16:40:30 25KB physics simplex collision-detection gjk
1
碰撞检测 查看本书,包括交互式示例: 更新! 这个网站已经获得了很多访问,这真是太好了。 我进行了一些更改,以使其在移动设备上看起来更好,使导航更容易,并尝试查看所有内容以查找错误。 如果您有任何问题或建议,请。 谢谢! 对象的碰撞是大多数游戏体验和用户界面的基础。 棒球棒与球相撞,僵尸撞到墙壁上,马里奥(Mario)降落在平台和脚龟上。 甚至像用鼠标(一个点)单击一个按钮(一个矩形)这样简单的事情也是冲突。 本书使用圆形,矩形和直线等基本形状解释了这些碰撞背后的算法,因此您可以将其实现到自己的项目中。 这里覆盖了什么? 本书涵盖点,圆,矩形,直线,多边形和三角形之间的碰撞。 这些示例旨在尽可能地易于阅读和理解。 肯定有更快,更有效的方法来检测这些碰撞,但是本书旨在使用户友好并以最少的数学知识教授这些原理。 每个部分都包含对碰撞算法的描述,以及使用processing.js构建
2021-11-17 14:09:14 1.61MB processing book collision-detection interactivity
1
GJK (Gilbert-Johnson-Keerthi) 碰撞检测算法在 MATLAB 中的实现。 GJK.m 函数获取形状顶点数据并返回两个形状是否穿透。 仅适用于凸形物体! MAIN_example.m 对两个多面体进行动画处理,并在两者相互碰撞时停止。
2021-09-22 22:26:16 6KB matlab
1
Collision Detection in Interactive 3D Environments [2004].pdf
2021-08-12 13:13:06 11.89MB Collision Detection
1
Christer Ericson “Real-Time Collision Detection " Morgan Kaufmann | ISBN: 1558607323 | PDF |
2021-06-30 23:26:57 3MB Collision Detection 碰撞检测
1