improve friction quality, add shader-only support, improve debug drawing facilities, fix couple things
This commit is contained in:
		| @@ -19,31 +19,10 @@ | ||||
| #ifndef B3_MESH_H | ||||
| #define B3_MESH_H | ||||
|  | ||||
| #include <bounce/common/geometry.h> | ||||
| #include <bounce/collision/trees/static_tree.h> | ||||
|  | ||||
| // A triangle in indexed form. | ||||
| struct b3Triangle | ||||
| { | ||||
| 	// Does nothing for performance. | ||||
| 	b3Triangle() { } | ||||
|  | ||||
| 	// Set this triangle from three vertices. | ||||
| 	b3Triangle(u32 _v1, u32 _v2, u32 _v3) | ||||
| 	{ | ||||
| 		v1 = _v1; | ||||
| 		v2 = _v2; | ||||
| 		v3 = _v3; | ||||
| 	} | ||||
|  | ||||
| 	// Set this triangle from three vertices. | ||||
| 	void Set(u32 _v1, u32 _v2, u32 _v3) | ||||
| 	{ | ||||
| 		v1 = _v1; | ||||
| 		v2 = _v2; | ||||
| 		v3 = _v3; | ||||
| 	} | ||||
|  | ||||
| 	// Test if this triangle contains a given vertex. | ||||
| 	bool TestVertex(u32 v) const | ||||
| 	{ | ||||
| @@ -67,33 +46,15 @@ struct b3Mesh | ||||
| 	b3Triangle* triangles; | ||||
| 	b3StaticTree tree; | ||||
|  | ||||
| 	void BuildTree(); | ||||
| 	 | ||||
| 	const b3Vec3& GetVertex(u32 index) const; | ||||
| 	const b3Triangle& GetTriangle(u32 index) const; | ||||
| 	 | ||||
| 	void GetTriangleVertices(b3Vec3 out[3], u32 index) const; | ||||
| 	b3Plane GetTrianglePlane(u32 index) const; | ||||
| 	b3AABB3 GetTriangleAABB(u32 index) const; | ||||
| 	u32 GetSize() const; | ||||
|  | ||||
| 	b3AABB3 GetTriangleAABB(u32 index) const; | ||||
|  | ||||
| 	void BuildTree(); | ||||
| }; | ||||
|  | ||||
| inline void b3Mesh::BuildTree() | ||||
| { | ||||
| 	b3AABB3* aabbs = (b3AABB3*)b3Alloc(triangleCount * sizeof(b3AABB3)); | ||||
| 	u32* indices = (u32*)b3Alloc(triangleCount * sizeof(u32)); | ||||
| 	for (u32 i = 0; i < triangleCount; ++i) | ||||
| 	{ | ||||
| 		aabbs[i] = GetTriangleAABB(i); | ||||
| 		indices[i] = i; | ||||
| 	} | ||||
|  | ||||
| 	tree.Build(indices, aabbs, triangleCount); | ||||
|  | ||||
| 	b3Free(indices); | ||||
| 	b3Free(aabbs); | ||||
| } | ||||
|  | ||||
| inline const b3Vec3& b3Mesh::GetVertex(u32 index) const | ||||
| { | ||||
| 	return vertices[index]; | ||||
| @@ -104,22 +65,14 @@ inline const b3Triangle& b3Mesh::GetTriangle(u32 index) const | ||||
| 	return triangles[index]; | ||||
| } | ||||
|  | ||||
| inline void b3Mesh::GetTriangleVertices(b3Vec3 out[3], u32 index) const | ||||
| inline u32 b3Mesh::GetSize() const | ||||
| { | ||||
| 	const b3Triangle* triangle = triangles + index; | ||||
| 	u32 i1 = triangle->v1; | ||||
| 	u32 i2 = triangle->v2; | ||||
| 	u32 i3 = triangle->v3; | ||||
| 	out[0] = vertices[i1]; | ||||
| 	out[1] = vertices[i2]; | ||||
| 	out[2] = vertices[i3]; | ||||
| } | ||||
|  | ||||
| inline b3Plane b3Mesh::GetTrianglePlane(u32 index) const | ||||
| { | ||||
| 	b3Vec3 vs[3]; | ||||
| 	GetTriangleVertices(vs, index); | ||||
| 	return b3Plane(vs[0], vs[1], vs[2]); | ||||
| 	u32 size = 0; | ||||
| 	size += sizeof(b3Mesh); | ||||
| 	size += sizeof(b3Vec3) * vertexCount; | ||||
| 	size += sizeof(b3Triangle) * triangleCount; | ||||
| 	size += tree.GetSize(); | ||||
| 	return size; | ||||
| } | ||||
|  | ||||
| inline b3AABB3 b3Mesh::GetTriangleAABB(u32 index) const | ||||
| @@ -133,18 +86,20 @@ inline b3AABB3 b3Mesh::GetTriangleAABB(u32 index) const | ||||
| 	b3AABB3 aabb; | ||||
| 	aabb.m_lower = b3Min(b3Min(vertices[i1], vertices[i2]), vertices[i3]); | ||||
| 	aabb.m_upper = b3Max(b3Max(vertices[i1], vertices[i2]), vertices[i3]); | ||||
| 	 | ||||
| 	return aabb; | ||||
| } | ||||
|  | ||||
| inline u32 b3Mesh::GetSize() const | ||||
| inline void b3Mesh::BuildTree() | ||||
| { | ||||
| 	u32 size = 0; | ||||
| 	size += sizeof(b3Mesh); | ||||
| 	size += sizeof(b3Vec3) * vertexCount; | ||||
| 	size += sizeof(b3Triangle) * triangleCount; | ||||
| 	size += tree.GetSize(); | ||||
| 	return size; | ||||
| 	b3AABB3* aabbs = (b3AABB3*)b3Alloc(triangleCount * sizeof(b3AABB3)); | ||||
| 	for (u32 i = 0; i < triangleCount; ++i) | ||||
| 	{ | ||||
| 		aabbs[i] = GetTriangleAABB(i); | ||||
| 	} | ||||
|  | ||||
| 	tree.Build(aabbs, triangleCount); | ||||
|  | ||||
| 	b3Free(aabbs); | ||||
| } | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -33,9 +33,8 @@ public: | ||||
| 	b3StaticTree(); | ||||
| 	~b3StaticTree(); | ||||
|  | ||||
| 	// Build this tree from a list of AABBs and the list  | ||||
| 	// of indices to the AABBs. | ||||
| 	void Build(u32* indices, const b3AABB3* aabbs, u32 count); | ||||
| 	// Build this tree from a list of AABBs. | ||||
| 	void Build(const b3AABB3* aabbs, u32 count); | ||||
|  | ||||
| 	// Get the AABB of a given proxy. | ||||
| 	const b3AABB3& GetAABB(u32 proxyId) const; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user