This commit is contained in:
aozhiwei 2023-03-31 10:33:57 +08:00
parent fb338ea6d6
commit a4c462dc98
2 changed files with 32 additions and 31 deletions

View File

@ -165,37 +165,6 @@ void MapService::AddTriangle(mc::Triangle* tri)
glm::vec3 a[3 * 2]; glm::vec3 a[3 * 2];
a[0] = glm::vec3(0.0f, 0.0f, 0.0f); a[0] = glm::vec3(0.0f, 0.0f, 0.0f);
glm::vec2 bary_position;
float distance;
glm::vec3 v1;
glm::vec3 v2;
glm::vec3 orig = v1;
glm::vec3 dir = v2 - v1;
GlmHelper::Normalize(dir);
float max_distance = GlmHelper::Norm(v2 - v1);
for (int i = 0; i < 2; ++i){
bool hit = glm::intersectRayTriangle
(orig,
dir,
a[i * 3 + 0],
a[i * 3 + 1],
a[i * 3 + 2],
bary_position,
distance
);
if (hit && distance > 0.00001f) {
if (distance < max_distance + 1) {
found = true;
int grid_id = x + y * map_width_;
list_head* head = &map_cells_[grid_id];
CellNode* node = new CellNode();
node->tri = tri;
list_add_tail(&node->entry, head);
break;
}
}
}
} }
#if 0 #if 0
if (dtOverlapPolyPoly2D(tri_verts, 3, aabb_verts, 4)) { if (dtOverlapPolyPoly2D(tri_verts, 3, aabb_verts, 4)) {
@ -234,3 +203,34 @@ void MapService::GetGridList(int grid_id, list_head* grid_list[9], int& grid_cou
} }
} }
} }
bool MapService::TriIntersect(const glm::vec3 t1[3], const glm::vec3 t2[3])
{
glm::vec2 bary_position;
float distance;
for (int v = 0; v < 2; ++v) {
glm::vec3 v1;
glm::vec3 v2;
glm::vec3 orig = v1;
glm::vec3 dir = v2 - v1;
GlmHelper::Normalize(dir);
float max_distance = GlmHelper::Norm(v2 - v1);
for (int i = 0; i < 2; ++i){
bool hit = glm::intersectRayTriangle
(orig,
dir,
t2[0],
t2[1],
t2[2],
bary_position,
distance
);
if (hit && distance > 0.00001f) {
if (distance < max_distance + 1) {
return true;
}
}
}
}
return false;
}

View File

@ -27,6 +27,7 @@ class MapService
void AddTriangle(mc::Triangle* tri); void AddTriangle(mc::Triangle* tri);
int GetGridId(float world_x, float world_y); int GetGridId(float world_x, float world_y);
void GetGridList(int grid_id, list_head* grid_list[9], int& grid_count); void GetGridList(int grid_id, list_head* grid_list[9], int& grid_count);
bool TriIntersect(const glm::vec3 t1[3], const glm::vec3 t2[3]);
private: private:
list_head* map_cells_ = nullptr; list_head* map_cells_ = nullptr;