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

鍍金池/ 教程/ Android/ 投影變換 Projection
繪制線段 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

投影變換 Projection

前面 ModelView 變換相當于拍照時放置相機和調整被拍物體的位置和角度。投影變換則對應于調整相機鏡頭遠近來取景。

下面代碼設置當前 Matrix 模式為 Projection 投影矩陣:

gl.glMatrixMode(GL_PROJECTION);
gl.glLoadIdentity();  

后續(xù)的坐標變換則針對投影矩陣。投影變換的目的是定義視錐(viewing volume),視錐一方面定義了物體如何投影到屏幕(如透視投影或是正側投影),另一方面視錐也定義了裁剪場景的區(qū)域大小。

OpenGL ES 可以使用兩種不同的投影變換:透視投影(Perspective Projection)和正側投影(Orthographic Projection)。

透視投影(Perspective Projection)

透視投影的特點是“近大遠小”,也就是我們眼睛日常看到的世界。OpenGL ES 定義透視投影的函數為 glFrustum():

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

public void glFrustumf(float left,float right,float bottom,float top,float near,float far)

視錐由(left,bottom,-near) 和(right,top,-near) 定義了靠近觀測點的裁剪面,near 和far定義了觀測點和兩個創(chuàng)建面直接的近距離和遠距離。

在實際寫代碼時,Android OpenGL ES提供了一個輔助方法gluPerspective()可以更簡單的來定義一個透視投影變換:

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

public static void gluPerspective(GL10 gl, float fovy, float aspect, float zNear, float zFar)
  • fovy: 定義視錐的 view angle.
  • aspect: 定義視錐的寬高比。
  • zNear: 定義裁剪面的近距離。
  • zFar: 定義創(chuàng)建面的遠距離。

正側投影(Orthographic Projection)

正側投影,它的視錐為一長方體,特點是物體的大小不隨到觀測點的距離而變化,投影后可以保持物體之間的距離和夾角。它主要用在工程制圖上。

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

定義正側投影(也稱作平移投影)的函數為:

public void glOrthof(float left, float right,float bottom,float top,float near,float far)

裁剪

場景中的圖形的頂點經過 modelview 和 projection 坐標變換后,所有處在 Viewing volumn之外的頂點都會被裁剪掉,透視投影和正側投影都有6個裁剪面。所有處在裁剪面外部的頂點都需剪裁掉以提高繪圖性能。