Reflekterande prisma (3 / 6 steg)
Steg 3: Fyra sidor
Samma principer beaktas när du bryter det att ha fyra sidor. Fördelen med att ha fyra sidor är att du kan visa ett objekt från fyra unika vinklar. Genom att placera fyra kameror i 45 graders intervall ger en illusion av att du kan gå runt displayen och flera personer kan visa samma objekt från olika utgångspunkter. Det ökar också kraftigt illusionen att ett objekt är att sitta i fysiskt utrymme. Ovan är ett diagram för placering av fyra kameror i 3D-scenen.
Det är viktigt att notera att du måste rotera z-axeln i kameran för att matcha den base-linjen för varje panel tillsammans med kameran inom omkretsen av en cirkel - ställning. Resulterande programmet bör se ut ungefär som denna och denna (med 3D-modellen).
Dessa 3D-scener genereras med hjälp av three.js (en webGL bibliotek med hjälp av javascript). Du kan emellertid skapa denna scen med någon programvara som stöder 3D (After Effects, OpenGL, Maya, 3ds Max, ect.). Koden används för att skapa flera kameror är följande:
skapa vyer
var visningar = [
{
vänster: 0,
botten: 0.5,
bredd: 0.5,
höjd: 0,5,
bakgrund: {r: 0,0, g: 0,0, b: 0,0, a: 1},
öga: [0, 300, 1800],
upp: [0, 1, 0],
FOV: 30,
vinkel: 0,
rotation: 33,75
},
{
vänster: 0,
botten: 0,
bredd: 0.5,
höjd: 0,5,
bakgrund: {r: 0,0, g: 0,0, b: 0,0, a: 1},
öga: [0, 300, 1800],
upp: [0, 1, 0],
FOV: 30,
vinkel: 90,
rotation: 101.25
},
{
vänster: 0.5,
botten: 0,
bredd: 0.5,
höjd: 0,5,
bakgrund: {r: 0,0, g: 0,0, b: 0,0, a: 1},
öga: [0, 300, 1800],
upp: [0, 1, 0],
FOV: 30,
vinkel: 180,
rotation:-101.25
},
{
vänster: 0.5,
botten: 0.5,
bredd: 0.5,
höjd: 0,5,
bakgrund: {r: 0,0, g: 0,0, b: 0,0, a: 1},
öga: [0, 300, 1800],
upp: [0, 1, 0],
FOV: 30,
vinkel: 270,
rotation: 101.25
}
]; //add kameror
för (var jag = 0; jag < views.length; i ++) {
var Visa = utsikt [i];
var kamera = nya tre. PerspectiveCamera (view.fov, fönsterbredd / Fönsterhöjd, 1, 10000);
Camera.position.x = view.eye [0];
Camera.position.y = view.eye [1].
Camera.position.z = view.eye [2].
Camera.up.x = view.up [0];
Camera.up.y = view.up [1].
Camera.up.z = view.up [2].
View.Camera = kamera;
}
Om du vill återge kamerorna, använde jag följande kod:
för varje vy
för (var jag = 0; jag < views.length; i ++) {
ta varje vy
var Visa = utsikt [i] //grab varje kamera
var kamera = view.camera;
Justera kamera inom 3D sfäriska koordinater
Camera.position.x = earth.position.x + cameraRadius *
Math.sin(rotateY * Math.PI/180) *
Math.cos(View.Angle * Math.PI/180);
Camera.position.z = earth.position.y + cameraRadius *
Math.sin(rotateY * Math.PI/180) *
Math.sin(View.Angle * Math.PI/180);
Camera.position.y = earth.position.z + cameraRadius *
Math.cos(rotateY * Math.PI/180);
camera.lookAt (scene.position); //Set rotation av kameran på z-axeln
Camera.rotation.z= view.rotation - Math.PI;
Grab Visa portar
var vänster = Math.floor (fönsterbredd * view.left);
var botten = Math.floor (Fönsterhöjd * view.bottom);
var bredd = Math.floor (fönsterbredd * view.width);
var höjd = Math.floor (Fönsterhöjd * view.height); //Render
renderer.setViewport (vänster botten, bredd, höjd);
renderer.setScissor (vänster botten, bredd, höjd);
renderer.enableScissorTest (sant);
renderer.setClearColor (view.background, view.background.a);
renderer.Render (scen, kamera)
}
För detta experiment använde jag en laserskärare för att klippa varje sida av prismat från 12 x 12" transparent akryl plexiglas paneler. När limmade ihop skapas (med lösningsmedel), en prisma där varje sida är 45 grader från horisontalplanet. Jag placerade bildkällan längst ned i det här exemplet, men denna konstruktion kan lätt vändas upp och ner. Göra detta skulle göra bildkällan mindre synliga och tillåter användaren att bättre fokus på innehåll återspeglas av prismat.