Я работаю над созданием системы Raycast для моей игры Voxel (например, Minecraft). Я пытался внедрить систему из OwgameEngine (https://github.com/cornflakes-code/owga ... /owray.cpp), но я столкнулся с некоторыми проблемами. Raycast регистрирует движение только в определенных областях, поэтому я попытался более точной настройки. Однако по какой -то странной причине он обнаруживает только коллайдеры на карте в диапазоне: < /p>
x: ~ -8 до 8
y: ~ 0 до 4
Z: ~ -24 до -12 < /p>
Реализация кода: < /p>
glm::vec3 Raycast::findNormal(float distance, float t1, float t2, float t3, float t4, float t5, float t6) {
if (glm::epsilonEqual(distance, t1, epsilon))
return glm::vec3(1, 0, 0);
else if (glm::epsilonEqual(distance, t2, epsilon))
return glm::vec3(-1, 0, 0);
else if (glm::epsilonEqual(distance, t3, epsilon))
return glm::vec3(0, 1, 0);
else if (glm::epsilonEqual(distance, t4, epsilon))
return glm::vec3(0, -1, 0);
else if (glm::epsilonEqual(distance, t5, epsilon))
return glm::vec3(0, 0, -1);
else if (glm::epsilonEqual(distance, t6, epsilon))
return glm::vec3(0, 0, 1);
else
return glm::vec3(0, 0, 0);
}
bool Raycast::internalIntersects(const Colliders::Collider& collider, glm::vec3& normal, float& distance) const {
glm::vec3 minPoint = collider.box.minPoint();
glm::vec3 maxPoint = collider.box.maxPoint();
if (origin.x >= minPoint.x && origin.x = minPoint.y && origin.y = minPoint.z && origin.z tmax)
return false;
distance = tmin;
normal = findNormal(distance, t1, t2, t3, t4, t5, t6);
return true;
}
bool Raycast::intersects(const Colliders::Collider& collider, glm::vec3& normal, float& distance, const float& maxRayDistance) const {
if (internalIntersects(collider, normal, distance))
return true;
else if (externalIntersects(collider, normal, distance))
return true;
return false;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -direction
Проблемы с Raycasting, это работает только в некотором направлении [закрыто] ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Мои виджеты kivy тесно связаны, и мне нужно, чтобы они находились на некотором расстоянии
Anonymous » » в форуме Python - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-