Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/jolt_physics/Jolt/Math/Vec3.cpp
9913 views
1
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3
// SPDX-License-Identifier: MIT
4
5
#include <Jolt/Jolt.h>
6
7
#include <Jolt/Math/Vec3.h>
8
9
JPH_NAMESPACE_BEGIN
10
11
static void sAddVertex(StaticArray<Vec3, 1026> &ioVertices, Vec3Arg inVertex)
12
{
13
bool found = false;
14
for (const Vec3 &v : ioVertices)
15
if (v == inVertex)
16
{
17
found = true;
18
break;
19
}
20
if (!found)
21
ioVertices.push_back(inVertex);
22
}
23
24
static void sCreateVertices(StaticArray<Vec3, 1026> &ioVertices, Vec3Arg inDir1, Vec3Arg inDir2, Vec3Arg inDir3, int inLevel)
25
{
26
Vec3 center1 = (inDir1 + inDir2).Normalized();
27
Vec3 center2 = (inDir2 + inDir3).Normalized();
28
Vec3 center3 = (inDir3 + inDir1).Normalized();
29
30
sAddVertex(ioVertices, center1);
31
sAddVertex(ioVertices, center2);
32
sAddVertex(ioVertices, center3);
33
34
if (inLevel > 0)
35
{
36
int new_level = inLevel - 1;
37
sCreateVertices(ioVertices, inDir1, center1, center3, new_level);
38
sCreateVertices(ioVertices, center1, center2, center3, new_level);
39
sCreateVertices(ioVertices, center1, inDir2, center2, new_level);
40
sCreateVertices(ioVertices, center3, center2, inDir3, new_level);
41
}
42
}
43
44
const StaticArray<Vec3, 1026> Vec3::sUnitSphere = []() {
45
46
const int level = 3;
47
48
StaticArray<Vec3, 1026> verts;
49
50
// Add unit axis
51
verts.push_back(Vec3::sAxisX());
52
verts.push_back(-Vec3::sAxisX());
53
verts.push_back(Vec3::sAxisY());
54
verts.push_back(-Vec3::sAxisY());
55
verts.push_back(Vec3::sAxisZ());
56
verts.push_back(-Vec3::sAxisZ());
57
58
// Subdivide
59
sCreateVertices(verts, Vec3::sAxisX(), Vec3::sAxisY(), Vec3::sAxisZ(), level);
60
sCreateVertices(verts, -Vec3::sAxisX(), Vec3::sAxisY(), Vec3::sAxisZ(), level);
61
sCreateVertices(verts, Vec3::sAxisX(), -Vec3::sAxisY(), Vec3::sAxisZ(), level);
62
sCreateVertices(verts, -Vec3::sAxisX(), -Vec3::sAxisY(), Vec3::sAxisZ(), level);
63
sCreateVertices(verts, Vec3::sAxisX(), Vec3::sAxisY(), -Vec3::sAxisZ(), level);
64
sCreateVertices(verts, -Vec3::sAxisX(), Vec3::sAxisY(), -Vec3::sAxisZ(), level);
65
sCreateVertices(verts, Vec3::sAxisX(), -Vec3::sAxisY(), -Vec3::sAxisZ(), level);
66
sCreateVertices(verts, -Vec3::sAxisX(), -Vec3::sAxisY(), -Vec3::sAxisZ(), level);
67
68
return verts;
69
}();
70
71
JPH_NAMESPACE_END
72
73