visionneur_playcanva / index.html
bilca's picture
Update index.html
0ebf61c verified
raw
history blame
3.56 kB
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Gsplat Viewer</title>
<link rel="stylesheet" href="https://bilca-visionneur-playcanva.static.hf.space/style.css">
</head>
<body>
<canvas id="application-canvas"></canvas>
<script type="module">
const rootPath = 'https://playcanvas.vercel.app';
const deviceType = "webgl2";
import * as pc from "https://cdn.skypack.dev/[email protected]";
window.pc = pc;
const canvas = document.getElementById('application-canvas');
window.focus();
const gfxOptions = {
deviceTypes: [deviceType],
glslangUrl: `${rootPath}/static/lib/glslang/glslang.js`,
twgslUrl: `${rootPath}/static/lib/twgsl/twgsl.js`,
antialias: false
};
const device = await pc.createGraphicsDevice(canvas, gfxOptions);
device.maxPixelRatio = Math.min(window.devicePixelRatio, 2);
const createOptions = new pc.AppOptions();
createOptions.graphicsDevice = device;
createOptions.mouse = new pc.Mouse(document.body);
createOptions.touch = new pc.TouchDevice(document.body);
createOptions.componentSystems = [
pc.RenderComponentSystem,
pc.CameraComponentSystem,
pc.LightComponentSystem,
pc.ScriptComponentSystem,
pc.GSplatComponentSystem
];
createOptions.resourceHandlers = [
pc.TextureHandler,
pc.ContainerHandler,
pc.ScriptHandler,
pc.GSplatHandler
];
const app = new pc.AppBase(canvas);
app.init(createOptions);
app.setCanvasFillMode(pc.FILLMODE_FILL_WINDOW);
app.setCanvasResolution(pc.RESOLUTION_AUTO);
app.scene.exposure = 0.8; // Increase exposure slightly (1.2 is a good start)
app.scene.toneMapping = pc.TONEMAP_ACES;
const resize = () => app.resizeCanvas();
window.addEventListener('resize', resize);
app.on('destroy', () => window.removeEventListener('resize', resize));
const assets = {
biker: new pc.Asset('gsplat', 'gsplat', { url: `https://huggingface.co/datasets/bilca/ply_files/resolve/main/tests/Statue_Long_ext_v03.ply` }),
orbit: new pc.Asset('script', 'script', { url: `https://bilca-visionneur-playcanva.static.hf.space/orbit-camera.js` })
};
const assetListLoader = new pc.AssetListLoader(Object.values(assets), app.assets);
assetListLoader.load(() => {
app.start();
const camera = new pc.Entity();
camera.addComponent('camera', {
clearColor: new pc.Color(0.2, 0.2, 0.2),
toneMapping: pc.TONEMAP_ACES
});
camera.setLocalPosition(2, 1, 1);
const biker = new pc.Entity();
biker.addComponent('gsplat', {
asset: assets.biker
});
biker.setLocalPosition(-1.5, 0.05, 0);
biker.setLocalEulerAngles(0, 90, 0);
biker.setLocalScale(0.7, 0.7, 0.7);
app.root.addChild(biker);
camera.addComponent('script');
camera.script.create('orbitCamera', {
attributes: {
inertiaFactor: 0.2,
focusEntity: biker,
distanceMax: 60,
frameOnStart: false
}
});
camera.script.create('orbitCameraInputMouse');
camera.script.create('orbitCameraInputTouch');
app.root.addChild(camera);
});
export { app };
</script>
</body>
</html>