Я новичок в Three и недавно создал полнофункциональное приложение реагирования, которое использует Three.js для рендеринга модели с видео-текстурой.Я получаю несколько предупреждений и думаю, что это заставляет приложение работать очень медленно.Предупреждения выглядят следующим образом:
// появляется один раз
INVALID_VALUE: texImage2D: нет видео
// появляется не менее 15 раз
[.Offscreen-For-WebGL-0x7fa724847800] RENDER WARNING: текстура, привязанная к единице текстуры 0, не может быть воспроизведена.Это может быть не power-of-2 и несовместимая фильтрация текстур.
Я думаю, что соответствующий код:
const video = document.createElement('video')
video.setAttribute('crossorigin', 'anonymous')
video.load()
video.muted = 'muted'
const videoTexture = new THREE.VideoTexture(video)
videoTexture.generateMipmaps = false
videoTexture.minFilter = THREE.LinearFilter
videoTexture.magFilter = THREE.LinearFilter
videoTexture.format = THREE.RGBFormat
this.movieMaterial = new THREE.MeshPhongMaterial({map: videoTexture,
overdraw: true, side: THREE.DoubleSide})
this.movieMaterial.map.needsUpdate = true
Это код, который устанавливает текстуру:
handleComputerScreen (geometry) {
let mat = null
if (this.props.videoActive) {
mat = this.movieMaterial
} else {
mat = this.regScreenMaterial
}
this.screenMesh = new THREE.Mesh(geometry, mat)
this.screenMesh.castShadow = true
this.scene.add(this.screenMesh)
}
, и этокод, который устанавливает видео src:
componentWillReceiveProps (nextProps) {
if (this.props.video !== nextProps.video) {
this.video.src = nextProps.video
this.video.play()
this.screenMesh.material = this.movieMaterial
this.screenMesh.needsUpdate = true
}
}
полный код Three.js можно найти здесь:
https://github.com/Timothy-Tolley/timothytolley-3js/blob/master/client/components/ThreeD/ThreeD.jsx
и живую версию приложения(с предупреждениями) можно найти по адресу: https://timothytolley.com
Любые советы будут отличными.Кроме того, любые советы о том, как сделать рендеринг более плавным, были бы великолепны!
Приветствия, Тим