国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

threejs中矩陣旋轉原理

gyl_coder / 2832人閱讀

摘要:如創建一個的矩陣將上面創建的矩陣按照傳入的軸旋轉傳入的弧度旋轉軸,旋轉弧度原型上的方法值為值為初始值為執行之后的值為將按照旋轉軸和弧度旋轉完成的矩陣和幾何體的矩陣相乘框架源碼這里的是因為只傳入一個值和是全等的

矩陣的概念 threejs中的矩陣 矩陣的應用 用于旋轉一個幾何體 創建一個立方體cube放到場景中;

繞向量(1,1,0)旋轉30度
var axis = new THREE.Vector3(1,1,0);    //創建一個三維向量
var rotWorldMatrix = new THREE.Matrix4();      //創建一個4*4矩陣
rotWorldMatrix.makeRotationAxis(axis.normalize(),  30 * Math.PI / 180 );
rotWorldMatrix.multiply(cube.matrix);                // pre-multiply
cube.matrix = rotWorldMatrix;
cube.rotation.setFromRotationMatrix(cube.matrix);
旋轉之前與之后對比

向量一定是從幾何體中心指向外面?

能圍繞一個不以圓點位起點的向量旋轉?

代碼詳解
創建一個三維空間中的點
var axis = new THREE.Vector3(1,1,0); 

打印出axios

THREE.Vector3(1,1,0).normalize()
axis.normalize()  //返回一個向量,其方向與指定向量相同,但長度為一。
如:
var axis = new THREE.Vector3(10,20,0);
console.log( axis.normalize() );   //{x: 0.4472135954999579, y: 0.8944271909999159, z: 0}
(0.4472135954999579^2)+(0.8944271909999159^2)+(0^2) = 1

var axis1 = new THREE.Vector3(1,1,0);
console.log( axis1.normalize() )   //{x: 0.7071067811865475, y: 0.7071067811865475, z: 0}
(0.7071067811865475^2)+(0.7071067811865475^2)+(0^2) = 1
創建一個4*4的矩陣
var rotWorldMatrix = new THREE.Matrix4();
console.log( rotWorldMatrix )

將上面創建的4×4矩陣按照傳入的軸旋轉傳入的弧度

rotWorldMatrix.makeRotationAxis( 旋轉軸,旋轉弧度 )

//Matrix4原型上的方法
//axis = axis.normalize()   值為 {x: 0.7071067811865475, y: 0.7071067811865475, z: 0}
//angle = 30 * Math.PI / 180     值為 pi/6
makeRotationAxis: function ( axis, angle ) {

    var c = Math.cos( angle );    //Math.cos(π/6)
    var s = Math.sin( angle );    //Math.sin(π/6)
    var t = 1 - c;
    var x = axis.x, y = axis.y, z = axis.z;
    var tx = t * x, ty = t * y;

    this.set(

        tx * x + c, tx * y - s * z, tx * z + s * y, 0,
        tx * y + s * z, ty * y + c, ty * z - s * x, 0,
        tx * z - s * y, ty * z + s * x, t * z * z + c, 0,
        0, 0, 0, 1

    );

     return this;

},

rotWorldMatrix.makeRotationAxis(axis.normalize(), 30 * Math.PI / 180 );
rotWorldMatrix初始值為{ elements:[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }
執行makeRotationAxis()之后的值為:

將按照旋轉軸和弧度旋轉完成的矩陣和幾何體的矩陣相乘

rotWorldMatrix.multiply(cube.matrix);

//框架源碼
multiply: function ( m, n ) {
    if ( n !== undefined ) {      //這里的n是undefined因為只傳入一個值cube.matrix
        return this.multiplyMatrices( m, n );
    }
    return this.multiplyMatrices( this, m );
},
multiplyMatrices: function ( a, b ) {

    var ae = a.elements;   //rotWorldMatrix.elements
    var be = b.elements;   //cube.matrix.elements
    var te = this.elements;  //ae和te是全等的

    var a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];
    var a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];
    var a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];
    var a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];

    var b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];
    var b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];
    var b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];
    var b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];

    te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;
    te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;
    te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;
    te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;

    te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;
    te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;
    te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;
    te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;

    te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;
    te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;
    te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;
    te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;

    te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;
    te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;
    te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;
    te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;

    return this;

},

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88490.html

相關文章

  • SegmentFault 技術周刊 Vol.35 - WebGL:打開網頁看大片

    摘要:在文末,我會附上一個可加載的模型方便學習中文藝術字渲染用原生可以很容易地繪制文字,但是原生提供的文字效果美化功能十分有限。 showImg(https://segmentfault.com/img/bVWYnb?w=900&h=385); WebGL 可以說是 HTML5 技術生態鏈中最為令人振奮的標準之一,它把 Web 帶入了 3D 的時代。 初識 WebGL 先通過幾個使用 Web...

    objc94 評論0 收藏0
  • Threejs教程之著色器

    摘要:學習基礎具備基本和著色器語言知識,不一定要深入學習。著色器所謂的材質對象本質上就是著色器代碼和需要傳遞的數據光源顏色矩陣。比更方便些,著色器中的很多變量不用聲明,系統會自動幫你設置,比如頂點坐標變量投影矩陣視圖矩陣 Three.js著色器 很多時候如果想寫一些特效,往往需要編寫著色器代碼GLSL,如果你不熟悉著色器語言,自然需要學習著色器語言語法,如果你有著色器語言基礎,直接使用Thr...

    darkbaby123 評論0 收藏0
  • 高仿騰訊QQ Xplan(X計劃)的H5頁面(1):threejs創建地球

    摘要:首先是這個地球,得看看它是真還是假因為很多效果是拿雪碧圖做的,比如這里的旋轉的飛機,結果找到了并且在網站文件中搜到了,那就是沒跑了。 上個月底,在朋友圈看到一個號稱這可能是地球上最美的h5的分享,點進入后發現這個h5還很別致,思考了一會,決定要不高仿一個? 到今天為止,高仿基本完成, 線上地址 github地址 除了手機端的media控制沒有去兼容,其他的基本都給仿了。 那為了讓你...

    MartinHan 評論0 收藏0
  • 在SAP UI使用純JavaScript顯示產品主數據的3D模型視圖

    摘要:以為例,在產品主數據的頁面工具欄上新增了一個按鈕,點擊之后,會顯示一個彈出窗口,在瀏覽器里利用調用本地安裝的應用,顯示該產品主數據的視圖。本文介紹的是另一種用純編程來以方式顯示產品主數據的解決方案。 在Jerry寫這篇文章時,通過Google才知道,SAP其實是有自己的3D模型視圖顯示解決方案的。 showImg(https://segmentfault.com/img/remote/...

    FingerLiu 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<