Я работаю над созданием системы 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++
Программы на C++. Форум разработчиков
-
Anonymous
1738155652
Anonymous
Я работаю над созданием системы Raycast для моей игры Voxel (например, Minecraft). Я пытался внедрить систему из OwgameEngine (https://github.com/cornflakes-code/owgameengine/blob/master/engine/geometry/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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79396800/issues-with-raycasting-it-only-works-at-some-direction[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия