You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

84 lines
2.3 KiB

#pragma once
#include "vector3.hpp"
#include "CommonStructs.hpp"
#include <vector>
#include <string>
struct Triangle {
Vector3 a;
Vector3 b;
Vector3 c;
};
using TriangleMesh = std::vector<Triangle>;
// ֻ��������� OBJ��
// v x y z
// f i j k (�� f i/j/k ��ʽ��1-based ��������)
// ����������/����
bool loadObjAsTriangleMesh(const IniInPutStruct* inputData, size_t inputCount, TriangleMesh& mesh);
namespace GeometryUtils {
// P ����������������
void closestPointOnTriangle(
const Vector3& p,
const Triangle& tri,
Vector3& closest,
float& dist2);
// P ��������������������
void closestPointOnMesh(
const Vector3& p,
const TriangleMesh& mesh,
Vector3& closest,
float& dist);
float signedDistanceToMesh(
const Vector3& p,
const TriangleMesh& mesh,
Vector3* outClosestPoint = nullptr,
Vector3* outNormal = nullptr);
float signedDistanceToMeshForEndpoint(
const Vector3& p,
const TriangleMesh& mesh,
Vector3* outClosestPoint,
Vector3* outNormal);
// �� mesh �������ҵ���� k ���������ѡ�㡱
void getSurfaceCandidatesOnMesh(
const Vector3& p,
const TriangleMesh& mesh,
int k,
std::vector<Vector3>& outPoints);
// ��������
void getSurfaceSlideCandidates(
const Vector3& p,
const TriangleMesh& mesh,
int k,
const Vector3* pathDir,
float slideRadius,
std::vector<Vector3>& outPoints);
bool findEndpointHitOnMesh(
const Vector3& p0,
const Vector3& p1,
const TriangleMesh& mesh,
float maxRayDist,
Vector3& hitPoint);
bool SegmentCollidesWithMesh(
const Vector3& P0,
const Vector3& P1,
const TriangleMesh& mesh,
double safe_epsilon);
bool IsSegmentCollides(
const Vector3& P0,
const Vector3& P1,
const TriangleMesh& mesh);
}