//
// UtilityVector.c
//
//
#include "UtilityVector.h"
/////////////////////////////////////////////////////////////////
// This function returns an initialized vector.
UtilityVector3 UtilityVector3MakeWithArray
(
const GLfloat v[3]
)
{
return UtilityVector3Make(v[0], v[1], v[2]);
}
/////////////////////////////////////////////////////////////////
// This function returns an initialized vector.
UtilityVector3 UtilityVector3Make(
const GLfloat x,
const GLfloat y,
const GLfloat z)
{
UtilityVector3 result;
result.x = x;
result.y = y;
result.z = z;
return result;
}
/////////////////////////////////////////////////////////////////
// This function returns an initialized vector.
UtilityVector2 UtilityVector2Make(
const GLfloat x,
const GLfloat y)
{
UtilityVector2 result;
result.x = x;
result.y = y;
return result;
}
/////////////////////////////////////////////////////////////////
// This function returns an initialized vector.
extern UtilityVector4 UtilityVector4MakeWithArray
(
const GLfloat v[4]
)
{
return UtilityVector4Make(v[0], v[1], v[2], v[3]);
}
/////////////////////////////////////////////////////////////////
// This function returns an initialized vector.
extern UtilityVector4 UtilityVector4Make
(
const GLfloat x,
const GLfloat y,
const GLfloat z,
const GLfloat w
)
{
UtilityVector4 result;
result.x = x;
result.y = y;
result.z = z;
result.w = w;
return result;
}
/////////////////////////////////////////////////////////////////
// This function returns the vector sum of vectorA and vectorB.
UtilityVector3 UtilityVector3Add(
const UtilityVector3 vectorA,
const UtilityVector3 vectorB)
{
return UtilityVector3Make(
vectorA.x + vectorB.x,
vectorA.y + vectorB.y,
vectorA.z + vectorB.z);
}
/////////////////////////////////////////////////////////////////
// This function returns the vector from PositionA to PositionB
extern UtilityVector3 UtilityVector3FromPositionToPosition(
const UtilityPosition positionA,
const UtilityPosition positionB)
{
return UtilityVector3Make(positionB.x - positionA.x,
positionB.y - positionA.y,
positionB.z - positionA.z);
}
/////////////////////////////////////////////////////////////////
// This function returnsa - b
UtilityVector3 UtilityVector3Subtract(
const UtilityVector3 a,
const UtilityVector3 b)
{
UtilityVector3 result;
result.x = a.x - b.x;
result.y = a.y - b.y;
result.z = a.z - b.z;
return (result);
}
/////////////////////////////////////////////////////////////////
// This function returns vectorA multiplied by the scalar
// scalefactor; The returned vector has changed magnitude but
// the same direction as vectorA.
UtilityVector3 UtilityVector3Scale(
const UtilityVector3 vectorA,
const GLfloat scalefactor)
{
return UtilityVector3Make(
vectorA.x * scalefactor,
vectorA.y * scalefactor,
vectorA.z * scalefactor);
}
/////////////////////////////////////////////////////////////////
// This function returns the length squared a.k.a. magnitude of
// vectorA squared.
extern GLfloat UtilityVector3LengthSquared(
const UtilityVector3 vectorA)
{
float lengthSquared = (vectorA.x * vectorA.x) +
(vectorA.y * vectorA.y) +
(vectorA.z * vectorA.z);
return lengthSquared;
}
/////////////////////////////////////////////////////////////////
// This function returns the length a.k.a. magnitude of vectorA.
GLfloat UtilityVector3Length(
const UtilityVector3 vectorA)
{
float result = 0.0f;
float lengthSquared = UtilityVector3LengthSquared(vectorA);
if(FLT_EPSILON < lengthSquared)
{ // avoid square root of zero error if lengthSquared
// is too small
result = sqrtf(lengthSquared);
}
return result;
}
/////////////////////////////////////////////////////////////////
// This function returns a Unit Vector with the same direction as
// vectorA.
UtilityVector3 UtilityVector3Normalize(
UtilityVector3 vectorA)
{
const GLfloat length = UtilityVector3Length(vectorA);
float oneOverLength = 0.0f;
if(FLT_EPSILON < length)
{ // avoid divide by zero if length too small
oneOverLength = 1.0f / length;
}
return UtilityVector3Scale(vectorA, oneOverLength);
}
/////////////////////////////////////////////////////////////////
// This function returns the Cross Product vectorA x VectorB.
UtilityVector3 UtilityVector3CrossProduct(
const UtilityVector3 vectorA,
const UtilityVector3 vectorB)
{
UtilityVector3 result;
result.x = vectorA.y * vectorB.z - vectorA.z * vectorB.y;
result.y = vectorA.z * vectorB.x - vectorA.x * vectorB.z;
result.z = vectorA.x * vectorB.y - vectorA.y * vectorB.x;
return result;
}
/////////////////////////////////////////////////////////////////
// This function returns the Dot Product of vectorA and VectorB.
GLfloat UtilityVector3DotProduct(
const UtilityVector3 vectorA,
const UtilityVector3 vectorB)
{
return (vectorA.x * vectorB.x +
vectorA.y * vectorB.y +
vectorA.z * vectorB.z);
}
/////////////////////////////////////////////////////////////////
// This function returns a Unit Vector in the same direction as
// the Cross Product of vectorA and VectorB.
UtilityVector3 UtilityNormalVector (
const UtilityVector3 vectorA,
const UtilityVector3 vectorB)
{
return UtilityVector3Normalize(
UtilityVector3CrossProduct(vectorA, vectorB));
}
/////////////////////////////////////////////////////////////////
// This function returns YES if both p1 and p2 are on the same
// side of the line defined by a and b.
GLboolean UtilityPointsAreOnSameSideOfLine(
UtilityVector3 p1,
UtilityVector3 p2,
UtilityVector3 a,
UtilityVector3 b)
{
UtilityVector3 cp1 = UtilityVector3CrossProduct(
UtilityVector3Subtract(b, a), UtilityVector3Subtract(p1, a));
UtilityVector3 cp2 = UtilityVector3CrossProduct(
UtilityVector3Subtract(b, a), UtilityVector3Subtract(p2, a));
return (0 <= UtilityVector3DotProduct(cp1, cp2));
}
/////////////////////////////////////////////////////////////////
// This function returns YES if p is inside the triangle formed
// by a, b, and c.
GLboolean UtilityPointIsInTriangle(
UtilityVector3 p,
UtilityVector3 a,
UtilityVector3 b,
UtilityVector3 c)
{
return (UtilityPointsAreOnSameSideOfLine(p, a, b, c) &&
UtilityPointsAreOnSameSideOfLine(p, b, a, c) &&
UtilityPointsAreOnSameSideOfLine(p, c, a, b));
}
/////////////////////////////////////////////////////////////////
// This function returns vectorA multiplied by the scalar
// scalefactor; The returned vector has changed magnitude but
// the same direction as vectorA.
extern UtilityVector4 UtilityVector4Scale
(
const UtilityVector4 vectorA,
const GLfloat scalefactor
)
{
return UtilityVector4Make(
vectorA.x * scalefactor,
vectorA.y * scalefactor,
vectorA.z * scalefactor,
vectorA.w * scalefactor);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
OpenGL ES应用开发实践指南iOS卷的配套代码.zip (745个子文件)
trail.binary 11.28MB
bumperCar.blend 403KB
tube.blend 385KB
bumperRink.blend 331KB
lowPolyAxesAndModels2.blend 198KB
sphere.blend 186KB
UtilityVector.c 7KB
UtilityVector.c 6KB
UtilityMath.c 3KB
UtilityMath.c 3KB
contents 4KB
contents 4KB
contents 4KB
contents 4KB
bumperCar.dae 63KB
tube.dae 46KB
bumperCar.dae 45KB
bone2.dae 14KB
bumperRinkWalls.dae 12KB
bumperRink.dae 7KB
bone1.dae 5KB
bone0.dae 4KB
bumperRinkFloor.dae 3KB
AGLKTextureMatrix2PointLightShader.fsh 4KB
UtilityArmaturePointLightShader.fsh 3KB
TerrainShader.fsh 2KB
UtilityTerrainShader.fsh 2KB
PickTerrainShader.fsh 1KB
ModelShader.fsh 1KB
UtilityModelShader.fsh 1KB
UtilityBillboardParticleShader.fsh 841B
Shader.fsh 833B
AGLKPointParticleShader.fsh 710B
UtilityPickTerrainShader.fsh 678B
AGLKSkyboxShader.fsh 516B
leaves.gif 81KB
leaves.gif 37KB
leaves.gif 34KB
leaves.gif 34KB
sphere.h 334KB
lowPolyAxesAndModels2.h 322KB
bumperCar.h 103KB
bumperCar.h 103KB
UtilityMatrix.h 33KB
UtilityMatrix.h 29KB
canLight.h 21KB
canLight.h 21KB
bumperRink.h 12KB
bumperRink.h 12KB
UtilityVector.h 7KB
UtilityVector.h 5KB
AGLKFrustum.h 3KB
COLLADAGeometryInfo.h 3KB
OpenGLES_Ch5_4ViewController.h 2KB
TECart.h 2KB
UtilityOpenGLCamera.h 2KB
UtilityArmatureBaseEffect.h 2KB
UtilityFrustum.h 2KB
CVMesh.h 2KB
UtilityFrustum.h 2KB
UtilityBillboardParticle.h 2KB
TETerrain.h 2KB
TEMesh.h 2KB
TETerrain+modelAdditions.h 2KB
SceneCar.h 2KB
SceneCar.h 2KB
UtilityMesh.h 2KB
TETerrain.h 1KB
TETerrain.h 1KB
TETerrain.h 1KB
TETerrainEffect.h 1KB
AGLKFilters.h 1KB
UtilityCamera.h 1KB
AGLKVertexAttribArrayBuffer.h 1KB
TETerrain+viewAdditions.h 1KB
TETerrain+viewAdditions.h 1KB
UtilityModel.h 1KB
AGLKViewController.h 1KB
AGLKView.h 1KB
UtilityOpenGLCamera.h 1KB
TEView.h 1KB
AGLKTextureTransformBaseEffect.h 1KB
UtilityTerrainEffect.h 1KB
TEEditWindowController.h 1KB
UtilityTextureLoader.h 1KB
TEPickTerrainEffect.h 1KB
TETerrain+viewAdditions.h 1KB
UtilityEffect.h 1KB
OpenGLES_Ch5_6ViewController.h 1KB
TETerrain+modelAdditions.h 945B
OpenGLES_Ch12_1ViewController.h 938B
AGLKPointParticleEffect.h 938B
SceneMesh.h 935B
SceneMesh.h 934B
UtilityTextureLoader.h 892B
UtilityBillboardParticleManager.h 890B
UtilityBillboard.h 878B
SceneModel.h 871B
TETerrain+modelAdditions.h 861B
TETerrain+modelAdditions.h 861B
共 745 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
博士僧小星
- 粉丝: 1924
- 资源: 5892
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功