Физика — это масло к хлебу виртуальной реальности. Играя с SDK AltspaceVR, я задался вопросом —

Можно ли добавить физику в SDK altspaceVR?

Оказывается, вы можете… вроде.

Как это было достигнуто?

При взломе кода Altspace SDK для принудительной интеграции Physijs я бы сначала порекомендовал взглянуть на физики wiki. Вы можете увидеть пример интеграции здесь.

Во-первых, мы должны настроить рабочие сценарии Physijs внутри функции моделирования SDK:

altspace.utilities.Simulation = function (config) {              
  Physijs.scripts.ammo = ‘../dist/ammo.js’; 
  Physijs.scripts.worker = ‘../dist/physijs_worker.js’;
  ...
  ...

Затем мы заменяем переменную сцены Altspace по умолчанию на сцену Physijs:

var scene = new Physijs.Scene({ reportsize: 50, fixedTimeStep: 1 / 60 });
scene.setGravity(new THREE.Vector3( 0, -200, 0 ))

Наконец, мы должны вызывать симуляцию в каждом кадре loop():

function loop() { 
  scene.simulate(); //physijs simulation
  window.requestAnimationFrame(loop); 
  if (scene.updateAllBehaviors) {
    scene.updateAllBehaviors(); 
    renderer.render(scene, camera); 
  }

Я знаю, что вы очень взволнованы, но я должен упомянуть одну загвоздку:

Я еще не придумал, как заставить события курсора работать с физическими объектами. На самом деле, я даже не уверен, где они определены в SDK. Если у вас есть идеи, как это решить, дайте мне знать в комментариях.

Если вы хотите попробовать, исходный код проекта в формате GIF можно найти здесь: https://github.com/william-bratches/altspace-vr-physics