2016-08-10 2 views
0

Я ищу, как WebGL/Three.js в целом устанавливает их высоты и ширину.Функция помощника, необходимая для поворота WebGL/Three.js Длина до Pixesl

Как и в каких системах чисел они используют для установки x, y, z.

Для примера, приведенного ниже, стрелка, указывающая прямо вверх, когда Y установлен в 1, но в пикселях он выглядит как 15 - 200 пикселей.

Есть ли вспомогательная функция, которую я могу написать, что я мог бы передать 100 пикселей, и он вернет мне правильное число для числа с плавающей точкой, которое будет использоваться с THREE.js.

Извините, если я не говорю в правильных выражениях, когда речь заходит о системе номеров, но это он только так, как я знаю, как ссылаться на нее в этот момент.

Единственное, что мне не хватает, это создание сцены. но остальное есть, изображение показывает, на что он похож.

Еще раз есть вспомогательная функция, с помощью которой я могу передавать пиксели и возвращать правильное число в float для использования с THREE.js?

Вот моя стрела:

//scene.remove(cube); scene.remove (группа);

// create a new one 
var sphere = createMesh(new THREE.SphereGeometry(5, 10, 10)); 
var cube = createMesh(new THREE.BoxGeometry(6, 6, 6)); 

sphere.position.set(controls.spherePosX, controls.spherePosY, controls.spherePosZ); 
cube.position.set(controls.cubePosX, controls.cubePosY, controls.cubePosZ); 
// add it to the scene. 

// also create a group, only used for rotating 
var group = new THREE.Group(); 
group.add(sphere); 
group.add(cube); 

scene.add(group); 
controls.positionBoundingBox(); 

var arrow = new THREE.ArrowHelper(new THREE.Vector3(0, 1, 0), 0, 10, 0x0000ff); 
scene.add(arrow); 

Here is the Arrow I am talking about

Я получаю эти JS объекты с пикселями затем записать на экран, но как я конвертировать пикселей вниз используемых единиц в 3D? How to Convert Pixels to 3D Units

+0

Я написал о пространстве экрана для преобразования мирового пространства и наоборот: http://stackoverflow.com/questions/35583808/3d-math-screen-space-to-world-space/35590403#35590403. Three.js также имеет встроенные функции. –

ответ

0

Длина в 3D не переводится на длины в 2D равномерно. Особенно, когда используется перспективная проекция.

Рассмотрим ваш пример: две стрелки одной и той же длины и одна и та же ориентация будут отображаться на разных 2D-длинах в зависимости от их расстояния от камеры. Стрелка, которая ближе к камере, будет отображаться дольше, чем стрелка дальше от камеры.

Чтобы поддерживать определенную длину пикселя для определенной стрелки, вам необходимо отрегулировать трехмерную длину стрелки каждый раз, когда изменяются некоторые параметры камеры (например, положение, ориентация, FOV). А также каждый раз, когда изменяется положение или ориентация стрелки. Это возможно (см. Комментарий @ WacławJasper), но довольно сложно.

Если бы вы могли объяснить большую картину того, чего вы хотите достичь, может возникнуть более простое решение вашей проблемы.

+0

Я превращаю 2D-проект в 3D, и я полностью понимаю, что вы говорите о камере, это имеет смысл. Когда пользователь поворачивается, чтобы добавить еще одну возвышенность, первая из них должна быть в Перспективном представлении, Будущее Будущее. В моем решении у меня есть доступ к каждому объекту по мере его изменения. Итак, если пользователь создает высоту 300 пикселей в высоту и 200 в ширину, как мне преобразовать это в 3D-единицы? Я обновил «Мое первое сообщение», чтобы показать высоту 2d. Осмотрите все, кроме прямоугольников. Спасибо большое! –

+0

Если я правильно понял вас, ваши пользователи задают некоторые длины в 2D, например, например, высоту двери в вашем примере. И затем вы хотите преобразовать эту 2D-высоту в 3D-высоту. Я прав? В этом случае преобразование полностью произвольно, и это ваш выбор. Вы можете, например, скажем, что 10 пикселей в 2D-экране = 1.0 в 3D-мире. – Matey

+0

Большое спасибо –

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