Professional Documents
Culture Documents
org/en-US/docs/Web/CSS/transform-function/translate3d
https://github.com/amitdiamant/magnify-3d
https://github.com/amitdiamant/magnify-3d/blob/master/sample/index.js#L165
impo
rt *
as
THRE
E
from
'thr
ee';
import * as dat from 'dat.gui';
import Magnify3d from '../src/Magnify3d';
import { TeapotBufferGeometry } from './TeapotGeometry';
// FPS monitor
javascript:(function(){var
script=document.createElement('script');script.onload=function(){var stats=new
Stats();document.body.appendChild(stats.dom);requestAnimationFrame(function loop()
{stats.update();requestAnimationFrame(loop)});};script.src='//mrdoob.github.io/
stats.js/build/stats.min.js';document.head.appendChild(script);})()
const MIN_ZOOM = 1;
const MAX_ZOOM = 15;
const MIN_EXP = 1;
const MAX_EXP = 100;
const MIN_RADIUS = 10;
const MAX_RADIUS = 500;
const MIN_OUTLINE_THICKNESS = 0;
const MAX_OUTLINE_THICKNESS = 50;
function initScene() {
scene = new THREE.Scene();
function initCamera() {
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight,
0.01, 1000);
camera.position.set(0.0, 40.0, 250.0);
camera.lookAt(0.0, 0.0, 0.0);
}
function initRenderer() {
const pixelRatio = window.devicePixelRatio;
renderer.setPixelRatio( pixelRatio );
renderer.setSize(window.innerWidth, window.innerHeight);
function initEventListeners() {
document.addEventListener('mousemove', (e) => {
params.mouse = new THREE.Vector2(e.clientX, window.innerHeight - e.clientY);
});
function onMouseWheel(e) {
e.preventDefault();
const delta = (e.wheelDelta && e.wheelDelta / 40) || -e.detail;
if (shiftDown) {
params.zoom = Math.min(Math.max(MIN_ZOOM, params.zoom + (delta / 10)),
MAX_ZOOM);
} else if (ctrlDown) {
params.exp = Math.min(Math.max(MIN_EXP, params.exp + delta), MAX_EXP);
} else {
params.radius = Math.min(Math.max(MIN_RADIUS, params.radius + delta),
MAX_RADIUS);
}
gui.updateDisplay();
}
function initGUI() {
params = {
zoom: 2.0,
exp: 30.0,
radius: 110.0,
outlineThickness: 4.0,
outlineColor: 0x555555
}
gui = new dat.GUI();
gui.add(params, 'radius', MIN_RADIUS, MAX_RADIUS);
gui.add(params, 'zoom', MIN_ZOOM, MAX_ZOOM);
gui.add(params, 'exp', MIN_EXP, MAX_EXP);
gui.add(params, 'outlineThickness', MIN_OUTLINE_THICKNESS,
MAX_OUTLINE_THICKNESS);
gui.addColor(params, 'outlineColor');
}
function init() {
initScene();
initCamera();
initRenderer();
initEventListeners();
initGUI();
function renderSceneToTarget(tgt) {
renderer.render(scene, camera, tgt);
}
function render() {
renderSceneToTarget(defaultTarget); // Render original scene to target / screen
(depends on defaultTarget).
magnify3d.render({
renderer,
renderSceneCB: renderSceneToTarget,
pos: params.mouse,
zoom: params.zoom,
exp: params.exp,
radius: params.radius,
outlineThickness: params.outlineThickness,
outlineColor: params.outlineColor,
antialias: true,
inputBuffer: defaultTarget,
outputBuffer: undefined
});
}
function animate() {
requestAnimationFrame(animate);
boxMesh1.rotation.y += 0.01;
boxMesh2.rotation.y -= 0.01;
render();
}
init();
animate();