Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.05.2015, 11:58
Новичок на форуме
Отправить личное сообщение для Lexedo Посмотреть профиль Найти все сообщения от Lexedo
 
Регистрация: 27.05.2015
Сообщений: 2

Three.js - проблема с наложением текстуры на пользовательскую геометрию
Здравствуйте. С наложением текстуры на стандартную геометрию проблем нет, например:

var texture = THREE.ImageUtils.loadTexture('wood.jpg');

var cube = new THREE.Mesh(
new THREE.CubeGeometry(100, 100, 100),
new THREE.MeshLambertMaterial( {map: texture} )
);
scene.add(cube);

Но не работает с геометрией, которую сам написал:

var mesh = new THREE.Mesh(
new lxRingGeometry(200, 100, 20, Math.PI, 10),
new THREE.MeshLambertMaterial( {map: texture} )
);
scene.add(mesh);


Код геометрии, на всякий случай:
function lxRingGeometry(r, width, height, angle, sectors) {
var step = angle / sectors;
var innerR = r - width;
var vertices = [];
for (var i=0; i<sectors+1; i++) {
vertices.push( new THREE.Vector3(innerR * Math.cos(i * step), height/2, innerR * Math.sin(i * step)) );
vertices.push( new THREE.Vector3(innerR * Math.cos(i * step), -height/2, innerR * Math.sin(i * step)) );
vertices.push( new THREE.Vector3(r * Math.cos(i * step), height/2, r * Math.sin(i * step)) );
vertices.push( new THREE.Vector3(r * Math.cos(i * step), -height/2, r * Math.sin(i * step)) );
}
var faces = [];
for (var i=0; i<sectors*4; i+=4) {
faces.push( new THREE.Face3(i, i+1, i+5) );
faces.push( new THREE.Face3(i, i+5, i+4) );
faces.push( new THREE.Face3(i+2, i+7, i+3) );
faces.push( new THREE.Face3(i+2, i+6, i+7) );
faces.push( new THREE.Face3(i, i+6, i+2) );
faces.push( new THREE.Face3(i, i+4, i+6) );
faces.push( new THREE.Face3(i+1, i+3, i+7) );
faces.push( new THREE.Face3(i+1, i+7, i+5) );
}
var geom = new THREE.Geometry();
geom.vertices = vertices;
geom.faces = faces;
geom.mergeVertices();
geom.computeFaceNormals();
return geom;
}
Ответить с цитированием
  #2 (permalink)  
Старый 11.06.2015, 09:12
Новичок на форуме
Отправить личное сообщение для Lexedo Посмотреть профиль Найти все сообщения от Lexedo
 
Регистрация: 27.05.2015
Сообщений: 2

задача решена.
Для сопоставления координат текстуры и геометрии есть еще один массив

var uvs = [];

// в uvs для каждого face добавляется массив из трех THREE.Vector2() для

// каждой координаты соответствующей face, x и y вектора - координаты текстуры

geom.faceVertexUvs[0] = uvs;
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
three.js: проблема с наложением текстуры SVARAI Элементы интерфейса 16 08.02.2015 12:25
three.js отрисовка текстуры только с анимацией Nirfik Библиотеки/Тулкиты/Фреймворки 1 09.01.2015 15:07