예제 #1
0
파일: GLU.cs 프로젝트: jbnivoit/projects
        /**
         * @see <a href="gluLookAt.html">gluLookAt</a>
         */
        public void look_at(double eyex, double eyey, double eyez,
                            double centerx, double centery, double centerz,
                            double upx, double upy, double upz)
        {
            Matrix4d matrix = new Matrix4d();
            Vector4d eye    = new Vector4d(eyex, eyey, eyez, 1.0);
            Vector4d center = new Vector4d(centerx, centery, centerz, 1.0);
            Vector4d up     = new Vector4d(upx, upy, upz, 1.0);

            Vector4d forward = new Vector4d();
            Vector4d side    = new Vector4d();

            //-- make rotation matrix

            // forward = center - eye
            forward.minus(center, eye).normalize();

            // side = (forward x up), then normalized
            side.cross(forward, up).normalize();

            // up = side x forward
            up.cross(side, forward);


            /* [side_x up_x -forward_x 0]
             * [side_y up_y -forward_y 0]
             * [side_z up_z -forward_z 0]
             * [  0     0       0      1]
             */
            matrix.set_column(side, up, forward.negate(), Vector4d.ZERO);
            matrix.set_row(3, 0.0, 0.0, 0.0, 1.0);
            gl.mult_matrixd(matrix.m);

            //-- translate eye to origin
            gl.translated(-eyex, -eyey, -eyez);
        }