OpenGL es gluLookAt 函数

来源:互联网 发布:深海逃生剧情 知乎 编辑:程序博客网 时间:2024/05/01 09:26

OpenGL es 没有gluLookAt 函数,从外网找了一个

附链接

gluLookAt函数

为了方便不会墙的同志,附代码

已调试使用,正常!

object c 和 c++混编的同志在使用时删掉以下两个头文件,加入cmath头文件

#import <Foundation/Foundation.h>#import <OpenGLES/EAGL.h>

Somebody asked me for an implementation of gluLookAt() for OpenGL ES. I didn't have one, but I knew where I could get one. The Mesa3D project is a non-licensed, open-source OpenGL-compatible library. Some changes were required to get this function to work under OpenGL ES, but this is, in no way, my work - I just tweaked it a little so that it would compile and run on OpenGL ES 1.1.gluLookAt.h/* *  gluLookAt.h * *  This is a modified version of the function of the same name from  *  the Mesa3D project ( http://mesa3d.org/ ), which is  licensed *  under the MIT license, which allows use, modification, and  *  redistribution * *  In order to work under OpenGL ES, all instances of GLdouble *  had to be changed to GLfloat, and all "d" function calls had *  to be changed to the "f" versions. * *  Original developer's comments have been left in place. * *  Out of respect for the original authors, this is licensed under *  the Mesa (MIT) license. Original license follows: *   *  ----------------------------------------------------------------------- * *  Copyright (C) 1999-2007  Brian Paul   All Rights Reserved. *   *  Permission is hereby granted, free of charge, to any person obtaining a *  copy of this software and associated documentation files (the "Software"), *  to deal in the Software without restriction, including without limitation *  the rights to use, copy, modify, merge, publish, distribute, sublicense, *  and/or sell copies of the Software, and to permit persons to whom the *  Software is furnished to do so, subject to the following conditions: *   *  The above copyright notice and this permission notice shall be included *  in all copies or substantial portions of the Software.  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL *  BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN *  AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */#import <Foundation/Foundation.h>#import <OpenGLES/EAGL.h>#import <OpenGLES/ES1/gl.h>#import <OpenGLES/ES1/glext.h>void gluLookAt(GLfloat eyex, GLfloat eyey, GLfloat eyez,          GLfloat centerx, GLfloat centery, GLfloat centerz,          GLfloat upx, GLfloat upy, GLfloat upz);gluLookAt.m/* *  gluLookAt.c */#include "gluLookAt.h"void gluLookAt(GLfloat eyex, GLfloat eyey, GLfloat eyez,          GLfloat centerx, GLfloat centery, GLfloat centerz,          GLfloat upx, GLfloat upy, GLfloat upz){    GLfloat m[16];    GLfloat x[3], y[3], z[3];    GLfloat mag;        /* Make rotation matrix */        /* Z vector */    z[0] = eyex - centerx;    z[1] = eyey - centery;    z[2] = eyez - centerz;    mag = sqrt(z[0] * z[0] + z[1] * z[1] + z[2] * z[2]);    if (mag) {          /* mpichler, 19950515 */        z[0] /= mag;        z[1] /= mag;        z[2] /= mag;    }        /* Y vector */    y[0] = upx;    y[1] = upy;    y[2] = upz;        /* X vector = Y cross Z */    x[0] = y[1] * z[2] - y[2] * z[1];    x[1] = -y[0] * z[2] + y[2] * z[0];    x[2] = y[0] * z[1] - y[1] * z[0];        /* Recompute Y = Z cross X */    y[0] = z[1] * x[2] - z[2] * x[1];    y[1] = -z[0] * x[2] + z[2] * x[0];    y[2] = z[0] * x[1] - z[1] * x[0];        /* mpichler, 19950515 */    /* cross product gives area of parallelogram, which is < 1.0 for     * non-perpendicular unit-length vectors; so normalize x, y here     */        mag = sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]);    if (mag) {        x[0] /= mag;        x[1] /= mag;        x[2] /= mag;    }        mag = sqrt(y[0] * y[0] + y[1] * y[1] + y[2] * y[2]);    if (mag) {        y[0] /= mag;        y[1] /= mag;        y[2] /= mag;    }    #define M(row,col)  m[col*4+row]    M(0, 0) = x[0];    M(0, 1) = x[1];    M(0, 2) = x[2];    M(0, 3) = 0.0;    M(1, 0) = y[0];    M(1, 1) = y[1];    M(1, 2) = y[2];    M(1, 3) = 0.0;    M(2, 0) = z[0];    M(2, 1) = z[1];    M(2, 2) = z[2];    M(2, 3) = 0.0;    M(3, 0) = 0.0;    M(3, 1) = 0.0;    M(3, 2) = 0.0;    M(3, 3) = 1.0;#undef M    glMultMatrixf(m);        /* Translate Eye to Origin */    glTranslatef(-eyex, -eyey, -eyez);    }



0 0
原创粉丝点击