Javascript 如何在Three.js中为网格的某些部分添加纹理

Javascript 如何在Three.js中为网格的某些部分添加纹理,javascript,three.js,Javascript,Three.js,我想在网格的某个部分(比如球体)上放置一个纹理(方形RGBA数组)。如何在Three.js中实现这一点?谢谢你的帮助 这是一个坏消息。例如,我想把纹理放在0~10E,-5S~5N区域。我应该使用glsl来完成这样的任务吗?看来Three.js没有提供这样的功能 const width = 400, height = 300, radians = Math.PI / 180 // Create a sample data. var nx = 360, ny = 180 var data = ne

我想在网格的某个部分(比如球体)上放置一个纹理(方形RGBA数组)。如何在Three.js中实现这一点?谢谢你的帮助

这是一个坏消息。例如,我想把纹理放在0~10E,-5S~5N区域。我应该使用
glsl
来完成这样的任务吗?看来Three.js没有提供这样的功能

const width = 400, height = 300, radians = Math.PI / 180

// Create a sample data.
var nx = 360, ny = 180
var data = new Uint8Array(4 * nx * ny)
for (var i = 0; i < nx * ny; i += 4) {
  data[i+0] = 255
  data[i+1] = 0
  data[i+2] = 0
  data[i+3] = 122
}

var scene, camera, renderer, light, geometry, texture, material, sphere

scene = new THREE.Scene()
camera = new THREE.OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, 0.1, 10000)
camera.position.z = 500

renderer = new THREE.WebGLRenderer({ antialias: true })
renderer.setClearColor('white', 1)
renderer.setSize(width, height)
document.body.appendChild(renderer.domElement)

light = new THREE.HemisphereLight('#fff', '#666', 1.5)
light.position.set(0, 500, 0)
scene.add(light)

geometry = new THREE.SphereGeometry(120, 20, 20, 0, 90 * radians, 60 * radians, 60 * radians)
texture = new THREE.DataTexture(data, nx, ny, THREE.RGBAFormat)
texture.magFilter = THREE.LinearFilter
texture.needsUpdate = true
material = new THREE.MeshBasicMaterial({ map: texture, wireframe: true })
sphere = new THREE.Mesh(geometry, material)
scene.add(sphere)

function render () {
  requestAnimationFrame(render)
  sphere.rotation.y += 0.01
  renderer.render(scene, camera)
}
render(
常数宽度=400,高度=300,弧度=Math.PI/180
//创建一个示例数据。
变量nx=360,ny=180
var数据=新的UINT8阵列(4*nx*ny)
对于(变量i=0;i

)

你能发布一些代码吗?这可以用许多不同的方法来完成。@Hesha我添加了一个示例代码。谢谢这是你想要的吗@对不起,看起来和原来的一样。我想要的是纹理覆盖了球体的一部分。这是你想要的吗?