1
0
mirror of https://github.com/troisjs/trois.git synced 2024-11-24 04:12:02 +08:00
This commit is contained in:
Kevin Levron 2020-09-15 14:59:34 +02:00
parent 1fa322e91a
commit 26ab54bd66
7 changed files with 63 additions and 8 deletions

BIN
public/test.glb Normal file

Binary file not shown.

View File

@ -11,15 +11,16 @@
import Test1 from './components/Test1.vue'; import Test1 from './components/Test1.vue';
import Test2 from './components/Test2.vue'; import Test2 from './components/Test2.vue';
import Test3 from './components/Test3.vue'; import Test3 from './components/Test3.vue';
import TestGLTF from './components/TestGLTF.vue';
export default { export default {
name: 'App', name: 'App',
components: { components: {
Test1, Test2, Test3, Test1, Test2, Test3, TestGLTF,
}, },
data() { data() {
return { return {
tests: ['Test1', 'Test2', 'Test3'], tests: ['Test1', 'Test2', 'Test3', 'TestGLTF'],
test: 'Test1', test: 'Test1',
}; };
}, },

View File

@ -5,7 +5,7 @@
<PhongMaterial id="material" color="#ff0000"></PhongMaterial> <PhongMaterial id="material" color="#ff0000"></PhongMaterial>
<Scene id="scene1"> <Scene id="scene1">
<PointLight :position="{ x: 0, y: 150, z: 150 }" :cast-shadow="true" :shadow-map-size="{ width: 1024, height: 1024 }"></PointLight> <PointLight ref="light" :position="{ x: 0, y: 150, z: 150 }" :cast-shadow="true" :shadow-map-size="{ width: 1024, height: 1024 }"></PointLight>
<InstancedMesh ref="imesh" material="material" :count="1000" :cast-shadow="true" :receive-shadow="true"> <InstancedMesh ref="imesh" material="material" :count="1000" :cast-shadow="true" :receive-shadow="true">
<BoxGeometry :size="5"></BoxGeometry> <BoxGeometry :size="5"></BoxGeometry>
</InstancedMesh> </InstancedMesh>
@ -31,8 +31,6 @@ export default {
InstancedMesh, BoxGeometry, InstancedMesh, BoxGeometry,
}, },
mounted() { mounted() {
const renderer = this.$refs.renderer;
const { randFloat: rnd, randFloatSpread: rndFS } = MathUtils; const { randFloat: rnd, randFloatSpread: rndFS } = MathUtils;
const imesh = this.$refs.imesh.mesh; const imesh = this.$refs.imesh.mesh;
const dummy = new Object3D(); const dummy = new Object3D();
@ -46,7 +44,12 @@ export default {
} }
imesh.instanceMatrix.needsUpdate = true; imesh.instanceMatrix.needsUpdate = true;
const renderer = this.$refs.renderer;
const light = this.$refs.light.light;
renderer.onBeforeRender(() => { renderer.onBeforeRender(() => {
const t = Date.now() * 0.0001;
const c1 = Math.cos(t), c2 = c1 * Math.sin(t * 1.4), c3 = c2 * Math.cos(t * 0.3);
light.position.set(c1 * 100, c2 * 100, c3 * 100);
}); });
}, },
}; };

View File

@ -0,0 +1,14 @@
<template>
<GLTFViewer src="test.glb" :camera-position="{ z: 1 }">
<AmbientLight></AmbientLight>
</GLTFViewer>
</template>
<script>
import { AmbientLight } from '../index.js';
import GLTFViewer from './viewers/GLTFViewer.vue';
export default {
components: { GLTFViewer, AmbientLight },
};
</script>

View File

@ -0,0 +1,32 @@
<template>
<Renderer ref="renderer" :orbit-ctrl="{ enableDamping: true, dampingFactor: 0.05 }">
<Camera ref="camera" :position="cameraPosition"></Camera>
<Scene>
<slot></slot>
</Scene>
</Renderer>
</template>
<script>
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
import { Renderer, Camera, Scene } from '../../index.js';
import { setFromProp } from '../../tools.js';
export default {
components: { Renderer, Camera, Scene },
props: {
src: String,
cameraPosition: Object,
},
mounted() {
this.renderer = this.$refs.renderer;
setFromProp(this.$refs.camera.position, this.cameraPosition);
const loader = new GLTFLoader();
loader.load(this.src, (gltf) => {
this.renderer.three.scene.add(gltf.scene);
});
},
};
</script>

View File

@ -18,6 +18,9 @@ export default {
this.three.scene = this.scene; this.three.scene = this.scene;
}, },
render() { render() {
return this.$slots.default(); if (this.$slots.default) {
return this.$slots.default();
}
return [];
}, },
}; };

View File

@ -21,8 +21,10 @@ export default {
mounted() { mounted() {
setFromProp(this.light.position, this.position); setFromProp(this.light.position, this.position);
this.light.castShadow = this.castShadow; if (this.light.shadow) {
setFromProp(this.light.shadow.mapSize, this.shadowMapSize); this.light.castShadow = this.castShadow;
setFromProp(this.light.shadow.mapSize, this.shadowMapSize);
}
this.scene.add(this.light); this.scene.add(this.light);
if (this.light.target) this.scene.add(this.light.target); if (this.light.target) this.scene.add(this.light.target);