欢迎访问Geometric Tools的官方网站,这是数学、几何、图形、图像分析和物理领域计算的源代码集合。该引擎是用C++14编写的,因此,可以移植地访问内核上多线程编程的标准构造。该引擎还支持使用通用GPU编程(GPGPU)的高性能计算。部分代码在各种书籍以及本网站提供的文档中进行了描述。源代码是免费下载的,包含在Boost许可证中。发布时间表和相关信息如下所示。
如果使用Linux和OpenGL,则需要OpenGL 4.5或更高版本。为了满足这一限制,我使用NVIDIA专有驱动程序,而不是Nouveau开源驱动程序。在没有指定版本的情况下运行示例应用程序的任何尝试都将以控制台窗口输出的方式正常失败:需要OpenGL 4.5。
geometry tool engine几何工具引擎6.5。数学代码位于仅标题的库(GTMathematics)中。提供了具有基于GPU的实现的数学库(GTMathematicsGPU)。基于CPU的通用图形引擎代码位于其自己的库(GTGraphics)中。DirectX 11包装器用于图形(GTGraphicsDX11)和应用程序(GTApplicationsDX11)。OpenGL 4.5包装器用于图形(GTGraphicsGL45)和应用程序(GTApplications GL45)。
•2022年12月14日发布
•Microsoft Windows 10或11;DirectX 11.1或OpenGL 4.5;Microsoft Visual Studio 2019和2022;Windows 15.0.1版C++Clang编译器;英特尔C++编译器2023
•Ubuntu 22.04.1 LTS;OpenGL 4.5、NVIDIA图形驱动程序;Visual Studio代码1.49.2;CMake 3.15.2;通用条款11.2.0
•Fedora 37;OpenGL 4.5、NVIDIA图形驱动程序;Visual Studio代码1.49.2;CMake 3.22.2;一般条款12.2.1
源代码分发可以从该网站下载,但也可以在GitHub上的Geometric Tools上下载。我们网站上的zip文件是一个快照,在进行了大量更改后发布。然而,GitHub存储库始终包含在GTE中进行的最新修复和更新。
几何工具库。几何工具的动机是我在医学图像处理方面的研究生学习;然后它被命名为MAGIC软件(我的替代图形和图像代码)。当我进入3D视频游戏行业时,我在图像代码上花费的时间更少,而在图形、物理和数学代码上花费了更多的时间。大部分代码是帮助在Usenet论坛comp.graphics.algorithms上发布问题的人的结果。近年来的技术支持问题向我表明,数学和几何代码是人们使用最多的,所以我现在将重点关注这些主题。
几何工具库(GTL)将对GTE中的数学和几何代码进行修改,然后在时间允许的情况下添加新代码。我试图简化代码,提供一致的命名和接口,并扩展功能。一些GTE几何代码已经包含多线程,当数字类型涉及有理算术和任意精度算术时尤其有用,我计划在更多算法中包含多线程。对于使用HLSL、GLSL和CUDA的基于GPGPU的实现,以及使用Intel的SSE或AVX的基于SIMD的实现,将提供单独的代码。我将为理性和符号计算的混合添加一个框架,这在我的《稳健和无误差几何计算》一书中有所描述。
数学和几何代码库具有相关文档和单元测试套件。图形和应用程序的代码仅存在于说明GTL算法的示例。这些将包含在单独的库中,这些库按原样提供,没有单元测试支持。GTL源代码将免费下载,并受Boost许可证的约束。
我没有发布GTL的可靠估计日期。我会在这里宣布。GTL代码将在GitHub上提供。
该引擎中包含图形、图像、数学 (线性代数、估计、数值、计算几何、闭包、曲线、曲面、体积、距离函数几何图元、插值、相交、数值方法、投影)、物理,具体的内容如下:
Geometric Tools: Documentation
Graphics:
Reconstructing a Height Field From a Normal Map
Alhazen’s Problem: Reflection Point on a Sphere
Imagics:
Extraction of Level Sets from 2D Images
Extraction of Level Sets from 3D Images
Fast Gaussian Blurring
Integer-based Ellipse Drawing
Integer-Based Rotations of Images
Level Set Extraction from Gridded 2D and 3D Data
Medial-Based Morphing for 2D Binary Objects
Theory of Ridges
Skeletonization of 2D Binary Images
Mathematics/Algebra:
Constrained Quaternions using Euler Angles
Converting Between Coordinate Systems
Euler Angle Formulas
The Laplace Expansion Theorem: Computing the Determinants and Inverses of Matrices
A Linear Algebraic Approach to Quaternions
Computing Orthonormal Sets in 2D, 3D, and 4D
Solving Systems of Polynomial Equations
Quaternion Algebra and Calculus
Rotation Representations
Constructing Rotation Matrices Using Power Series
Interpolation of Rigid Motions in 3D
Mathematics/Approximation:
Approximating an Ellipse by Circular Arcs
Fitting 3D Data with a Helix
Least Squares Fitting of Data by Linear or Quadratic Structures
Least Squares Fitting of Data with Polynomials
Least-Squares Fitting of Data with B-Spline Curves
Least-Squares Fitting of Data with B-Spline Surfaces
Least-Squares Reduction of B-Spline Curves
Least Squares Fitting of Segments by Line or Plane
Fitting 3D Data with a Torus
Least Squares Fitting of Parallel Lines to Points in 2D
Fit a Cone to Ellipse and Points
Fit a Convex Quadrilateral by a Rectange
Mathematics/Arithmetic:
GTEngine: Arbitrary Precision Arithmetic
Mathematics/Computational Geometry:
Boolean Operations on Intervals and Axis-Aligned Rectangles
Clipping a Mesh Against a Plane
Geodesics On Triangle Meshes
Mesh Differential Geometry
The Minimal Cycle Basis for a Planar Graph
Polyline Reduction
Tessellation of a Unit Sphere Starting with an Inscribed Convex Triangular Mesh
Triangulation by Ear Clipping
Mathematics/Containment:
AABB of a Transformed AABB
Centers of a Simplex (circumscribed/inscribed balls)
Largest Fixed-Aspect, Axis-Aligned Rectangle Inscribed in a Convex Quadrilateral
Minimum-Area Rectangle Containing a Set of Points
Minimum-Volume Box Containing a Set of Points
Mathematics/Curves, Surfaces, and Volumes:
A Relationship Between Minimum Bending Energy and Degree Elevation for Bézier Curves
Bicubic Bézier Exact Interpolation
Least-Squares Fitting of Data with B-Spline Curves
Least-Squares Fitting of Data with B-Spline Surfaces
Least-Squares Reduction of B-Spline Curves
Classifying Quadrics using Exact Arithmetic
Geodesics on a Parameterized Surface
Kochanek-Bartels Cubic Splines
Moving Along a Curve with Specified Speed
Natural Spline Interpolation
Representing a Circle or Sphere with NURBS
Principal Curvatures of Surfaces
Computing Geodesics on a Riemannian Manifold
Mathematics/Distance:
Distance from an Oriented Box to a Cone Frustum
Distance Between Ellipses in 2D
Distance Between Two Ellipses in 3D
Distance Between Two Line Segments in 3D
Distance from Line to Rectangle in 3D
Distance from Linear Component to Tetrahedron
Distance Between Point and Triangle in 3D
Distance from a Point to an Ellipse, an Ellipsoid, or a Hyperellipsoid
Distance Between Point and Line, Ray, or Line Segment
Distance from Point to Orthogonal Frustum
Distance to Circles in 3D
Mathematics/Functions:
An Approximation for the Inverse Square Root Function
Derivative Approximation by Finite Differences
A Fast and Accurate Estimate for SLERP
Approximations to Rotation Matrices and Their Derivatives
A Fast and Accurate Algorithm for Computing SLERP (Journal of Graphics Tools)
Mathematics/Geometric Primitives:
Information About Ellipses
Platonic Solids (parameters, vertices, mesh connectivity)
Mathematics/Interpolation:
Akima Interpolation for Nonuniform 1D Data
B-Spline Interpolation on Lattices
C1 Quadratic Interpolation of Meshes
Thin Plate Splines
Globally C^s and Locally Controllable Interpolation on n-Dimensional Lattices
Mathematics/Intersection:
The Area of Intersecting Ellipses
Clip a Convex Polygon by a Hyperplane
Dynamic Collision Detection using Oriented Bounding Boxes
Intersection of Orthogonal View Frustum and Oriented Bounding Box using Separation Axis Testing
Intersection of a Box and a Cone or Cone Frustum
Intersection of a Box and a Finite Cylinder
Intersection of Box and Ellipsoid
Intersection of an Infinite Cylinder and a Plane
Intersection of Infinite Cylinders
Intersection of Linear and Circular Components in 2D
Intersection of a Line and a Box
Intersection of a Line and a Cone
Intersection of Moving Circle and Rectangle
Intersection of Moving Sphere and Box
Intersection of Moving Sphere and Triangle
Intersection of Cylinders
Intersection of Ellipses
Intersection of Ellipsoids
Intersection of Rectangle and Ellipse
Intersection of Objects with Linear and Angular Velocities using Oriented Bounding Boxes
Intersection of a Sphere and a Cone
Intersection of Swept Ellipses and Swept Ellipsoids
Intersection of a Triangle and a Cone
Intersection of a Triangle and a Cylinder
Intersection of Convex Objects: The Method of Separating Axes
Mathematics/Numerical Methods:
Convex Quadratic Programming
Low-Degree Polynomial Roots
Numerical Integration
A Robust Eigensolver for 2x2 Symmetric Matrices
A Robust Eigensolver for 3x3 Symmetric Matrices
Mathematics/Projection:
Parallel Projection of an Ellipse
Perspective Mappings
Perspective Projection of an Ellipse onto a Line in 2D
Perspective Projection of an Ellipse onto a Plane in 3D
Perspective Projection of an Ellipsoid
Reconstructing an Ellipsoid from its Perspective Projection Onto a Plane
Physics:
Extremal Queries using BSP Trees
Particle Motion on a Height Field
Polyhedral Mass Properties (Revisited)
Rough Plane Analysis
Stability Analysis for Systems of Differential Equations
Computing Impulsive Forces for Colliding Contact