背景透明

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>設(shè)置背景透明度</title>
    <style>
        body {
            margin: 0;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div style="position: relative;">
        <img src="../assets/img/01.jpg" style="position: absolute;"/>
        <div id="container" style="position: absolute;">
            <input type="button" id="btn1" style="position: absolute; margin-top: 10px; margin-left: 10px;" value="去除背景"/>
        </div>
    </div>

    <script type="module">
        import * as THREE from "../node_modules/three/build/three.module.js";
        import { OrbitControls } from '../node_modules/three/examples/jsm/controls/OrbitControls.js';
        import { GLTFLoader } from '../node_modules/three/examples/jsm/loaders/GLTFLoader.js';
        let camera, orbitControls, scene, renderer;

        init();
        animate();

        document.getElementById("btn1").onclick = () => {
            scene.background = null;
        };

        function init() {
            scene = new THREE.Scene();
            scene.background = new THREE.Color(0x00ffff);
           
            renderer = new THREE.WebGLRenderer({
                antialias: true,
                alpha: true
            });
            renderer.setPixelRatio(window.devicePixelRatio);
            renderer.setSize(window.innerWidth, window.innerHeight);
            renderer.setClearAlpha(0.3);
            document.getElementById("container").appendChild(renderer.domElement);

            camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 0.1, 100000);
            camera.position.set( 0, 50, 50 );

            orbitControls = new OrbitControls(camera, renderer.domElement);
            orbitControls.enableDamping = true;
            orbitControls.dampingFactor = 0.05;
            orbitControls.screenSpacePanning = false;
            orbitControls.maxPolarAngle = Math.PI / 2;

            const ambientLight = new THREE.AmbientLight(0xffffff, 0.4);
            scene.add(ambientLight);

            let directionalLight = new THREE.DirectionalLight("#ffffff");
            directionalLight.position.set(0, 30, 0);
            scene.add(directionalLight);
            
            const loader = new GLTFLoader();

            loader.load("../assets/models/group.glb", gltf => {
                const gltfScene = gltf.scene || gltf.scenes[0];
                gltfScene.position.set(0, 0, 0);
                gltfScene.scale.set(5, 5, 5);
                const box = new THREE.Box3().setFromObject(gltfScene);
                const center = box.getCenter(new THREE.Vector3());
                gltfScene.translateX(-center.x);
                gltfScene.translateY(-center.y);
                gltfScene.translateZ(-center.z);
                scene.add(gltfScene);
            });

            window.addEventListener('resize', onWindowResize, false);
        }

        function onWindowResize() {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        }

        function animate() {
            requestAnimationFrame(animate);
            orbitControls.update();
            render();
        }

        function render() {
            renderer.render(scene, camera);
        }
    </script>
</body>
</html>

注:

  1. 如果設(shè)置了場景的背景稍刀,包括背景顏色帐萎、背景圖片以及環(huán)境貼圖比伏,則背景透明度設(shè)置會失效,因此要想設(shè)置背景的透明度疆导,需要清除場景的背景設(shè)置赁项;
  2. 在創(chuàng)建WebGLRenderer時,需要把alpha屬性設(shè)為true澈段,否則背景透明不生效悠菜;
  3. 不要直接設(shè)置掛載threejs的canvas的透明度,這樣會使場景中所有的模型都具有和canvas相同的透明度败富;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悔醋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子兽叮,更是在濱河造成了極大的恐慌芬骄,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹦聪,死亡現(xiàn)場離奇詭異账阻,居然都是意外死亡,警方通過查閱死者的電腦和手機泽本,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門淘太,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人规丽,你說我怎么就攤上這事蒲牧。” “怎么了嘁捷?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵造成,是天一觀的道長显熏。 經(jīng)常有香客問我雄嚣,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任缓升,我火速辦了婚禮鼓鲁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘港谊。我一直安慰自己骇吭,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布歧寺。 她就那樣靜靜地躺著燥狰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斜筐。 梳的紋絲不亂的頭發(fā)上龙致,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音顷链,去河邊找鬼目代。 笑死,一個胖子當著我的面吹牛嗤练,可吹牛的內(nèi)容都是我干的榛了。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼煞抬,長吁一口氣:“原來是場噩夢啊……” “哼霜大!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起此疹,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤僧诚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝗碎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湖笨,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年蹦骑,在試婚紗的時候發(fā)現(xiàn)自己被綠了慈省。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡眠菇,死狀恐怖边败,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捎废,我是刑警寧澤笑窜,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站登疗,受9級特大地震影響排截,放射性物質(zhì)發(fā)生泄漏嫌蚤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一断傲、第九天 我趴在偏房一處隱蔽的房頂上張望脱吱。 院中可真熱鬧,春花似錦认罩、人聲如沸箱蝠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宦搬。三九已至,卻和暖如春劫拗,著一層夾襖步出監(jiān)牢的瞬間床三,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工杨幼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撇簿,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓差购,卻偏偏與公主長得像四瘫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子欲逃,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容