Проблемы с Raycasting, это работает только в некотором направлении [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблемы с Raycasting, это работает только в некотором направлении [закрыто]

Сообщение Anonymous »

Я работаю над созданием системы 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»