mirror of
https://github.com/troisjs/trois.git
synced 2024-11-24 04:12:02 +08:00
wip
This commit is contained in:
parent
101c680161
commit
44e290f475
@ -38,15 +38,18 @@ export default {
|
|||||||
width: String,
|
width: String,
|
||||||
height: String,
|
height: String,
|
||||||
},
|
},
|
||||||
setup(props) {
|
setup() {
|
||||||
return {
|
return {
|
||||||
three: useThree(),
|
three: useThree(),
|
||||||
raf: true,
|
raf: true,
|
||||||
|
onMountedCallbacks: [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
provide() {
|
provide() {
|
||||||
return {
|
return {
|
||||||
three: this.three,
|
three: this.three,
|
||||||
|
// renderer: this.three.renderer,
|
||||||
|
rendererComponent: this,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -68,12 +71,17 @@ export default {
|
|||||||
if (this.three.composer) this.animateC();
|
if (this.three.composer) this.animateC();
|
||||||
else this.animate();
|
else this.animate();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.onMountedCallbacks.forEach(c => c());
|
||||||
},
|
},
|
||||||
beforeUnmount() {
|
beforeUnmount() {
|
||||||
this.raf = false;
|
this.raf = false;
|
||||||
this.three.dispose();
|
this.three.dispose();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
onMounted(callback) {
|
||||||
|
this.onMountedCallbacks.push(callback);
|
||||||
|
},
|
||||||
onBeforeRender(callback) {
|
onBeforeRender(callback) {
|
||||||
this.three.onBeforeRender(callback);
|
this.three.onBeforeRender(callback);
|
||||||
},
|
},
|
||||||
|
@ -7,7 +7,7 @@ export default {
|
|||||||
id: String,
|
id: String,
|
||||||
background: [String, Number],
|
background: [String, Number],
|
||||||
},
|
},
|
||||||
setup (props) {
|
setup(props) {
|
||||||
const scene = new Scene();
|
const scene = new Scene();
|
||||||
if (props.background) scene.background = new Color(props.background);
|
if (props.background) scene.background = new Color(props.background);
|
||||||
watch(() => props.background, (value) => { scene.background = new Color(value); });
|
watch(() => props.background, (value) => { scene.background = new Color(value); });
|
||||||
@ -23,6 +23,14 @@ export default {
|
|||||||
this.three.scene = this.scene;
|
this.three.scene = this.scene;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
methods: {
|
||||||
|
// add(o) {
|
||||||
|
// this.scene.add(o);
|
||||||
|
// },
|
||||||
|
// remove(o) {
|
||||||
|
// this.scene.remove(o);
|
||||||
|
// },
|
||||||
|
},
|
||||||
render() {
|
render() {
|
||||||
if (this.$slots.default) {
|
if (this.$slots.default) {
|
||||||
return this.$slots.default();
|
return this.$slots.default();
|
||||||
|
@ -17,13 +17,15 @@ export default {
|
|||||||
cubeRTSize: { type: Number, default: 512 },
|
cubeRTSize: { type: Number, default: 512 },
|
||||||
cubeCameraNear: { type: Number, default: 0.1 },
|
cubeCameraNear: { type: Number, default: 0.1 },
|
||||||
cubeCameraFar: { type: Number, default: 2000 },
|
cubeCameraFar: { type: Number, default: 2000 },
|
||||||
|
cubeRTAutoUpdate: Boolean,
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.initGem();
|
this.initGem();
|
||||||
this.three.onBeforeRender(this.updateCubeRT);
|
if (this.cubeRTAutoUpdate) this.three.onBeforeRender(this.updateCubeRT);
|
||||||
|
else this.rendererComponent.onMounted(this.updateCubeRT);
|
||||||
},
|
},
|
||||||
unmounted() {
|
unmounted() {
|
||||||
this.three.offBeforeRender(this.upateCubeRT);
|
this.three.offBeforeRender(this.updateCubeRT);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
initGem() {
|
initGem() {
|
||||||
|
@ -3,7 +3,7 @@ import { watch } from 'vue';
|
|||||||
import useBindProp from '../use/useBindProp.js';
|
import useBindProp from '../use/useBindProp.js';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
inject: ['three', 'scene'],
|
inject: ['three', 'scene', 'rendererComponent'],
|
||||||
emits: ['ready'],
|
emits: ['ready'],
|
||||||
props: {
|
props: {
|
||||||
materialId: String,
|
materialId: String,
|
||||||
|
@ -14,13 +14,15 @@ export default {
|
|||||||
cubeRTSize: { type: Number, default: 512 },
|
cubeRTSize: { type: Number, default: 512 },
|
||||||
cubeCameraNear: { type: Number, default: 0.1 },
|
cubeCameraNear: { type: Number, default: 0.1 },
|
||||||
cubeCameraFar: { type: Number, default: 2000 },
|
cubeCameraFar: { type: Number, default: 2000 },
|
||||||
|
cubeRTAutoUpdate: Boolean,
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.initMirrorMesh();
|
this.initMirrorMesh();
|
||||||
this.three.onBeforeRender(this.upateCubeRT);
|
if (this.cubeRTAutoUpdate) this.three.onBeforeRender(this.updateCubeRT);
|
||||||
|
else this.rendererComponent.onMounted(this.updateCubeRT);
|
||||||
},
|
},
|
||||||
unmounted() {
|
unmounted() {
|
||||||
this.three.offBeforeRender(this.upateCubeRT);
|
this.three.offBeforeRender(this.updateCubeRT);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
initMirrorMesh() {
|
initMirrorMesh() {
|
||||||
@ -32,11 +34,10 @@ export default {
|
|||||||
this.material.envMap = cubeRT.texture;
|
this.material.envMap = cubeRT.texture;
|
||||||
this.material.needsUpdate = true;
|
this.material.needsUpdate = true;
|
||||||
},
|
},
|
||||||
upateCubeRT() {
|
updateCubeRT() {
|
||||||
this.mesh.visible = false;
|
this.mesh.visible = false;
|
||||||
this.cubeCamera.update(this.three.renderer, this.scene);
|
this.cubeCamera.update(this.three.renderer, this.scene);
|
||||||
this.mesh.visible = true;
|
this.mesh.visible = true;
|
||||||
console.log('upateCubeRT');
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
__hmrId: 'MirrorMesh',
|
__hmrId: 'MirrorMesh',
|
||||||
|
Loading…
Reference in New Issue
Block a user