在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Viewport 變換
繪制線段 Line Segment
投影變換 Projection
繪制迷你太陽系
繪制一個球體
繪制三角形 Triangle
OpenGL 光照模型
三維坐標系及坐標變換初步
定義 3D 模型的前面和后面
繪制一個 20 面體
顏色 Color
Depth Buffer
材質及光照示例
基本幾何圖形定義
關于EGL
導言
Viewing 和 Modeling(MODELVIEW) 變換
FrameBuffer
設置光照效果 Set Lighting
Viewport 變換
階段小結
繪制點 Point
OpenGL ES API 命名習慣
通用的矩陣變換指令
關于 OpenGL ES
創(chuàng)建實例應用 OpenGLDemos 程序框架
OpenGL ES 管道(Pipeline)
GLSurfaceView

Viewport 變換

攝影師調整好相機和被拍攝物體的位置角度(modelview) ,對好焦距(projection)后,就可以按下快門拍照了,拍好的照片可以在計算機上使用照片瀏覽器查看照片,放大,縮小,拉伸,并可以將照片顯示窗口在屏幕上任意拖放。對應到3D繪制就是 Viewport 變換,目前的顯示器大多還是 2D 的,viewport(顯示區(qū)域)為一個長方形區(qū)域,并且使用屏幕坐標系來定義:

http://wiki.jikexueyuan.com/project/opengl-es-guide/images/81.png" alt="" />

OpenGL ES 中使用 glViewport() 來定義顯示視窗的大小和位置:

glViewport(int x, int y, int width, int height)

http://wiki.jikexueyuan.com/project/opengl-es-guide/images/82.png" alt="" />

Android 缺省將 viewport 設置成和顯示屏幕大小一致。

如果投影變換的寬度/高度比 (aspect) 和最后的 Viewport 的 width/height 比不一致的話,最后顯示的圖形就可能需要拉伸以適應 Viewport,從而可能造成圖像變形。比如:現(xiàn)在的電視的顯示模式有 4:3 和 16:9 或是其它模式,如果使用 16:9 的模式來顯示原始寬高比為 4:3 的視頻,圖像就有變形。

http://wiki.jikexueyuan.com/project/opengl-es-guide/images/83.png" alt="" />

Z 坐標變換

前面提到的 modelview, projection 變換 同樣應用于 Z 軸坐標,但和屏幕坐標系中 x,y 坐標不同的時,在屏幕坐標系下 ,Android OpenGL ES 將 z 坐標重新編碼,它的值總會在0.0到1.0之間。作為深度 depth 測試的依據(jù)。

我們在示例代碼的 OpenGLRenderer 的 onSurfaceChanged 使用和屏幕一樣大小的區(qū)域作為Viewport,你也可以通過 glViewport 將視窗設成屏幕的局部某個區(qū)域。

并且可以看到透視投影的 aspect 為 width/height ,因此最后的圖形不會有變形:

查看源代碼打印幫助

public void onSurfaceChanged(GL10 gl, int width, int height) {
 // Sets the current view port to the new size.
 gl.glViewport(0, 0, width, height);
 // Select the projection matrix
 gl.glMatrixMode(GL10.GL\_PROJECTION);
 // Reset the projection matrix
 gl.glLoadIdentity();
 // Calculate the aspect ratio of the window
 GLU.gluPerspective(gl, 45.0f,
 (float) width / (float) height,
 0.1f, 100.0f);
 // Select the modelview matrix
 gl.glMatrixMode(GL10.GL_MODELVIEW);
 // Reset the modelview matrix
 gl.glLoadIdentity();
}
上一篇:繪制一個球體下一篇:關于EGL