glViewPort()
openGL 中的glViewPort 官方定義為,視口變換。
意思是將已經(jīng)通過透視除法轉(zhuǎn)換為歸一化的坐標的相應數(shù)據(jù),轉(zhuǎn)化到具體的屏幕(窗口)坐標。
該接口,有4個參數(shù),x,y,width,height。具體區(qū)別通過下圖展示。
正常顯示時的參數(shù):
-
這里傳入的參數(shù)為glViewPort(0,0,width,height),此時數(shù)據(jù)可以正常渲染到屏幕上。
image.png
只改變width參數(shù):
- 這里傳入的參數(shù)為glViewPort(0,0,width/2,height),此時數(shù)據(jù)和正常時相比寬度變成了之前的一半。
-
由此可以說明右側(cè)為x的正方向。且數(shù)據(jù)的寬是由x和width控制的。
image.png
只改變height參數(shù):
- 這里傳入的參數(shù)為glViewPort(0,0,width,height/2),此時數(shù)據(jù)和正常時相比高度變成了之前的一半。
-
由此可以說明上方為y的正方向。且數(shù)據(jù)的高是由y和height控制的。
image.png
同時改變width和height參數(shù):
- 這里傳入的參數(shù)為glViewPort(0,0,width/2,height/2),此時數(shù)據(jù)和正常時相比寬度變成了之前的一半,高度也變成了之前的一半。
-
由此可以說明渲染到屏幕的數(shù)據(jù)具體大小,是x,y,width,height共同控制的(貌似是句廢話)
image.png
只改變x參數(shù):
- 這里傳入的參數(shù)為glViewPort(width/2,0,width,height),此時數(shù)據(jù)和正常時相比。大小沒有變化,整體向右偏移了width/2個像素。且超出部分沒有顯示
-
由此可以說明數(shù)據(jù)x軸的起始位置由x參數(shù)控制,如果x+width>width即超出了屏幕像素的寬,x方向超出部分將不顯示。
image.png
只改變y參數(shù):
- 這里傳入的參數(shù)為glViewPort(width/2,height/2,width,height),此時數(shù)據(jù)和正常時相比。大小沒有變化,整體向上偏移了height/2個像素。且超出部分沒有顯示

image.png
同時改變x,y參數(shù):
- 這里傳入的參數(shù)為glViewPort(0,height/2,width,height),此時數(shù)據(jù)和正常時相比。大小沒有變化,整體向上偏移了height/2個像素。且超出部分沒有顯示
-
由此可以說明數(shù)據(jù)y軸的起始位置由y參數(shù)控制,如果y+height>height即超出了屏幕像素的高,y方向超出的部分將不顯示。
image.png
同時改變x,y,width,height,參數(shù):
- 這里傳入的參數(shù)為glViewPort(width/2,height/2,width/2,height/2)。,此時數(shù)據(jù)和正常時相比。起始位置為屏幕正中間(width/2,height/2),寬高分別為:width/2,height/2。
-
可以正常繪制,沒有超出屏幕范圍,且大小為正常渲染的四分之一。
image.png
glViewPort()作用總結(jié):由上圖可以得出結(jié)果。
為歸一化坐標轉(zhuǎn)換為屏幕坐標的接口。
換言之將整張紋理上的數(shù)據(jù),轉(zhuǎn)換到屏幕上具體的像素點的接口。
x,y為以控件左下角為起始坐標,對應渲染紋理的左下角。
右為x軸的正方向。
上為y軸的正方向。
width,height是以x,y為起始位置的寬和高,用來確定渲染出的數(shù)據(jù)到屏幕的位置。
可以在屏幕上正常渲染出來的像素范圍為x軸:0--width,y軸:0--height。超出部分將不顯示。
用戶可以通過該接口,控制數(shù)據(jù)渲染到屏幕的具體位置和范圍。
如果超過該空間的屏幕像素,將不顯示。但并不意味著opengGL沒有繪制超出顯示部分的紋理數(shù)據(jù)。






