国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

GLSL——旋轉、平移和縮放

這篇具有很好參考價值的文章主要介紹了GLSL——旋轉、平移和縮放。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

hello 兄弟們,好久不見撒,我又回來啦!,今天主要講解如何在頂點著色器中進行旋轉、平移和縮放,涉及到矩陣和向量方面的知識哦,忘記的可以翻一下高中數(shù)學啦,在講之前,先回顧一下矩陣和向量點積的知識,矩陣點乘向量,等于矩陣的每一行分別和向量相乘的和,如圖1所示,單位矩陣和向量(x,y,z,w)的點乘:

glsl是圖元旋轉繞y軸,shader,glsl,OpenGL,矩陣,著色器,c++

圖1

?一、旋轉

圖2所示,x軸上一點,繞z軸先轉α角度后到B點的位置,求B點的坐標:

glsl是圖元旋轉繞y軸,shader,glsl,OpenGL,矩陣,著色器,c++

圖2

?利用和角公式可得B點的坐標:

? ? ? ? ? ? ? ? ? ? ? ? f(x) = x*cos(α) - y*sin(α);

? ? ? ? ? ? ? ? ? ? ? ? f(y) = x*sin(α) + y*cos(α);

結合圖1的矩陣,若要f(x) = x*cos(α) - y*sin(α),則矩陣的第一行元素為(cos(α), -sin(α), 0, 0),若要f(y) = x*sin(α) + y*cos(α),則矩陣的第二行元素為(sin(α), cos(α), 0, 0),所以矩陣為圖3所示,因為我們計算矩陣用的是行主序,而shader中用的是列主序,需要將行主序轉換成列主序:

glsl是圖元旋轉繞y軸,shader,glsl,OpenGL,矩陣,著色器,c++glsl是圖元旋轉繞y軸,shader,glsl,OpenGL,矩陣,著色器,c++

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖3

了解了原理后,就可以在shader中進行旋轉了。我畫了一個正方形(具體畫法看我前幾篇文章,這里不做介紹,直接在頂點shader里進行旋轉),讓正方形旋轉30°,代碼如下:

attribute vec3 kzPosition;
uniform highp mat4 kzProjectionCameraWorldMatrix;
void main()
{
    precision mediump float;
    //度數(shù)轉為弧度制
    float angle = radians(30.);

    //旋轉矩陣
    mat4 m4 = mat4(
    cos(angle), sin(angle), 0.0, 0.0,
    -sin(angle), cos(angle), 0.0, 0.0,
    0.0,        0.0,         1.0, 0.0,
    0.0,        0.0,         0.0, 1.0
    );
    
    vec4 pos = m4 * vec4(kzPosition, 1.0);
    gl_Position = kzProjectionCameraWorldMatrix * pos;
}

?效果圖如圖4所示:

glsl是圖元旋轉繞y軸,shader,glsl,OpenGL,矩陣,著色器,c++

圖4

?二、平移

讓圖形沿x軸平移100,沿y平移200,也就是讓圖1中的x為x+100,讓y為y+200,那么和什么矩陣點乘會得到想要的結果呢?我們可以看到,圖1的矩陣出了(x,y,z),還有個w的元素,這個w也就是矩陣的齊次坐標(自行補習知識,這里不做贅述),我們可以通過w來改變圖形的位移,得到的平移矩陣如圖5所示:(記得在shader中使用的是列主席哦)

glsl是圖元旋轉繞y軸,shader,glsl,OpenGL,矩陣,著色器,c++

?平移代碼:

attribute vec3 kzPosition;
uniform highp mat4 kzProjectionCameraWorldMatrix;
void main()
{
    precision mediump float;
    float tx = 100.;
    float ty = 200.;
    float tz = 0.;
    //x,y移動100,200
    mat4 m = mat4(
        1.0, 0.0, 0.0, 0.0,
        0.0, 1.0, 0.0, 0.0,
        0.0, 0.0, 1.0, 0.0,
        tx,  ty,  tz,  1.0
    );
    
    vec4 pos = m * vec4(kzPosition, 1.);
    gl_Position = kzProjectionCameraWorldMatrix * pos;
}

?三、縮放

如果使圖片的x和y各縮放0.5倍,那么圖1中的x應該為0.5x,y應為0.5y,即矩陣的第一行的結果為0.5x,第二行為0.5y,則矩陣第一行的x的元素就應該是0.5,第二行的y元素也應該是0.5,得到的矩陣如圖6:

glsl是圖元旋轉繞y軸,shader,glsl,OpenGL,矩陣,著色器,c++

代碼:

attribute vec3 kzPosition;
uniform highp mat4 kzProjectionCameraWorldMatrix;
void main()
{
    precision mediump float;
    float sx = 0.5;
    float sy = 0.5;
    float sz = 1.;
    mat4 m = mat4(
        sx,  0.0, 0.0, 0.0,
        0.0, sy,  0.0, 0.0,
        0.0, 0.0, sz, 0.0,
        0.0, 0.0, 0.0, 1.0
    );
    
    vec4 pos = vec4(kzPosition, 1.) * m;
    gl_Position = kzProjectionCameraWorldMatrix * pos;
}

?效果圖如圖7所示:(相較于圖4,縮小了0.5倍)

glsl是圖元旋轉繞y軸,shader,glsl,OpenGL,矩陣,著色器,c++

圖7文章來源地址http://www.zghlxwxcb.cn/news/detail-596821.html

到了這里,關于GLSL——旋轉、平移和縮放的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Halcon用矩陣實現(xiàn)圖像變換(平移,旋轉,縮放,鏡像等)

    Halcon用矩陣實現(xiàn)圖像變換(平移,旋轉,縮放,鏡像等)

    目錄 圖像變換介紹 ?用Halcon自帶的算子實現(xiàn)圖像變換 使用矩陣來實現(xiàn)相關算子的功能 一、平移 二、旋轉 三、縮放 四、鏡像 完整代碼 ????????在halcon中經(jīng)常會用到圖像變換的操作,然后這次作業(yè)是用矩陣來實現(xiàn)相關算子的功能,學到了挺多的所以就記錄下來方便復習。

    2024年04月17日
    瀏覽(230)
  • 第三章 OpenGL ES 基礎-基礎-GLSL渲染紋理

    第三章 OpenGL ES 基礎-基礎-GLSL渲染紋理

    第一章 OpenGL ES 基礎-屏幕、紋理、頂點坐標 第二章 OpenGL ES 基礎-GLSL語法簡單總結 第三章 OpenGL ES 基礎-GLSL渲染紋理 第四章 OpenGL ES 基礎-位移、縮放、旋轉原理 第五章 OpenGL ES 基礎-透視投影矩陣與正交投影矩陣 第六章 OpenGL ES 基礎-FBO、VBO理解與運用 第七章 OpenGL ES 基礎-輸入

    2024年03月18日
    瀏覽(22)
  • QGraphicsView制作繪制圖元工具資料整理(鼠標、平移、縮放)

    QGraphicsView制作繪制圖元工具資料整理(鼠標、平移、縮放)

    QGraphicsView制作繪制工具資料整理 繼承自QGraphicsView的類中使用QGraphicsSceneMouseEvent 簡單顯示圖片的示例 Qt之QGraphicsView入門篇 Qt之QGraphicsView入門篇 鼠標事件和滾輪事件 鼠標事件和滾輪事件 QGraphicsItem的縮放 QGraphicsItem的縮放 QT官方文檔:QGraphicsItem Class QGraphicsItem Class Qt之QGraph

    2024年02月09日
    瀏覽(31)
  • OPENGL ES 2.0 知識串講 (6)——GLSL 語法(IV)

    上面兩節(jié),主要講解了 GLSL 中變量和函數(shù)的定義語法和使用語法,現(xiàn)在我們可以在 shader 中自定義一些我們所需要用到的變量和函數(shù)。但是在 shader 中, 還存在著一些內(nèi)置的變量和函數(shù)。這些變量主要是用于將 Shader 計算得到的值傳給 GPU,完成 Shader 在 Pipeline 中的功能。由于我們使

    2024年02月02日
    瀏覽(21)
  • 2D坐標系下的點的轉換矩陣(平移、縮放、旋轉、錯切)

    2D坐標系下的點的轉換矩陣(平移、縮放、旋轉、錯切)

    1. 平移 (Translation) 在2D空間中,我們經(jīng)常需要將一個點平移到另一個位置。假設空間中的一點 P ( x , y ) P(x,y) P ( x , y ) ;將其向 x , y x, y x , y 方向分別平移 t x t_x t x ? , t y t_y t y ? , 假設平移后點的坐標為 ( x ′ , y ′ ) (x\\\',y\\\') ( x ′ , y ′ ) ,則上述點的平移操作可以歸納為

    2024年02月15日
    瀏覽(21)
  • Unity矩陣平移旋轉縮放Matrix4x4

    Unity矩陣平移旋轉縮放Matrix4x4

    最近在研究幀同步定點數(shù)物理系統(tǒng)中需要自定義定點數(shù)矩陣,所以在這里分享下基礎的矩陣案例旋轉、平移、縮放。(注意這里本文中的transform組件式基于unity浮點數(shù)的教程并非幀同步定點數(shù))參考原文 參數(shù)可以參考我上圖的參數(shù),這里注意三個頂點是一個面,這里我上述的

    2024年01月17日
    瀏覽(23)
  • 【W(wǎng)ebgl_glsl&Threejs】搬運分享shader_飄落心形

    【W(wǎng)ebgl_glsl&Threejs】搬運分享shader_飄落心形

    將shadertory上的代碼轉成了threejs可以直接用的代碼,引入文件的material,并在創(chuàng)建mesh或已有物體上使用material即可,使用時請注意uv對齊。 flowHeart

    2024年04月27日
    瀏覽(19)
  • Android中矩陣Matrix實現(xiàn)平移,旋轉,縮放和翻轉的用法詳細介紹

    Android中矩陣Matrix實現(xiàn)平移,旋轉,縮放和翻轉的用法詳細介紹

    一,矩陣Matrix的數(shù)學原理 矩陣的數(shù)學原理涉及到矩陣的運算和變換,是高等代數(shù)學中的重要概念。在圖形變換中,矩陣起到關鍵作用,通過矩陣的變換可以改變圖形的位置、形狀和大小。矩陣的運算是數(shù)值分析領域的重要問題,對矩陣進行分解和簡化可以簡化計算過程。對于

    2024年01月22日
    瀏覽(38)
  • 三維變換矩陣實戰(zhàn)——三維點云的旋轉、縮放、鏡像、錯切、平移、正交投影

    三維變換矩陣實戰(zhàn)——三維點云的旋轉、縮放、鏡像、錯切、平移、正交投影

    旋轉矩陣:右邊矩陣是點云的原始坐標,左邊的是旋轉矩陣 ??? 可視化:繞x軸旋轉90度 代碼: 旋轉矩陣: ?? 可視化:繞y軸旋轉180度 代碼: 旋轉矩陣: ?? 可視化:繞z軸旋轉90度 代碼: 旋轉矩陣:? 線繞哪個軸轉,xyz矩陣就和哪和軸的旋轉矩陣先計算 ???? 可視化:先

    2024年02月04日
    瀏覽(31)
  • Unity記錄一些glsl和hlsl的著色器Shader逆向代碼

    以下內(nèi)容一般基于 GLSL 300 之后 以下某些代碼行,是“偽代碼“,絕大部分是renderDoc 逆向產(chǎn)生標準代碼 本人OpenlGL零基礎,也不打算重頭學 目錄 Clip() 剔除函數(shù) discard; FS最終顏色輸出 out 和最終顏色相加方程 從 discard; 命令可得知,一般通過透明度剔除, _26 == color.a _21.w 剛

    2024年02月07日
    瀏覽(50)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包