歐拉相機即第一稱射擊遊戲中時用相機.你需要定義以下屬性
『視場』即視口角度fieldOfView
視口縱橫比aspectRatio
遠裁剪面far
近裁剪面near
3D空間位置position
繞y軸旋轉角yaw
繞x軸旋轉角pitch.角度值-90~+90度之間.這類似於頭部傾斜角.若超過這角度則造成骨折.
設定歐拉相機視口,寬與高為屏幕分辨率
gl.glViewport(0,0,width,height);
設置歐拉相機矩陣.首先將當前堆棧設為投影矩陣
gl.glMatrixMode(GL10.GL_PROJECTION);
棧頂載入單位矩陣
gl.glLoadIdentity();
設置投影矩陣.你需定義要視錐體
GLU.gluPerspective(gl, fieldOfView, aspectRatio, near, far);
設為模型視圖矩陣
gl.glMatrixMode(GL10.GL_MODELVIEW);
棧頂載入單位矩陣
gl.glLoadIdentity();
繞x軸旋轉角度
gl.glRotatef(-pitch,1,0,0);
繞Y軸旋轉角度
gl.glRotatef(-yaw,0,1,0);
移動相機,相機位於原點且鏡頭指向z軸負方向
gl.glTranslatef(-position.x,-position.y,-position.z);
獲取相機方向
相機未旋轉時指向z軸負向
float[] inVec = {0,0,-1,1};
float[] outVec = {0,0,0,0};
設置單位矩陣
float[] matrix = {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0};
Matrix.setIdentityM(matrix,0);
繞x軸俯仰
Matrix.rotateM(matrix, 0, yaw,0,1,0);
繞Y軸旋轉
Matrix.rotateM(matrix, 0, pitch,1,0,0);
將矩陣和向量相乘的單位方向向量
Matrix.multiplyMV(outVec, 0, matrix, 0, inVec, 0);
direcion.set(outVec[0],outVec[1],outVec[2]);