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];
|
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;
|
||||||
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user