我正在嘗試構建一個360度視頻播放器,這個視頻播放器或多或少會像Youtube的桌面360播放器那樣動作。我不是一個3D人,但我已經設法用我在網上找到的代碼構建了一些東西。我爲此使用Away3D 2.5.2。如何在as3/away3d中設置一個360視頻投影,以保持覆蓋圖的直線
我遇到的問題是我的客戶端在視頻上粘貼了一些圖形疊加層。這些覆蓋物必須保持平直,至少在垂直方向上。儘管YouTube的播放器成功地保持這些直 - 在這裏看到:https://www.youtube.com/watch?v=59MVhZWlKgQ - 我自己的球員曲線的垂直線位 - 在這裏看到:http://www.ysection.com/saar/360a/
視頻本身是在這裏: http://www.ysection.com/saar/360a/360test2-injected.mp4
*這段視頻只是一個例子只有這個問題。我在YT上發現它,並且我沒有權利
正如你在這些screengrabs中看到的,Youtube的播放器有一些補償性的「魚眼」失真應用於視頻(見邊緣),這有助於保持直線。
無論玩家玩相同的視頻這是4096x2048等距離長方圓柱視頻。
下面是關注問題的主要代碼:
這是我如何設置攝像機:
camera = new HoverCamera3D();
camera.steps = 1;
camera.zoom = 15;
camera.focus = 25;
camera.minTiltAngle = -90;
camera.maxTiltAngle = 90;
camera.panAngle = 270;
camera.tiltAngle = 0;
這是材質設置:
video = new Video(2880,1440);
vBitmap = new BitmapData(2880,1440);
skyMaterial = new BitmapMaterial(vBitmap);
skyMaterial.smooth = true;
這是3D對象設置:
skysphere = new Sphere();
skysphere.material = skyMaterial;
skysphere.radius = 2800;
skysphere.rotationX = 180;
skysphere.segmentsW = 40;
skysphere.segmentsH = 36;
skysphere.scale(-1);
scene.addChild(skysphere);
,這是我在輸入框:
vBitmap.draw(video,null,null,null,null,true);
if (move) {
camera.panAngle = 0.3 * (lastMouseX - this.mouseX) + lastPanAngle;
camera.tiltAngle = 0.3 * (lastMouseY - this.mouseY) + lastTiltAngle;
}
// hack
camera.panAngle = camera.panAngle+0.001-0.002*int(hackSwitch);
hackSwitch = !hackSwitch;
camera.hover();
view.render();
你們是否有關於如何讓我的球員的行爲像YouTube對我有什麼建議?
感謝, Sa'ar
非常感謝那個詳細的答案。我自己想過Capsule,但需要使用Away3d 2.5.2(支持FP9),它沒有CapsuleGeometry。然而,我會嘗試你的筆記。再次感謝 – Saariko
啊,我沒有考慮Away3d的版本......真的很老......: - /但只是抓住CapsuleGeometry的4.x源代碼,應該可以讓它在2.x下工作.. – SushiHangover
Thanx RobertN,但4.x和2.x是相距太遠,只是拋出CapsuleGeometry,因爲它使用函數和變量是不同的 - AbstractPrimitive與PrimitiveBase,buildPrimitive()vs buildGeometry(目標:CompactSubGeometry),等等...無論如何,客戶端可以使用我的當前版本,因此我暫停了這方面的工作,但是如果完全解決方案能夠正常工作,將會在此處進行更新。再次感謝! – Saariko