//
// gmMatrix.c
// MyOpenGLES
//
// Created by Archer_LJ on 14-7-10.
// Copyright (c) 2014年 Archer_LJ. All rights reserved.
//
#include <stdio.h>
#include <math.h>
#include "gmMatrix.h"
void InitgmMatrix4(gmMatrix4* mat)
{
if (mat == NULL)
{
return;
}
memset(mat, 0, sizeof(gmMatrix4));
mat->m[M00] = 1.0f;
mat->m[M11] = 1.0f;
mat->m[M22] = 1.0f;
mat->m[M33] = 1.0f;
}
void gmMatrixMultiply(gmMatrix4* out, gmMatrix4* m1, gmMatrix4* m2)
{
if (out == NULL || m1 == NULL || m2 == NULL)
{
return;
}
gmMatrix4 tmpout;
tmpout.m[ 0] = m1->m[ 0]*m2->m[ 0] + m1->m[ 1]*m2->m[ 4] + m1->m[ 2]*m2->m[ 8] + m1->m[ 3]*m2->m[12];
tmpout.m[ 1] = m1->m[ 0]*m2->m[ 1] + m1->m[ 1]*m2->m[ 5] + m1->m[ 2]*m2->m[ 9] + m1->m[ 3]*m2->m[13];
tmpout.m[ 2] = m1->m[ 0]*m2->m[ 2] + m1->m[ 1]*m2->m[ 6] + m1->m[ 2]*m2->m[10] + m1->m[ 3]*m2->m[14];
tmpout.m[ 3] = m1->m[ 0]*m2->m[ 3] + m1->m[ 1]*m2->m[ 7] + m1->m[ 2]*m2->m[11] + m1->m[ 3]*m2->m[15];
tmpout.m[ 4] = m1->m[ 4]*m2->m[ 0] + m1->m[ 5]*m2->m[ 4] + m1->m[ 6]*m2->m[ 8] + m1->m[ 7]*m2->m[12];
tmpout.m[ 5] = m1->m[ 4]*m2->m[ 1] + m1->m[ 5]*m2->m[ 5] + m1->m[ 6]*m2->m[ 9] + m1->m[ 7]*m2->m[13];
tmpout.m[ 6] = m1->m[ 4]*m2->m[ 2] + m1->m[ 5]*m2->m[ 6] + m1->m[ 6]*m2->m[10] + m1->m[ 7]*m2->m[14];
tmpout.m[ 7] = m1->m[ 4]*m2->m[ 3] + m1->m[ 5]*m2->m[ 7] + m1->m[ 6]*m2->m[11] + m1->m[ 7]*m2->m[15];
tmpout.m[ 8] = m1->m[ 8]*m2->m[ 0] + m1->m[ 9]*m2->m[ 4] + m1->m[10]*m2->m[ 8] + m1->m[11]*m2->m[12];
tmpout.m[ 9] = m1->m[ 8]*m2->m[ 1] + m1->m[ 9]*m2->m[ 5] + m1->m[10]*m2->m[ 9] + m1->m[11]*m2->m[13];
tmpout.m[10] = m1->m[ 8]*m2->m[ 2] + m1->m[ 9]*m2->m[ 6] + m1->m[10]*m2->m[10] + m1->m[11]*m2->m[14];
tmpout.m[11] = m1->m[ 8]*m2->m[ 3] + m1->m[ 9]*m2->m[ 7] + m1->m[10]*m2->m[11] + m1->m[11]*m2->m[15];
tmpout.m[12] = m1->m[12]*m2->m[ 0] + m1->m[13]*m2->m[ 4] + m1->m[14]*m2->m[ 8] + m1->m[15]*m2->m[12];
tmpout.m[13] = m1->m[12]*m2->m[ 1] + m1->m[13]*m2->m[ 5] + m1->m[14]*m2->m[ 9] + m1->m[15]*m2->m[13];
tmpout.m[14] = m1->m[12]*m2->m[ 2] + m1->m[13]*m2->m[ 6] + m1->m[14]*m2->m[10] + m1->m[15]*m2->m[14];
tmpout.m[15] = m1->m[12]*m2->m[ 3] + m1->m[13]*m2->m[ 7] + m1->m[14]*m2->m[11] + m1->m[15]*m2->m[15];
*out = tmpout;
}
void gmMatrixTranslate(gmMatrix4* out, float x, float y, float z)
{
if (out == NULL)
{
return;
}
out->m[ 0]=1.0f; out->m[ 4]=0.0f; out->m[ 8]=0.0f; out->m[12]=x;
out->m[ 1]=0.0f; out->m[ 5]=1.0f; out->m[ 9]=0.0f; out->m[13]=y;
out->m[ 2]=0.0f; out->m[ 6]=0.0f; out->m[10]=1.0f; out->m[14]=z;
out->m[ 3]=0.0f; out->m[ 7]=0.0f; out->m[11]=0.0f; out->m[15]=1.0f;
}
void gmMatrixScale(gmMatrix4* out, float x, float y, float z)
{
if (out == NULL)
{
return;
}
out->m[ 0]=x; out->m[ 4]=0.0f; out->m[ 8]=0.0f; out->m[12]=0.0f;
out->m[ 1]=0.0f; out->m[ 5]=y; out->m[ 9]=0.0f; out->m[13]=0.0f;
out->m[ 2]=0.0f; out->m[ 6]=0.0f; out->m[10]=z; out->m[14]=0.0f;
out->m[ 3]=0.0f; out->m[ 7]=0.0f; out->m[11]=0.0f; out->m[15]=1.0f;
}
void gmMatrixRotateX(gmMatrix4* out, float x)
{
if (out == NULL)
{
return;
}
float fcos, fsin;
fcos = cos(x);
fsin = sin(x);
out->m[ 0]=1.0f; out->m[ 4]=0.0f; out->m[ 8]=0.0f; out->m[12]=0.0f;
out->m[ 1]=0.0f; out->m[ 5]=fcos; out->m[ 9]=fsin; out->m[13]=0.0f;
out->m[ 2]=0.0f; out->m[ 6]=-fsin; out->m[10]=fcos; out->m[14]=0.0f;
out->m[ 3]=0.0f; out->m[ 7]=0.0f; out->m[11]=0.0f; out->m[15]=1.0f;
}
void gmMatrixRotateY(gmMatrix4* out, float y)
{
if (out == NULL)
{
return;
}
float fcos, fsin;
fcos = cos(y);
fsin = sin(y);
out->m[ 0]=fcos; out->m[ 4]=0.0f; out->m[ 8]=-fsin; out->m[12]=0.0f;
out->m[ 1]=0.0f; out->m[ 5]=1.0f; out->m[ 9]=0.0f; out->m[13]=0.0f;
out->m[ 2]=fsin; out->m[ 6]=0.0f; out->m[10]=fcos; out->m[14]=0.0f;
out->m[ 3]=0.0f; out->m[ 7]=0.0f; out->m[11]=0.0f; out->m[15]=1.0f;
}
void gmMatrixRotateZ(gmMatrix4* out, float z)
{
if (out == NULL)
{
return;
}
float fcos, fsin;
fcos = cos(z);
fsin = sin(z);
out->m[ 0]=fcos; out->m[ 4]=fsin; out->m[ 8]=0.0f; out->m[12]=0.0f;
out->m[ 1]=-fsin; out->m[ 5]=fcos; out->m[ 9]=0.0f; out->m[13]=0.0f;
out->m[ 2]=0.0f; out->m[ 6]=0.0f; out->m[10]=1.0f; out->m[14]=0.0f;
out->m[ 3]=0.0f; out->m[ 7]=0.0f; out->m[11]=0.0f; out->m[15]=1.0f;
}
void gmMatrixLookAtLH(gmMatrix4* out, gmVector3* eye, gmVector3* at, gmVector3* up)
{
gmVector3 f, s, u;
gmMatrix4 t;
f.x = eye->x - at->x;
f.y = eye->y - at->y;
f.z = eye->z - at->z;
gmVec3Normalize(&f, &f);
gmVec3CrossProduct(&s, &f, up);
gmVec3Normalize(&s, &s);
gmVec3CrossProduct(&u, &s, &f);
gmVec3Normalize(&u, &u);
out->m[ 0] = s.x;
out->m[ 1] = u.x;
out->m[ 2] = -f.x;
out->m[ 3] = 0;
out->m[ 4] = s.y;
out->m[ 5] = u.y;
out->m[ 6] = -f.y;
out->m[ 7] = 0;
out->m[ 8] = s.z;
out->m[ 9] = u.z;
out->m[10] = -f.z;
out->m[11] = 0;
out->m[12] = 0;
out->m[13] = 0;
out->m[14] = 0;
out->m[15] = 1;
gmMatrixTranslate(&t, -eye->x, -eye->y, -eye->z);
gmMatrixMultiply(out, &t, out);
}
void gmMatrixPerspectiveFovLH(gmMatrix4* out, float foy, float aspect, float near, float far)
{
float f, n;
f = 1.0f / (float)tan(foy * 0.5f);
n = 1.0f / (far - near);
out->m[ 0] = f / aspect;
out->m[ 1] = 0;
out->m[ 2] = 0;
out->m[ 3] = 0;
out->m[ 4] = 0;
out->m[ 5] = f;
out->m[ 6] = 0;
out->m[ 7] = 0;
out->m[ 8] = 0;
out->m[ 9] = 0;
out->m[10] = far * n;
out->m[11] = 1;
out->m[12] = 0;
out->m[13] = 0;
out->m[14] = -far * near * n;
out->m[15] = 0;
}
void gmMatrixOrthoLH(gmMatrix4* out, float width, float height, float near, float far)
{
out->m[ 0] = 2.0 / width;
out->m[ 1] = 0;
out->m[ 2] = 0;
out->m[ 3] = 0;
out->m[ 4] = 0;
out->m[ 5] = 2.0 / height;
out->m[ 6] = 0;
out->m[ 7] = 0;
out->m[ 8] = 0;
out->m[ 9] = 0;
out->m[10] = 1.0 / (far - near);
out->m[11] = near / (near - far);
out->m[12] = 0;
out->m[13] = 0;
out->m[14] = 0;
out->m[15] = 1.0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
OpenGLES demo - 15. 阴影贴图 Shadow Map 之点光源.zip (29个子文件)
OpenGLES demo - 15. 阴影贴图 Shadow Map 之点光源
MyOpenGLES.xcodeproj
project.xcworkspace
contents.xcworkspacedata 155B
xcuserdata
Archer.xcuserdatad
UserInterfaceState.xcuserstate 29KB
xcuserdata
Archer.xcuserdatad
xcdebugger
Breakpoints_v2.xcbkptlist 91B
xcschemes
MyOpenGLES.xcscheme 4KB
xcschememanagement.plist 572B
project.pbxproj 22KB
.DS_Store 6KB
MyOpenGLES
MyOpenGLES-Prefix.pch 344B
utils.c 172B
en.lproj
InfoPlist.strings 45B
main.m 338B
MyOpenGLESView.h 1KB
gmVector.c 921B
gmMatrix.c 6KB
wood.png 115KB
MyOpenGLES-Info.plist 1KB
Images.xcassets
LaunchImage.launchimage
Contents.json 442B
AppIcon.appiconset
Contents.json 333B
gmMatrix.h 1KB
gmVector.h 680B
utils.h 353B
AppDelegate.h 368B
gmCommon.h 391B
MyOpenGLESView.m 19KB
gmCommon.m 2KB
AppDelegate.m 2KB
MyOpenGLESTests
en.lproj
InfoPlist.strings 45B
MyOpenGLESTests.m 646B
MyOpenGLESTests-Info.plist 686B
共 29 条
- 1
资源评论
- lost_nobleman2015-01-16真心不错,demo详细
hoytGM
- 粉丝: 11
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功