web3D之常見幾何體

常用幾何體概念

所有幾何體的基類分為Geometry和BufferGeometry兩大類,兩類幾何體直接可以相互轉(zhuǎn)化。
注:以下所有示例材質(zhì)(材質(zhì)的具體概念下次再講)選用均建議用如下:

//第一個(gè)參數(shù)是幾何體顏色  第二個(gè)為網(wǎng)格 線框展示 圖形容易觀察
const material = new THREE.MeshBasicMaterial({ color: 0x8B4C39,wireframe: true });

立方幾何體(BoxGeometry)

構(gòu)造器
BoxGeometry(width : Float, height : Float, depth : Float, widthSegments : Integer, heightSegments : Integer, depthSegments : Integer)
width — X軸上面的寬度
height — Y軸上面的高度
depth — Z軸上面的深度
widthSegments — (可選)寬度的分段數(shù),默認(rèn)值是1。
heightSegments — (可選)寬度的分段數(shù),默認(rèn)值是1宅静。
depthSegments — (可選)寬度的分段數(shù),默認(rèn)值是1站欺。
new THREE.BoxGeometry( 1, 1, 1 );
立方體

圓柱幾何體(CylinderGeometry)

//構(gòu)造器
CylinderGeometry(radiusTop : Float, radiusBottom : Float, height : Float, radialSegments : Integer, heightSegments : Integer, openEnded : Boolean, thetaStart : Float, thetaLength : Float)
radiusTop — 圓柱的頂部半徑姨夹,默認(rèn)值是1究驴。
radiusBottom — 圓柱的底部半徑,默認(rèn)值是1匀伏。
height — 圓柱的高度洒忧,默認(rèn)值是1。
radialSegments — 圓柱側(cè)面周圍的分段數(shù)够颠,默認(rèn)為8熙侍。
heightSegments — 圓柱側(cè)面沿著其高度的分段數(shù),默認(rèn)值為1履磨。
openEnded — 一個(gè)Boolean值蛉抓,指明該圓錐的底面是開放的還是封頂?shù)摹DJ(rèn)值為false剃诅,即其底面默認(rèn)是封頂?shù)摹?thetaStart — 第一個(gè)分段的起始角度巷送,默認(rèn)為0。(three o'clock position)
thetaLength — 圓柱底面圓扇區(qū)的中心角矛辕,通常被稱為“θ”(西塔)笑跛。默認(rèn)值是2*Pi,這使其成為一個(gè)完整的圓柱聊品。
new THREE.CylinderGeometry( 5, 5, 20, 32 );
圓柱體

球幾何體(SphereGeometry)

//構(gòu)造器
SphereGeometry(radius : Float, widthSegments : Integer, heightSegments : Integer, phiStart : Float, phiLength : Float, thetaStart : Float, thetaLength : Float)
radius — 球體半徑飞蹂,默認(rèn)為1。
widthSegments — 水平分段數(shù)(沿著經(jīng)線分段)翻屈,最小值為3陈哑,默認(rèn)值為8。
heightSegments — 垂直分段數(shù)(沿著緯線分段)伸眶,最小值為2惊窖,默認(rèn)值為6。
phiStart — 指定水平(經(jīng)線)起始角度厘贼,默認(rèn)值為0界酒。。
phiLength — 指定水平(經(jīng)線)掃描角度的大小涂臣,默認(rèn)值為 Math.PI * 2盾计。
thetaStart — 指定垂直(緯線)起始角度,默認(rèn)值為0赁遗。
thetaLength — 指定垂直(緯線)掃描角度大小,默認(rèn)值為 Math.PI族铆。
該幾何體是通過掃描并計(jì)算圍繞著Y軸(水平掃描)和X軸(垂直掃描)的頂點(diǎn)來創(chuàng)建的岩四。 因此,不完整的球體(類似球形切片)可以通過為phiStart哥攘,phiLength剖煌,thetaStart和thetaLength設(shè)置不同的值來創(chuàng)建材鹦, 以定義我們開始(或結(jié)束)計(jì)算這些頂點(diǎn)的起點(diǎn)(或終點(diǎn))。
new THREE.SphereGeometry( 5, 32, 32 )
球幾何體

圓錐幾何體(ConeGeometry)

ConeGeometry(radius : Float, height : Float, radialSegments : Integer, heightSegments : Integer, openEnded : Boolean, thetaStart : Float, thetaLength : Float)
radius — 圓錐底部的半徑耕姊,默認(rèn)值為1桶唐。
height — 圓錐的高度,默認(rèn)值為1茉兰。
radialSegments — 圓錐側(cè)面周圍的分段數(shù)尤泽,默認(rèn)為8。
heightSegments — 圓錐側(cè)面沿著其高度的分段數(shù)规脸,默認(rèn)值為1坯约。
openEnded — 一個(gè)Boolean值,指明該圓錐的底面是開放的還是封頂?shù)哪肌DJ(rèn)值為false闹丐,即其底面默認(rèn)是封頂?shù)摹?thetaStart — 第一個(gè)分段的起始角度,默認(rèn)為0被因。(three o'clock position)
thetaLength — 圓錐底面圓扇區(qū)的中心角卿拴,通常被稱為“θ”(西塔)。默認(rèn)值是2*Pi梨与,這使其成為一個(gè)完整的圓錐惋耙。
new THREE.ConeGeometry( 5, 20, 32 )
圓錐體

演示代碼

注:演示代碼中只需替換initObject()中的東西即可,更改幾何體形狀行剂,替換對應(yīng)的構(gòu)造器就可以

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
            div#canvas-frame {
                border: none;
                cursor: pointer;
                width: 100%;
                height: 800px;
                background-color: white;
            }

        </style>
    <script src="./js/three.js"></script>
      <!-- 常用相機(jī)控制器处面,依賴文件目錄 three.js\examples\js\controls -->
    <script  src="./js/OrbitControls.js"></script>
</head>
<body>
    <body onload="threeStart();">
        <div id="canvas-frame"></div>
    </body>

    <script>
        var axesHelper;
        var renderer;
        var scene;
        var camera;
        var orbitcontrols;
        init();
        function init(){
            //初始化坐標(biāo)系
            axesHelper = new THREE.AxesHelper( 10000 );
            axesHelper.position.y = 0;
            // 初始化渲染器
            let width = document.getElementById('canvas-frame').clientWidth;
            let height = document.getElementById('canvas-frame').clientHeight;
            renderer = new THREE.WebGLRenderer({
                antialias : true
            });
            renderer.setSize(width, height);
            document.getElementById('canvas-frame').appendChild(renderer.domElement);
            renderer.setClearColor(0xFFFFFF, 1.0);
            // 初始化場景
            scene = new THREE.Scene();
            scene.background = new THREE.Color(0XFFFFFF);
            //場景添加坐標(biāo)系
            scene.add( axesHelper);
            //初始化相機(jī)
            camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
            camera.position.set(0,15,0);
            camera.up.set(0,1,0)
            camera.lookAt(0, 0, 0)
            //初始化引擎控制
            orbitcontrols = new THREE.OrbitControls(camera,renderer.domElement);
            orbitcontrols.rotateSpeed = -0.25;
            initObject() ;
        }
        function initObject() {
            //BoxGeometry(1, 50, 50) 立方體 
            //CylinderGeometry( 5, 5, 20, 32 ) 圓柱體
            //ConeGeometry( 5, 20, 32 ) 圓錐體
            //SphereGeometry( 5, 50, 50 ) 球體
            const geometry = new  THREE.BoxGeometry( 5, 50, 50 ); //幾何體 直接替換上述幾何體就可以看到不同的畫面
            const material = new THREE.MeshBasicMaterial({ color: 0x8B4C39,wireframe: true }); //材質(zhì)
            var cube = new THREE.Mesh(geometry,material)
            scene.add(cube);
     }
        function threeStart() {
                renderer.clear();
                requestAnimationFrame( threeStart );
                orbitcontrols.update(); // required when damping is enabled
                renderer.render( scene, camera );
            }
    </script>
</body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市陷虎,隨后出現(xiàn)的幾起案子到踏,更是在濱河造成了極大的恐慌,老刑警劉巖尚猿,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窝稿,死亡現(xiàn)場離奇詭異,居然都是意外死亡凿掂,警方通過查閱死者的電腦和手機(jī)伴榔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庄萎,“玉大人踪少,你說我怎么就攤上這事】诽危” “怎么了援奢?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忍捡。 經(jīng)常有香客問我集漾,道長切黔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任具篇,我火速辦了婚禮纬霞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驱显。我一直安慰自己诗芜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布秒紧。 她就那樣靜靜地躺著绢陌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熔恢。 梳的紋絲不亂的頭發(fā)上脐湾,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機(jī)與錄音叙淌,去河邊找鬼秤掌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鹰霍,可吹牛的內(nèi)容都是我干的闻鉴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茂洒,長吁一口氣:“原來是場噩夢啊……” “哼孟岛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起督勺,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤渠羞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后智哀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體次询,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年瓷叫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屯吊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摹菠,死狀恐怖盒卸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辨嗽,我是刑警寧澤世落,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站糟需,受9級特大地震影響屉佳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洲押,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一武花、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杈帐,春花似錦体箕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至站叼,卻和暖如春娃兽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尽楔。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工投储, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阔馋。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓玛荞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親呕寝。 傳聞我的和親對象是個(gè)殘疾皇子勋眯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

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