小程序
小游戏
企业微信
微信支付
扫描小程序码分享
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
GLTFParser.prototype.loadTexture = function(textureIndex) { var parser = this; var json = this.json; var options = this.options; var textureLoader = this.textureLoader; var URL = global.URL; var textureDef = json.textures[textureIndex]; var textureExtensions = textureDef.extensions || {}; var source; if (textureExtensions[EXTENSIONS.MSFT_TEXTURE_DDS]) { source = json.images[textureExtensions[EXTENSIONS.MSFT_TEXTURE_DDS].source] } else { source = json.images[textureDef.source] } var sourceURI = source.uri; var isObjectURL = false; if (source.bufferView !== undefined) { sourceURI = parser.getDependency('bufferView', source.bufferView).then(function(bufferView) { isObjectURL = false; var base64 = ArrayBufferToBase64(bufferView); var sourceURI = `data:${source.mimeType};base64,${base64}`; return sourceURI })
}
gltf-loader的这里改一下。然后自己定义个ArrayBufferToBase64的接口 import { encode as ArrayBufferToBase64 } from '../../three-platformize/src/libs/base64-arraybuffer'; export function encode(arrayBuffer) { var base64 = ''; var bytes = new Uint8Array(arrayBuffer); var byteLength = bytes.byteLength; var byteRemainder = byteLength % 3; var mainLength = byteLength - byteRemainder; var a, b, c, d; var chunk; // Main loop deals with bytes in chunks of 3 for (var i = 0; i < mainLength; i = i + 3) { // Combine the three bytes into a single integer chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; // Use bitmasks to extract 6-bit segments from the triplet a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18 b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12 c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6 d = chunk & 63; // 63 = 2^6 - 1 // Convert the raw binary segments to the appropriate ASCII encoding base64 += chars[a] + chars[b] + chars[c] + chars[d]; } // Deal with the remaining bytes and padding if (byteRemainder == 1) { chunk = bytes[mainLength]; a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2 // Set the 4 least significant bits to zero b = (chunk & 3) << 4; // 3 = 2^2 - 1 base64 += chars[a] + chars[b] + '=='; } else if (byteRemainder == 2) { chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10 b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4 // Set the 2 least significant bits to zero c = (chunk & 15) << 2; // 15 = 2^4 - 1 base64 += chars[a] + chars[b] + chars[c] + '='; } return base64; }
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
GLTFParser.prototype.loadTexture = function(textureIndex) { var parser = this; var json = this.json; var options = this.options; var textureLoader = this.textureLoader; var URL = global.URL; var textureDef = json.textures[textureIndex]; var textureExtensions = textureDef.extensions || {}; var source; if (textureExtensions[EXTENSIONS.MSFT_TEXTURE_DDS]) { source = json.images[textureExtensions[EXTENSIONS.MSFT_TEXTURE_DDS].source] } else { source = json.images[textureDef.source] } var sourceURI = source.uri; var isObjectURL = false; if (source.bufferView !== undefined) { sourceURI = parser.getDependency('bufferView', source.bufferView).then(function(bufferView) { isObjectURL = false; var base64 = ArrayBufferToBase64(bufferView); var sourceURI = `data:${source.mimeType};base64,${base64}`; return sourceURI })
}
gltf-loader的这里改一下。然后自己定义个ArrayBufferToBase64的接口 import { encode as ArrayBufferToBase64 } from '../../three-platformize/src/libs/base64-arraybuffer'; export function encode(arrayBuffer) { var base64 = ''; var bytes = new Uint8Array(arrayBuffer); var byteLength = bytes.byteLength; var byteRemainder = byteLength % 3; var mainLength = byteLength - byteRemainder; var a, b, c, d; var chunk; // Main loop deals with bytes in chunks of 3 for (var i = 0; i < mainLength; i = i + 3) { // Combine the three bytes into a single integer chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; // Use bitmasks to extract 6-bit segments from the triplet a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18 b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12 c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6 d = chunk & 63; // 63 = 2^6 - 1 // Convert the raw binary segments to the appropriate ASCII encoding base64 += chars[a] + chars[b] + chars[c] + chars[d]; } // Deal with the remaining bytes and padding if (byteRemainder == 1) { chunk = bytes[mainLength]; a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2 // Set the 4 least significant bits to zero b = (chunk & 3) << 4; // 3 = 2^2 - 1 base64 += chars[a] + chars[b] + '=='; } else if (byteRemainder == 2) { chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10 b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4 // Set the 2 least significant bits to zero c = (chunk & 15) << 2; // 15 = 2^4 - 1 base64 += chars[a] + chars[b] + chars[c] + '='; } return base64; }