KeyframeWorker.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /**
  2. * 关键帧点云数据获取 Worker
  3. * 功能:异步获取关键帧点云数据(Protobuf 格式)
  4. */
  5. /**
  6. * 监听主线程消息
  7. */
  8. self.onmessage = function(event) {
  9. const { url, index } = event.data
  10. console.log(`[KeyframeWorker] 获取点云 ${index}:`, url)
  11. // 发送请求获取点云数据
  12. fetch(url, {
  13. method: 'GET',
  14. headers: {
  15. 'Content-Type': 'application/x-protobuf',
  16. 'Accept': 'application/x-protobuf'
  17. }
  18. })
  19. .then(response => {
  20. if (!response.ok) {
  21. throw new Error(`HTTP ${response.status}: ${response.statusText}`)
  22. }
  23. return response.arrayBuffer()
  24. })
  25. .then(arrayBuffer => {
  26. // 返回 Uint8Array 给主线程
  27. // 主线程会使用 Protobuf 解析这个数据
  28. const uint8Array = new Uint8Array(arrayBuffer)
  29. console.log(`[KeyframeWorker] 点云 ${index} 获取成功:`, uint8Array.length, 'bytes')
  30. self.postMessage({ type: 'success', data: uint8Array, index: index })
  31. })
  32. .catch(error => {
  33. console.error(`[KeyframeWorker] 点云 ${index} 获取失败:`, error)
  34. self.postMessage({ type: 'error', error: error.message, index: index })
  35. })
  36. }
  37. /**
  38. * 错误处理
  39. */
  40. self.onerror = function(error) {
  41. console.error('Worker error:', error)
  42. }