1
This commit is contained in:
parent
fb338ea6d6
commit
a4c462dc98
@ -165,37 +165,6 @@ void MapService::AddTriangle(mc::Triangle* tri)
|
||||
glm::vec3 a[3 * 2];
|
||||
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 (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;
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ class MapService
|
||||
void AddTriangle(mc::Triangle* tri);
|
||||
int GetGridId(float world_x, float world_y);
|
||||
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:
|
||||
list_head* map_cells_ = nullptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user