Я делаю опыт работы с трубкой, используя три. У меня есть проблема, в которой 10% поездов не следуют вращению, как и ожидалось. Я попытался использовать Lookat () , однако это не сработало, поэтому создал эту пользовательскую функцию, см. Сплык ниже. Функция принимает три параметра, где из и до являются мировыми позициями от FromStation и tostation . Параметр TOL является толерантностью к точности, чтобы закрепить его в определенном направлении.
фрагмент кода:
const getDirection = (from, to) => {
const x = from.x - to.x
const y = from.y - to.y
const z = from.z - to.z
const total = (x + y + z) / 3
const dir = total < 0 ? -1 : 1
return dir
}
const getNormVal = (value, inv, tol) => {
const inversion = inv ? -1 : 1
if (value < tol && value > -tol) return 0
if (value < 0) return -1 * inversion
if (value > 0) return 1 * inversion
}
const getRotation = (from, to, tol) => {
const dir = new THREE.Vector3()
dir.x = getNormVal(from.x - to.x, false, tol)
dir.y = getNormVal(from.y - to.y, false, tol)
dir.z = getNormVal(from.z - to.z, false, tol)
let rotation = 0
if (dir.x === 1) rotation += 3.14
if (dir.z === -1 && dir.x === 0) rotation += 1.57
if (dir.z === 1 && dir.x === 0) rotation += -1.57
if (dir.x === 1 && dir.z !== 0) rotation += -0.785 * dir.z
if (dir.x === -1 && dir.z !== 0) rotation += 0.785 * dir.z
return rotation
}
< /code>
Изображение:
Изображение ошибки вращения трубки < /p>
Подробнее здесь: https://stackoverflow.com/questions/796 ... in-threejs
Объекты не вращаются последовательно в трех ⇐ Javascript
Форум по Javascript
-
Anonymous
1752056959
Anonymous
Я делаю опыт работы с трубкой, используя три. У меня есть проблема, в которой 10% поездов не следуют вращению, как и ожидалось. Я попытался использовать Lookat () , однако это не сработало, поэтому создал эту пользовательскую функцию, см. Сплык ниже. Функция принимает три параметра, где из и до являются мировыми позициями от FromStation и tostation . Параметр TOL является толерантностью к точности, чтобы закрепить его в определенном направлении.
фрагмент кода:
const getDirection = (from, to) => {
const x = from.x - to.x
const y = from.y - to.y
const z = from.z - to.z
const total = (x + y + z) / 3
const dir = total < 0 ? -1 : 1
return dir
}
const getNormVal = (value, inv, tol) => {
const inversion = inv ? -1 : 1
if (value < tol && value > -tol) return 0
if (value < 0) return -1 * inversion
if (value > 0) return 1 * inversion
}
const getRotation = (from, to, tol) => {
const dir = new THREE.Vector3()
dir.x = getNormVal(from.x - to.x, false, tol)
dir.y = getNormVal(from.y - to.y, false, tol)
dir.z = getNormVal(from.z - to.z, false, tol)
let rotation = 0
if (dir.x === 1) rotation += 3.14
if (dir.z === -1 && dir.x === 0) rotation += 1.57
if (dir.z === 1 && dir.x === 0) rotation += -1.57
if (dir.x === 1 && dir.z !== 0) rotation += -0.785 * dir.z
if (dir.x === -1 && dir.z !== 0) rotation += 0.785 * dir.z
return rotation
}
< /code>
Изображение:
Изображение ошибки вращения трубки < /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/79695471/objects-are-not-rotating-consistently-in-threejs[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия