2017-02-21 2 views
1

Я добавил сферу и planegeometry на сцену, я использовал X и Y. поместить planegeometry в сцену, некоторые planegeometry накладываются друг на друг с Афоризмом мне нужно обнаружить наложенный planegeometry и поместите его в новое положение, чтобы избежать перекрытия этих плоскостей, не меняя значения X12 и X121 . может кто-то, пожалуйста, помогите мне, как решить эту проблему. Я только что добавил этот код в jsfiddle Я точно не знаю, как отображать результат в jsfiddle. Я добавил изображение результата, которое может дать идея, в чем проблема. https://jsfiddle.net/lakers1234/ek7fcx9L/imageИзбегайте перекрывание planegeometry в Threejs

window.onload = createsphere(); 
function createsphere() 
{ 
var controls,scene,camera,renderer; 

function init() 
{ 

var spriteResponse = []; 
spriteResponse[0] = {ID:1, x: 0, y: 0, name:'Hello'}; 
spriteResponse[1] = {ID:2, x: 0, y: 0.01, name:'Hello world'}; 
spriteResponse[2] = {ID:3, x: 0, y: 0.5, name:'los Angles united states of america'}; 
spriteResponse[3] = {ID:4, x: 0.5, y: 0, name:'Canada'}; 
spriteResponse[4] = {ID:5, x: 0.25, y: 0.5, name:'London united kingdom' }; 

scene = new THREE.Scene(); 
camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); 
//camera.position.y = 1; 
camera.position.z = 1 ;    
var width = window.innerWidth; 
var height = window.innerHeight; 
renderer = new THREE.WebGLRenderer({antialias:true}); 
renderer.setSize(width, height); 
document.body.appendChild(renderer.domElement);  

/* ------------------------ создания геометрии сферы ---------- -------------------- */

var radius = 2.5; 
var spheregeometry = new THREE.SphereGeometry(radius, 20, 20, 0, -6.283, 1, 1); 
var texture = THREE.ImageUtils.loadTexture ('rbi00000083.jpg'); 
texture.minFilter = THREE.NearestFilter; 
//var spherematerial = new THREE.MeshBasicMaterial({map: texture}); 
var spherematerial = new THREE.MeshBasicMaterial({color: '#A9A9A9'}); 
var sphere = new THREE.Mesh(spheregeometry, spherematerial); 
scene.add(sphere); 
scene.add(camera); 
scene.autoUpdate = true;     
controls = new THREE.OrbitControls(camera, renderer.domElement); 
controls.minPolarAngle = Math.PI/4; 
controls.maxPolarAngle = 3*Math.PI/4; 




} 
+0

Вы можете изменить значения x и y из массива spriteResponse? так как вы должны дать 0,1 разницу в значении y, чтобы избежать перекрытия – spankajd

+0

@spankajd. Я не хочу напрямую изменять значение y в массиве spriteResponse. Сначала мне нужно определить, какая плоскость пересекается, а затем добавить новое значение к предыдущему значению, например y + newvalue. – lakers1234

+0

@ lakers1234 Мне немного любопытно, почему бы вам не использовать 'THREE.Sprite()' вместо 'THREE.Plane()'? – prisoner849

ответ

0

Основано на this SO answer.

Когда вы знаете кватернион своей камеры, вы можете применить его к своим самолетам.

Положите самолеты в массив:

var planes = []; 

, а затем в цикле анимации мы будем делать это:

planes.forEach(function(p){ 
    p.quaternion.copy(camera.quaternion); 
}) 

jsfiddle пример.

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