Java tutorial
//package com.java2s; public class Main { public static void setLookAtM(float[] rm, float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ) { float fx = centerX - eyeX; float fy = centerY - eyeY; float fz = centerZ - eyeZ; float rlf = 1.0f / length(fx, fy, fz); fx *= rlf; fy *= rlf; fz *= rlf; float sx = fy * upZ - fz * upY; float sy = fz * upX - fx * upZ; float sz = fx * upY - fy * upX; float rls = 1.0f / length(sx, sy, sz); sx *= rls; sy *= rls; sz *= rls; float ux = sy * fz - sz * fy; float uy = sz * fx - sx * fz; float uz = sx * fy - sy * fx; rm[0] = sx; rm[1] = ux; rm[2] = -fx; rm[3] = 0.0f; rm[4] = sy; rm[5] = uy; rm[6] = -fy; rm[7] = 0.0f; rm[8] = sz; rm[9] = uz; rm[10] = -fz; rm[11] = 0.0f; rm[12] = 0.0f; rm[13] = 0.0f; rm[14] = 0.0f; rm[15] = 1.0f; translateM(rm, -eyeX, -eyeY, -eyeZ); } /** * Computes the length of a vector. * * @param x x coordinate of a vector * @param y y coordinate of a vector * @param z z coordinate of a vector * @return the length of a vector */ public static float length(float x, float y, float z) { return (float) Math.sqrt(x * x + y * y + z * z); } public static void translateM(float[] m, float x, float y, float z) { for (int i = 0; i < 4; i++) { m[12 + i] += m[i] * x + m[4 + i] * y + m[8 + i] * z; } } }