2013-02-12 3 views
3

В настоящее время я работаю над проектом, который включает в себя работу с очень большими и очень малыми расстояниями с помощью Three.jsThree.js Сцена Насильно встряхивании

Я имею вопрос на меньшей стороне сцены, где " сцена "начнет бушевать.

Сначала я предположил, что это проблема с Z-буфером, поэтому я написал небольшой фрагмент, который изменяет свойства камеры ближнего и дальнего действия каждый раз, когда вводится новая область. Это помогло решить проблемы «мерцания», которые я имел раньше, однако сцена все еще резко движется на небольших расстояниях.

Одним из условий, при которых это происходит следующим образом

camera.near = .0133333 
camera.far = 12 
positionToObjects = 6 

это должно означать, что разрешение г составляет около: 0,0001, который я чувствую, как должно быть достаточно хорошим, но тряска, что происходит, МНОГО больше, чем это.

Объекты сами колеблются везде от -200000 - 200000 в «глобальной» позиции, однако сцены сами не меняют положение

Другое дело, что я думал, что это может быть это управление камерой у меня есть используют которые (abbrviated) следующим образом

if(mouseIsDown == true){ 
    if(this.movementSpeed < this.maxSpeed){ 
     this.movementSpeed += this.acceleration 
    }else{ 
     this.movementSpeed = this.maxSpeed 
    } 

}else{ 
    if(this.movementSpeed > this.minSpeed){ 
     this.movementSpeed = this.movementSpeed/this.deceleration 
    }else{ 
     this.movementSpeed = this.minSpeed 
    } 

} 

где this.minSpeed ​​= 0, и this.movementSpeed ​​используется для перемещения камеры так:

var actualSpeed = delta * this.movementSpeed; 
this.object.translateZ(-actualSpeed * forwardOrAuto); 
this.object.translateX(actualSpeed * sideSpeed); 
this.object.translateY(actualSpeed * upSpeed); 

Однако, даже если камера не движется (до 8 знаков после запятой), сцена все еще сильно сотрясается

Есть ли причины, по которым я не могу думать об этом, чтобы сделать сцену?

Пожалуйста, дайте мне знать, если есть дополнительная информация, которую я могу/должен предоставить, и заблаговременно за ваше время.

+1

Я думаю, что это ошибка округления, так как вы используете так мало значащих цифры для «близкой» сцены .. –

+0

для камеры, даже 10^-8 недостаточно точна? – Cabbibo

+0

Кроме того, есть ли способ добавить более значимые цифры? – Cabbibo

ответ

1

Могу ли я предложить использовать значения для вблизи и далеко которые не так уж и малы? (Специально для почти)

Рядом используется в качестве разделителя внутри, так что если вы используете небольшое количество (< 1) вы можете потерять точность и закончить с этими насильственными движениями, как диапазон значений, которые вы» re move around намного меньше, чем если бы вы использовали более близкие и дальние значения.

Вот почему вы найдете значение по умолчанию для около составляет 0,1: https://github.com/mrdoob/three.js/blob/r55/src/cameras/PerspectiveCamera.js#L13

... хотя лично я всегда использую 1 для близких.

Кроме того, онлайн пример всегда хорошо, когда с просьбой о помощи в визуальных вопросах :-)

+0

Hey Sole, Спасибо за предложение, его я начал предпринимать шаги. Его вид прохладно, чтобы увидеть, как я дошел до конца юниверса webGL. Что касается визуальных примеров, я не публиковал их, потому что пример: http://cabbibo.com/uOS/ - скорее «лабиринт», чем что-либо еще, и его трудно «найти» области, которые встряхивают больше всего. (Если вы любопытная Вселенная Звука -> Европа -> Британия -> hyperdub -> все) - одна из самых шатких, но удачи в том, что один :) – Cabbibo

+1

Ха-ха! Ты парень позади uOS! :-D Смешно! Я нахожу вашу Вселенную довольно загадочной. Это «достижение конца стиха WebGL» звучит одинаково загадочно, но я думаю, что если вы останетесь в пределах чисел Float, вы сможете ориентироваться в нем без тряски. Может быть. – sole

+0

всегда ответ может быть! Спасибо за добрые слова о вселенной, хотя, это было WAYYY слишком много работы, так что слышать что-то хорошее об этом заставляет чувствовать, что это того стоит! – Cabbibo

Смежные вопросы