Вчера я пытался нарисовать математическую функцию в 3D [F (x, y)]. Как я это сделал? Я вычислил некоторые точки (x, y, z) в пространстве и нарисовал там белую точку.Как создать поверхность NURBS с контрольными точками NxN в Three.js
Первая проблема: Когда я двигаю сценарий (используя 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);
Результат:
Вопрос: Знаете ли вы, если есть способ, чтобы сказать что-то вроде: «Эй NURBS поверхности, вы должны принять этот массив 50х50/матрица векторов и рисуем его! "?
Вторая проблема: Как насчет тех точек, где функция не существует?
Вопрос: Можно ли нарисовать вид плоскости в функции математической функции?