2016-02-20 10 views
1

Вчера я пытался нарисовать математическую функцию в 3D [F (x, y)]. Как я это сделал? Я вычислил некоторые точки (x, y, z) в пространстве и нарисовал там белую точку.Как создать поверхность NURBS с контрольными точками NxN в Three.js

Вот пример: enter image description here

Первая проблема: Когда я двигаю сценарий (используя Orbital Control), производительность тоже плохо! Итак, я искал решение, и я понял, что поверхности NURBS могут быть моим решением. Но проблема в том, что я не могу найти способ определить множество контрольных точек. Я думал создать поверхность NURBS с 50 x 50 точками управления (как предыдущее изображение), но я могу создать только поверхность NURB с 3 x 4 точками. Вот код:

var nsControlPoints = [ 
    [ 
     new THREE.Vector4 (-150, 0, 150, 1), 
     new THREE.Vector4 (150, 0, 150, 1), 
     new THREE.Vector4 (150, 0, -150, 1), 
     new THREE.Vector4 (-150, 0, -150, 1), 
     new THREE.Vector4 (-150, 0, 150, 1) 
    ], 
    [ 
     new THREE.Vector4 (-50, 50, 50, 1), 
     new THREE.Vector4 (50, 50, 50, 1), 
     new THREE.Vector4 (50, 50, -50, 1), 
     new THREE.Vector4 (-50, 50, -50, 1), 
     new THREE.Vector4 (-50, 50, 50, 1) 
    ], 
    [ 
     new THREE.Vector4 (-100, -50, 100, 1), 
     new THREE.Vector4 (100, -50, 100, 1), 
     new THREE.Vector4 (100, -50, -100, 1), 
     new THREE.Vector4 (-100, -50, -100, 1), 
     new THREE.Vector4 (-100, -50, 100, 1) 
    ], 
]; 


var degree1 = 2; 
var degree2 = 3; 
var knots1 = [0, 0, 0, 1, 1, 1]; 
var knots2 = [0, 0, 0, 0, 1, 1, 1, 1]; 
var nurbsSurface = new THREE.NURBSSurface(degree1, degree2, knots1, knots2, nsControlPoints); 

var map = new THREE.TextureLoader().load('styles/grid.jpg'); 
map.wrapS = map.wrapT = THREE.RepeatWrapping; 
map.anisotropy = 16; 

getSurfacePoint = function(u, v) { 
    return nurbsSurface.getPoint(u, v); 
}; 

var geometry = new THREE.ParametricGeometry(getSurfacePoint, 20, 20); 
var material = new THREE.MeshLambertMaterial({ map: map, side: THREE.DoubleSide }); 
var object = new THREE.Mesh(geometry, material); 
object.position.set(- 200, 100, 0); 
object.scale.multiplyScalar(1); 
group.add(object); 

Результат:

enter image description here

Вопрос: Знаете ли вы, если есть способ, чтобы сказать что-то вроде: «Эй NURBS поверхности, вы должны принять этот массив 50х50/матрица векторов и рисуем его! "?

Вторая проблема: Как насчет тех точек, где функция не существует?

Вопрос: Можно ли нарисовать вид плоскости в функции математической функции?

ответ

0

Абстракция выше THREE, но verburbs - это библиотека с открытым исходным кодом, созданная для работы с поверхностями NURB. Вот скриншот из одного из их примеров, подробно описывающих, о чем вы говорите. У меня нет привязки к кодовой базе. enter image description here

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