<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    OpenGL 學(xué)了那么久了,glViewport 你真的會(huì)用嗎?

    共 2436字,需瀏覽 5分鐘

     ·

    2023-08-23 10:33

    OpenGL中的 glViewport 函數(shù)用于定義視口(Viewport),即確定窗口中顯示的區(qū)域。它的定義如下:

          void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
        

    參數(shù)解釋:

    • x:視口的左下角X坐標(biāo)。
    • y:視口的左下角Y坐標(biāo)。
    • width:視口的寬度。
    • height:視口的高度。


    glViewport函數(shù)的作用是將正投影坐標(biāo)(OpenGL的默認(rèn)坐標(biāo)系)映射到屏幕上實(shí)際顯示的區(qū)域。它將正投影坐標(biāo)系中的點(diǎn)映射到屏幕上指定大小的矩形區(qū)域內(nèi)。

    在使用OpenGL進(jìn)行繪圖時(shí),我們通常需要先通過glViewport來設(shè)置視口,將整個(gè)窗口或窗口的一部分作為渲染區(qū)域。這樣,我們可以指定繪制的內(nèi)容在窗口的哪個(gè)位置顯示出來。

    正常顯示時(shí)的參數(shù)

    這里傳入的參數(shù)為 glViewport(0,0,width,height) ,此時(shí)數(shù)據(jù)可以正常渲染到屏幕上。

    65daddcb03afd24e528395a7efcdb155.webp


    只改變width參數(shù)

    這里傳入的參數(shù)為 glViewport(0,0,width/2,height),此時(shí)數(shù)據(jù)和正常時(shí)相比寬度變成了之前的一半。

    由此可以說明右側(cè)為x的正方向。且數(shù)據(jù)的寬是由x和width控制的。


    c5e82cc95a35e1192be1701cc6570aab.webp


    只改變 height 參數(shù)

    這里傳入的參數(shù)為 glViewport(0,0,width,height/2) ,此時(shí)數(shù)據(jù)和正常時(shí)相比高度變成了之前的一半。


    由此可以說明上方為y的正方向。 且數(shù)據(jù)的高是由 y 和 height 控制的。

    debe74bdf4799f8e0095f868e57cb4c1.webp


    同時(shí)改變 width 和 height 參數(shù)

    這里傳入的參數(shù)為  glViewport(0,0,width/2,height/2) ,此時(shí)數(shù)據(jù)和正常時(shí)相比寬度變成了之前的一半,高度也變成了之前的一半。


    由此可以說明渲染到屏幕的數(shù)據(jù)具體大小,是x,y,width,height共同控制的(貌似是句廢話)


    d34400df3b26ea04e3a50708d2c14592.webp


    只改變 x 參數(shù)

    這里傳入的參數(shù)為 glViewport(width/2,0,width,height) ,此時(shí)數(shù)據(jù)和正常時(shí)相比。大小沒有變化,整體向右偏移了width/2個(gè)像素。且超出部分沒有顯示

    由此可以說明數(shù)據(jù)x軸的起始位置由x參數(shù)控制,如果 x+width>width 即超出了屏幕像素的寬,x方向超出部分將不顯示。

    9df4f45f40bd8cc21c523f58568b05ab.webp


    只改變 y 參數(shù)

    這里傳入的參數(shù) glViewport(0,height/2,width,height) ,此時(shí)數(shù)據(jù)和正常時(shí)相比。 大小沒有變化,整體向上偏移了height/2個(gè)像素。 且超出部分沒有顯示

    6861901274274dbfdad5881764441c90.webp


    同時(shí)改變x,y參數(shù)

    這里傳入的參數(shù)為 glViewport(width/2,height/2,width,height) ,此時(shí)數(shù)據(jù)和正常時(shí)相比。大小沒有變化,整體向上偏移了height/2個(gè)像素,且超出部分沒有顯示。


    由此可以說明數(shù)據(jù)y軸的起始位置由y參數(shù)控制,如果y+height>height即超出了屏幕像素的高,y方向超出的部分將不顯示。


    3efe2c81fd77597a84c7a635639b4b4c.webp


    同時(shí)改變x,y,width,height,參數(shù)

    這里傳入的參數(shù)為 glViewport(width/2,height/2,width/2,height/2) 此時(shí)數(shù)據(jù)和正常時(shí)相比。 起始位置為屏幕正中間(width/2,height/2),寬高分別為: width/2,height/2。

    可以正常繪制,沒有超出屏幕范圍,且大小為正常渲染的四分之一。


    88e5e885aa708d4820b9da6b0e7e769c.webp


    glViewport() 作用總結(jié)


    為歸一化坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)的接口。換言之將整張紋理上的數(shù)據(jù),轉(zhuǎn)換到屏幕上具體的像素點(diǎn)的接口。
        
    x,y為以控件左下角為起始坐標(biāo),對(duì)應(yīng)渲染紋理的左下角:
    右為x軸的正方向。

    上為y軸的正方向。


    width,height是以x,y為起始位置的寬和高,用來確定渲染出的數(shù)據(jù)到屏幕的位置。


    可以在屏幕上正常渲染出來的像素范圍為x軸:0--width,y軸:0--height。超出部分將不顯示。

    用戶可以通過該接口,控制數(shù)據(jù)渲染到屏幕的具體位置和范圍。


    如果超過該空間的屏幕像素,將不顯示。但并不意味著OpengGL沒有繪制超出顯示部分的紋理數(shù)據(jù)。

    -- END --


    進(jìn)技術(shù)交流群,掃碼添加我的微信:Byte-Flow



    獲取相關(guān)資料和源碼



    推薦:

    Android FFmpeg 實(shí)現(xiàn)帶濾鏡的微信小視頻錄制功能

    全網(wǎng)最全的 Android 音視頻和 OpenGL ES 干貨,都在這了

    一文掌握 YUV 圖像的基本處理

    抖音傳送帶特效是怎么實(shí)現(xiàn)的?

    所有你想要的圖片轉(zhuǎn)場(chǎng)效果,都在這了

    面試官:如何利用 Shader 實(shí)現(xiàn) RGBA 到 NV21 圖像格式轉(zhuǎn)換?

    我用 OpenGL ES 給小姐姐做了幾個(gè)抖音濾鏡

    瀏覽 53
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    国产无码激情后入 | 蜜芽亚洲av无码精品色午夜 | 性感操逼| 樱桃码一区二区三区 | 免费在线视频一区 |