Three JS NURBSSurface: как сделать текстуру равномерно распределенной? - PullRequest
0 голосов
/ 25 февраля 2019

Я использовал NURBSSurface в three.js, чтобы нарисовать поверхность и нанести на карту поверхность с рисунком.Я обнаружил, что текстуры распределены неравномерно.

Я не знаю, что делать, чтобы сделать текстуру равномерно распределенной.Кто-нибудь знает что делать?большое спасибо!

// NURBS surface 2
var nsControlPoints = [
  [new THREE.Vector4(-200, -200, 100, 1), new THREE.Vector4(-200, -100, -200, 1), new THREE.Vector4(-200, 100, 250, 1), new THREE.Vector4(-200, 200, -100, 1)],
  [new THREE.Vector4(0, -200, 0, 1), new THREE.Vector4(0, -100, -100, 5), new THREE.Vector4(0, 100, 150, 5), new THREE.Vector4(0, 200, 0, 1)],
  [new THREE.Vector4(200, -200, -100, 1), new THREE.Vector4(200, -100, 200, 1), new THREE.Vector4(200, 100, -250, 1), new THREE.Vector4(200, 200, 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('textures/UV_Grid_Sm.jpg');
map.wrapS = map.wrapT = THREE.RepeatWrapping;
map.anisotropy = 16;

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

var geometry = new THREE.ParametricBufferGeometry(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);
...