- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经尝试创建一个 WebVR 环境一个多星期了,我的场景是用三个 js 渲染的,但我似乎无法使 VR 控件工作。
我已经尝试过:
在我的node_modules中添加包并导入它们:
import threeOrbitControls from 'three-orbit-controls';
const OrbitControls = threeOrbitControls(THREE);
const controls = new THREE.OrbitControls(camera, element);
但这会引发错误:
Uncaught TypeError: __WEBPACK_IMPORTED_MODULE_1_three__.OrbitControls is not a constructor(…)
我尝试导入的其他一些模块表示模块内未定义 THREE,因为该函数以 THREE 开头。
,但我无法进入该模块并仅导入 THREE,因为如果其他人运行npm install
他们仍然会得到相同的错误。
我尝试在我的index.html中添加脚本(和正在下载的源代码),但还有三个未定义...
我无法猜测。我认为这是因为 webpack,并查找了 WebVR webpack 存储库以了解该人是如何处理它的。我发现this repository但是当安装包并运行 webpack 时,它说 WebVRManager 不是构造函数。老实说,我不知道这里出了什么问题。
这是我用来运行我的项目的代码(现在相当困惑)。
import {sets} from './data/';
import * as THREE from 'three';
import threeOrbitControls from 'three-orbit-controls';
import ColladaLoader from 'three-collada-loader';
// import 'three-vrcontrols';
// import 'three-vreffect';
import threeStereoEffect from 'three-stereo-effect';
// import FirstPersonControls from 'three-first-person-controls';
// import DeviceOrientationControls from './modules/util/DeviceOrientationControls';
import webvrPolyfill from 'webvr-polyfill'; // eslint-disable-line no-unused-vars
// console.log(DeviceOrientationControls);
import io from 'socket.io-client';
import {isEmpty} from 'lodash';
import {BufferLoader} from './modules/sound';
import {SpawnObject} from './modules/render';
import {Controls} from './modules/util';
const OrbitControls = threeOrbitControls(THREE);
const StereoEffect = threeStereoEffect(THREE);
// const VRControls = new THREE.VRControls(camera);
// const VREffect = new THREE.VREffect();
let scene, camera, renderer, element, container, stereoEffect, vreffect, controls;
let audioCtx, bufferLoader;
let controlData;
let camX = 0;
const camY = 0;
let camZ = 2;
const camSpeed = .1;
const notes = [];
let devices = [];
const init = () => {
this.socket = io(`/`);
this.socket.on(`init`, handleWSInit);
this.socket.on(`dataTransfer`, handleWSData);
window.AudioContext = window.AudioContext || window.webkitAudioContext;
};
const handleWSInit = users => {
const {id: socketId} = this.socket;
users = users.map(u => {
if (u.socketId === socketId) u.isMe = true;
return u;
});
devices = users;
if (window.location.href.indexOf(`controls`) > - 1) {
const controls = new Controls(this.socket, devices);
console.log(controls);
return;
}
document.querySelector(`main`).classList.remove(`controls`);
loadAudio();
};
const loadAudio = () => {
audioCtx = new AudioContext();
bufferLoader = new BufferLoader(audioCtx);
bufferLoader.load(sets.drums)
.then(data => spawnObject(data));
initEnvironment();
};
const handleWSData = data => {
if (data !== undefined || data !== null || isEmpty(data)) controlData = data;
devices = devices.map(u => {
u.yo = false;
return u;
});
};
const spawnObject = data => {
for (let i = 0;i < 5;i ++) {
const bol = new SpawnObject(`object.dae`, audioCtx, data[0], scene, false);
notes.push(bol);
}
// console.log(notes);
};
const initEnvironment = () => {
//Three.js Scene
scene = new THREE.Scene();
//Create renderer, set size + append to the container
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
element = renderer.domElement;
container = document.querySelector(`main`);
container.appendChild(element);
//Create camera, set position + add to scene
camera = new THREE.PerspectiveCamera(
45, window.innerWidth / window.innerHeight,
1, 10000
);
camera.position.set(0, 0, 2);
camera.lookAt(scene.position);
//VR Controls
// temporaryControls = new VRControls(camera);
// vreffect = new VREffect(renderer);
// vreffect.setSize(window.innerWidth, window.innerHeight);
//
// navigator.getVRDisplays().then(displays => {
// if (displays.length > 0) {
// const vrDisplay = displays[0];
// console.log(`jipse`);
// }
// //Kick off the render loop
// });
//Creates stereo effect
stereoEffect = new StereoEffect(renderer);
// stereoEffect.eyeSeparation = 15;
// stereoEffect.setSize(window.innerWidth, window.innerHeight);
console.log(stereoEffect);
//Controls
// new OrbitControls(camera);
controls = new THREE.OrbitControls(camera, element);
// camera.position.x = 100;
// camera.position.y = 1000;
// camera.position.z = 3000;
//LIGHTS
const light = new THREE.PointLight(0xFFFFFF);
light.position.set(0, 0, 9);
light.castShadow = true;
light.shadow.mapSize.width = 1024;
light.shadow.mapSize.height = 1024;
light.shadow.camera.near = 10;
light.shadow.camera.far = 100;
scene.add(light);
//FLOOR
const matFloor = new THREE.MeshPhongMaterial();
const geoFloor = new THREE.BoxGeometry(2000, 1, 2000);
const mshFloor = new THREE.Mesh(geoFloor, matFloor);
matFloor.color.set(0x212E39);
mshFloor.receiveShadow = true;
mshFloor.position.set(0, - 1, 0);
scene.add(mshFloor);
//ENVIRONMENT
const loader = new ColladaLoader();
loader.load(`../assets/environment.dae`, collada => {
collada.scene.traverse(child => {
child.castShadow = true;
child.receiveShadow = true;
});
scene.add(collada.scene);
render();
});
};
// function setOrientationControls(e) {
// if (!e.alpha) {
// return;
// }
// controls = new THREE.DeviceOrientationControls(camera, true);
// controls.connect();
// controls.update();
// element.addEventListener(`click`, fullscreen, false);
// window.removeEventListener(`deviceorientation`, setOrientationControls, true);
// }
// window.addEventListener(`deviceorientation`, setOrientationControls, true);
const moveCamera = () => {
notes.forEach(i => {
i.audioCtx.listener.positionX.value = camX + window.innerWidth / 2;
i.audioCtx.listener.positionZ.value = camZ + 300;
i.audioCtx.listener.positionY.value = camY + window.innerHeight / 2;
});
switch (controlData) {
case `up`:
camZ -= camSpeed;
break;
case `down`:
camZ += camSpeed;
break;
case `left`:
camX -= camSpeed;
break;
case `right`:
camX += camSpeed;
break;
}
camera.position.set(camX, camY, camZ);
};
const render = () => {
moveCamera();
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
renderer.gammaInput = true;
renderer.gammaOutput = true;
renderer.setClearColor(0xdddddd, 1);
stereoEffect.render(scene, camera);
requestAnimationFrame(render);
};
// const fullscreen = () => {
// if (container.requestFullscreen) {
// container.requestFullscreen();
// } else if (container.msRequestFullscreen) {
// container.msRequestFullscreen();
// } else if (container.mozRequestFullScreen) {
// container.mozRequestFullScreen();
// } else if (container.webkitRequestFullscreen) {
// container.webkitRequestFullscreen();
// }
// };
init();
最佳答案
我下载了源代码,通过执行 require(./OrbitControls.js)
来获取它,并在源代码中添加了 module.exports = THREE.OrbitControls
。
关于javascript - OrbitControls 不是构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41132839/
当我去创建一个 OrbitControls 的实例时,我最终得到了 未捕获的类型错误:THREE.OrbitControls 不是构造函数。 我的代码非常简单,但我显然遗漏了一些东西。 var or
有什么方法可以限制场景中摄像机的平移运动吗? 尝试在 orbitControls 中更改 pan 方法,但我对结果并不满意,我希望有更方便/正确的方法来做到这一点.. if ( scope.objec
我正在使用 THREE.js 和 Blender 开展一个学术项目。在我的 main.js 中,我有用于创建场景、创建渲染器、相机、轨道控件等的代码...问题是,每次我加载网页时,相机都会看着某个位置
我已经尝试创建一个 WebVR 环境一个多星期了,我的场景是用三个 js 渲染的,但我似乎无法使 VR 控件工作。 我已经尝试过: 在我的node_modules中添加包并导入它们: import t
有没有办法、插件或想法让 THREE.js OrbitControls 在旋转时产生惯性效果? 我想像这样旋转一个具有一定阻尼的世界球体: http://stemkoski.github.io/Thr
在three.js中如何设置摄像机轨道的中心? (使用OrbitControls) 鸡蛋:我要用 camera.lookAt(new THREE.Vector3( 100,50,200 ) 并让我的相
如何在鼠标交互时停止 OrbitControls 的自动旋转,并在几秒钟后像 P3D.in 一样开始使用他们的 Logo (http://p3d.in/) 最佳答案 对于谷歌搜索的人,如果你想在第一次
我想知道我是否仍然可以在 2020 年使用 OrbitControls? 这是我得到的警告: 作为向 ES6 模块过渡的一部分,“examples/js”中的文件已于 2020 年 5 月 (r117
我需要旋转环境。而且由于three.js 不支持立方体环境旋转,我将采用最简单的方法并修改scene.rotation.y ,正如三个.js 贡献者所建议的那样。 在相机平移之前,一切正常。在这里亲自
刚刚开始学习 THREE.js,我用基本的东西做了一个简单的场景: http://codepen.io/inspiral/full/Lewgj 一切工作正常,除了最近插入的鼠标事件处理对渲染产生的奇怪
我尝试将最新的 OrbitControls.js 添加到我的场景和轨道接缝中以正常工作。但是,当我使用鼠标中键或滚轮进行缩放时,轴接缝会关闭并且不再正确旋转。平移(或扫射)在我的场景中似乎也无法正常工
我不明白这是否是一个纯粹的 JavaScript 错误。在下面的类函数中,我添加了一个事件监听器,它返回此错误: Uncaught TypeError: Cannot read property 'c
我试图在我的 three.js 项目中添加 OrbitControls,但是当我尝试调用构造函数时,它给出了一个未捕获的类型错误“THREE.OrbitControls 不是构造函数”。我已经搜索了一
我将 misc_controls_orbit 示例嵌入到包含其他内容的较大网页中的 800x600 框架中。 我的问题是当我滚动我的鼠标滚轮时,即使我的鼠标在框架内或框架外,它也会滚动网页和缩放我的对
我是一名老 COBOL 程序员,为了一个小的个人项目自学了一些 Javascript 和 Three.js,现在我被这个疑问困扰了将近两天。我已经在 StackOverflow 中阅读了所有关于 Or
我使用 OrbitControls.js 允许用户放大/缩小和旋转我网站上显示的 3D 模型。但是,当我单击页面上的任意位置时,模型会消失,并且用于在模型之间切换的两个按钮不再起作用。事先,它允许我放
我已经使用 OrbitControls.js 在 Three.js 中设置了一个场景,以允许旋转和平移。我希望我的照明设置跟随相机,确保场景中的物体始终被照亮。 (现在您可以旋转到物体的“暗面”)。
我将通过图像解释我的问题: 这是顶部相机的 View ,灰色立方体是3D模型,“X”表示“旋转中心”,箭头表示旋转方向: 通常,当我们平移时,“旋转中心”仍然位于相机的中心,因此旋转方向如下所示: 问
我希望它继续围绕物体旋转。但我无法设置 minPolarAngle/maxPolarAngle(当我将其设置为(+-)无限旋转时不起作用)。 OrbitControls 中的最小和最大极 Angula
如何限制 OrbitControl 的水平旋转? 在代码中,我可以看到可以使用 minPolarAngle 和 maxPolarAngle 来垂直限制它。但是我找不到横向限制它的方法。 -- 编辑:我
我是一名优秀的程序员,十分优秀!