Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2014, 17:21
Кандидат Javascript-наук
Отправить личное сообщение для avrudoi Посмотреть профиль Найти все сообщения от avrudoi
 
Регистрация: 08.01.2014
Сообщений: 133

3D текст для сгрупированных фигур
Подскажите как добавить в группу объектов, 3D текс . Допустим у нас есть 3 3D прямоугольника ,связанные в один объект, этот объект вращается по своей оси, и нам нужно добавить несколько текстовых строк на этот объект, по нажатию на которые, они будут менять цвет. Подскажите как добавить эти строки ,в 3D объект что бы их можно было, выбирать мышкой.
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2014, 20:01
Кандидат Javascript-наук
Отправить личное сообщение для avrudoi Посмотреть профиль Найти все сообщения от avrudoi
 
Регистрация: 08.01.2014
Сообщений: 133

var theText = "Hello three.js! ";

var hash = document.location.hash.substr( 1 );

if ( hash.length !== 0 ) {

theText = hash;

}
подскажите что это означает, вообщем понятно если длина подстроки неравена 0 то тексту присвоть что как ненятно.

Последний раз редактировалось avrudoi, 19.01.2014 в 20:53.
Ответить с цитированием
  #3 (permalink)  
Старый 19.01.2014, 21:45
Профессор
Отправить личное сообщение для alexan0308 Посмотреть профиль Найти все сообщения от alexan0308
 
Регистрация: 11.04.2011
Сообщений: 207

Сообщение от avrudoi Посмотреть сообщение
Подскажите как добавить в группу объектов, 3D текс . Допустим у нас есть 3 3D прямоугольника ,связанные в один объект, этот объект вращается по своей оси, и нам нужно добавить несколько текстовых строк на этот объект, по нажатию на которые, они будут менять цвет. Подскажите как добавить эти строки ,в 3D объект что бы их можно было, выбирать мышкой.
Грубое решение - взять и натянуть текстуру с текстом на прямоугольники, и менять на лету. Может и есть кликабельный текст, но я не видел

Сообщение от avrudoi Посмотреть сообщение
var theText = "Hello three.js! ";

var hash = document.location.hash.substr( 1 );

if ( hash.length !== 0 ) {

theText = hash;

}
подскажите что это означает, вообщем понятно если длина подстроки неравена 0 то тексту присвоть что как ненятно.
http://habrahabr.ru/post/138314/
Ответить с цитированием
  #4 (permalink)  
Старый 19.01.2014, 23:23
Кандидат Javascript-наук
Отправить личное сообщение для avrudoi Посмотреть профиль Найти все сообщения от avrudoi
 
Регистрация: 08.01.2014
Сообщений: 133

а что делать с такой ошибкой
Изображения:
Тип файла: jpg Безымянный.jpg (42.9 Кб, 7 просмотров)
Ответить с цитированием
  #5 (permalink)  
Старый 20.01.2014, 00:23
Кандидат Javascript-наук
Отправить личное сообщение для avrudoi Посмотреть профиль Найти все сообщения от avrudoi
 
Регистрация: 08.01.2014
Сообщений: 133

<!DOCTYPE html>
<html lang="en">
<head>
<title>three.js canvas - geometry - cube</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<style>
body {
font-family: Monospace;
background-color: #f0f0f0;
margin: 0px;
overflow: hidden;
}
</style>
</head>
<body>

<script src="../build/three.min.js"></script>

<script src="js/libs/stats.min.js"></script>

<script>

var container, stats;// статус и контейнер

var camera, scene, renderer;// камера сцена вращение

var cube1, cube2, cube3, plane;// кубы и план камеры

var targetRotation = 0;// движение при нажатии
var targetRotationOnMouseDown = 0;//нажатие при двжении

var mouseX = 0, mouseX1=0;
var mouseXOnMouseDown = 0;

var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;

var phi=0, R=60;
var megalit;
var projector, particleMaterial;
var menu_text1, menu_text2, menu_text3, menu_text4, menu_text5, menu_text6; //надписи текст
init();
animate();

function init() {

container = document.createElement( 'div' );
document.body.appendChild( container );

var info = document.createElement( 'div' );
info.style.position = 'absolute';
info.style.top = '10px';
info.style.width = '100%';
info.style.textAlign = 'center';
info.innerHTML = 'Drag to spin the cube';
container.appendChild( info );

camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );
camera.position.y = 150;
camera.position.z = 500;

scene = new THREE.Scene();


var menu_podarki = "Подарки";
//var hash = document.location.hash.substr( 1 );

//if ( hash.length !== 0 ) {

// menu_podarki = hash;

//}

menu_text1 = new THREE.TextGeometry( menu_podarki, {

size: 80,
height: 20,
curveSegments: 2,
font: "helvetiker"

});


menu_text1.computeBoundingBox();
var centerOffset = -0.5 * ( menu_text1.boundingBox.max.x - menu_text1.boundingBox.min.x );

var textMaterial = new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, overdraw: true } );
var text1 = new THREE.Mesh( menu_text1, textMaterial );
text1.rotation.y = 120 * Math.PI/180;
text1.position.set = (-50* Math.cos(text1.rotation.y), 0, 50* Math.sin(text1.rotation.y));


//menu_text1.position.y = 100;
//menu_text1.position.z = 0;

//group = new THREE.Object3D();
//group.add( text1 );

//scene.add( group );


// Cube
var geometry = new THREE.CubeGeometry( 100, 300, 5 );

var material = new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, opacity: 0.5, transparent: true });

cube1 = new THREE.Mesh( geometry, material );
cube1.rotation.y = 120 * Math.PI/180;
cube1.position.set(-50* Math.cos(cube1.rotation.y), 0, 50* Math.sin(cube1.rotation.y));

var material = new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, opacity: 0.5, transparent: true });

cube2 = new THREE.Mesh( geometry, material );
cube2.rotation.y = 240 * Math.PI/180;
cube2.position.set(-50* Math.cos(cube2.rotation.y), 0, 50* Math.sin(cube2.rotation.y));

var material = new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, opacity: 0.5, transparent: true });

cube3 = new THREE.Mesh( geometry, material );
cube3.rotation.y = 360 * Math.PI/180;
cube3.position.set(-50* Math.cos(cube3.rotation.y), 0, 50* Math.sin(cube3.rotation.y));

// для прорисовки
megalit = new THREE.Object3D();
megalit.add(cube1);
megalit.add(cube2);
megalit.add(cube3);
megalit.add(text1);
// добавление текста
scene.add( megalit );
// для выбора
projector = new THREE.Projector(), objects = [];
objects.push(cube1);
objects.push(cube2);
objects.push(cube3);
objects.push(text1);
// Plane

var geometry = new THREE.PlaneGeometry( 200, 200 );
geometry.applyMatrix( new THREE.Matrix4().makeRotationX( - Math.PI / 2 ) );

var material = new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, opacity: 0.5, transparent: true } );

//plane = new THREE.Mesh( geometry, material );
//scene.add( plane );

renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );

container.appendChild( renderer.domElement );

stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
container.appendChild( stats.domElement );

document.addEventListener( 'mousedown', onDocumentMouseDown, false );
document.addEventListener( 'touchstart', onDocumentTouchStart, false );
document.addEventListener( 'touchmove', onDocumentTouchMove, false );

//

window.addEventListener( 'resize', onWindowResize, false );

var PI2 = Math.PI * 2;
particleMaterial = new THREE.SpriteCanvasMaterial( {

color: 0x000000,
program: function ( context ) {

context.beginPath();
context.arc( 0, 0, 0.5, 0, PI2, true );
context.fill();

}
});
}

function onWindowResize() {

windowHalfX = window.innerWidth / 2;
windowHalfY = window.innerHeight / 2;

camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();

renderer.setSize( window.innerWidth, window.innerHeight );

}

//

function onDocumentMouseDown( event ) {

event.preventDefault();

document.addEventListener( 'mousemove', onDocumentMouseMove, false );
document.addEventListener( 'mouseup', onDocumentMouseUp, false );
document.addEventListener( 'mouseout', onDocumentMouseOut, false );

mouseXOnMouseDown = event.clientX - windowHalfX;
targetRotationOnMouseDown = targetRotation;

//event.preventDefault();// установка примитивов по умолчания

var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );// прямой вектор
projector.unprojectVector( vector, camera );//прожектор камеры

var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );//Класс Raycaster создан на основе класса Ray и обеспечивает обнаружение пересечения 3D-объектов.

var intersects = raycaster.intersectObjects( objects );//объект проверямый на пересечение с вектором

if ( intersects.length > 0 ) {//количество объектов

intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );//цвет материала объекта

//var particle = new THREE.Sprite( particleMaterial );//создание точки
//particle.position = intersects[ 0 ].point;// присвоение координат точке
//particle.scale.x = particle.scale.y = 16;//диаметр точки
//scene.add( particle );//добавление на сцену точки

}

}

function onDocumentMouseMove( event ) {

mouseX = event.clientX - windowHalfX;

if(mouseX>mouseX1){
phi=phi+0.05
}
else{
phi=phi-0.05;
}
mouseX1=mouseX;

targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02;
megalit.rotation.y = phi;



}

function onDocumentMouseUp( event ) {

document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
document.removeEventListener( 'mouseout', onDocumentMouseOut, false );

}

function onDocumentMouseOut( event ) {

document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
document.removeEventListener( 'mouseout', onDocumentMouseOut, false );

}

function onDocumentTouchStart( event ) {

if ( event.touches.length === 1 ) {

event.preventDefault();

mouseXOnMouseDown = event.touches[ 0 ].pageX - windowHalfX;
targetRotationOnMouseDown = targetRotation;

}

}

function onDocumentTouchMove( event ) {

if ( event.touches.length === 1 ) {

event.preventDefault();

mouseX = event.touches[ 0 ].pageX - windowHalfX;
targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.05;

}

}

//

function animate() {

requestAnimationFrame( animate );

render();
stats.update();

}

function render() {


renderer.render( scene, camera );

}

</script>

</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 20.01.2014, 06:48
Профессор
Отправить личное сообщение для alexan0308 Посмотреть профиль Найти все сообщения от alexan0308
 
Регистрация: 11.04.2011
Сообщений: 207

Ты библиотеки для текста не подцепил. Скачай их, откуда взял пример, и дай на них ссылки:

<script src="fonts/helvetiker_bold.typeface.js"></script>
<script src="fonts/helvetiker_regular.typeface.js"></script>


[OFF]а чье там лицо отражается? Твое? Я бы тебе не 30, а все 50 дал бы[/OFF]

Последний раз редактировалось alexan0308, 20.01.2014 в 10:44.
Ответить с цитированием
  #7 (permalink)  
Старый 20.01.2014, 14:10
Кандидат Javascript-наук
Отправить личное сообщение для avrudoi Посмотреть профиль Найти все сообщения от avrudoi
 
Регистрация: 08.01.2014
Сообщений: 133

подскажите шрифт для русского текста
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
drag-and-drop и position:fixed dotwatt Элементы интерфейса 5 05.12.2012 08:44
IDE для Java Script constant Библиотеки/Тулкиты/Фреймворки 0 27.09.2012 09:31
Вопрос: И опять про offsetLeft... sigurd Общие вопросы Javascript 11 04.10.2010 14:06