直接上代码,
<canvas class="webgl" type="webgl" id="gl" bindtouchstart="onTX" bindtouchend="onTX" bindtouchmove="onTX" style="width:100vw;height:90vh"></canvas>
const common_vendor = require("../../common/vendor.js");Page({onLoad() {const query = common_vendor.index.createSelectorQuery().in(this);query.select("#gl").boundingClientRect((x) => {this.win = x;}).exec();common_vendor.index.createSelectorQuery().select("#gl").node().exec((res) => {const canvas = this.canvas = res[0].node;this.platform = new common_vendor.WechatPlatform(canvas);common_vendor.PLATFORM.set(this.platform);const scene = this.scene = new common_vendor.Scene();scene.background = new common_vendor.Color(16777200);scene.add(new common_vendor.AmbientLight(16777215, 1));scene.add(new common_vendor.DirectionalLight(16777215, 1));const camera = this.camera = new common_vendor.PerspectiveCamera(75, canvas.width / canvas.height, 0.1, 1e3);camera.position.set(0, 7, 15);const renderer = new common_vendor.WebGL1Renderer({ canvas, antialias: true, alpha: true });renderer.outputEncoding = common_vendor.sRGBEncoding;renderer.setSize(canvas.width, canvas.height);renderer.setPixelRatio(common_vendor.$window.devicePixelRatio);const controls = new common_vendor.OrbitControls(camera, canvas);controls.enableDamping = true;controls.dampingFactor = 0.25;controls.enableZoom = true;var textureLoader = new common_vendor.TextureLoader();var texture = textureLoader.load("https://files.ifok.cn/m2photo");texture.minFilter = common_vendor.LinearFilter;var bump = textureLoader.load("https://files.ifok.cn/security_sign/design_fabric_skin/fabric004.png");const loader = new common_vendor.OBJLoader();loader.load("https://files.ifok.cn/m2_obj/x.obj", (object) => {object.traverse((child) => {child.material = new common_vendor.MeshStandardMaterial({color: 11119017,side: common_vendor.DoubleSide,map: texture,bumpMap: bump,bumpScale: 2});});object.scale.set(0.1, 0.1, 0.1);object.position.set(0, -10, 0);scene.add(object);this.clo_object = object;}, () => {}, () => {});const axesHelper = new common_vendor.AxesHelper(10);scene.add(axesHelper);this.raycaster = new common_vendor.Raycaster();this.mouse = new common_vendor.Vector2();const render = () => {if (!this.disposing)this.frameId = common_vendor.$requestAnimationFrame(render);controls.update();renderer.render(scene, camera);};render();});},onTX(e) {this.platform.dispatchTouchEvent(e);}
})
我使用的是three-platformize,可以通过npm install的方式直接安装的,小程序原生的npm我还没有试过,加载进去后用THREE替换掉common_vendor即可,加载器那里需要导入OBJLoader,然后就可以直接用了