Exemplo n.º 1
0
Vec2 cameraWorldToScreenPoint(Camera *cam, Vec3 worldPos)
{
    Vec4 worldCoord = vec4FromVec3AndW(worldPos, 1.0);
    Mat4 viewProjection;
    mat4Mul(&viewProjection, &cam->perspectiveMatrix, &cam->transformMatrix);
    Vec4 ret4;
    mat4Vec4Mul(&ret4, &viewProjection, &worldCoord);
    vec4Scale(&ret4, &ret4, 1.0/ret4.w);
    Vec2 ret;
    ret.x = ret4.x;
    ret.y = ret4.y;
    return ret;
}
Exemplo n.º 2
0
Vec3 cameraScreenDepthToWorldPoint(Camera *cam, Vec2 screenPos, r32 depth)
{
    Vec4 screenCoord = vec4(screenPos.x, screenPos.y, depth, 1.0);

    Mat4 mat = cameraCalculateInverseViewMatrix(cam);
    Mat4 mat2 = invPerspective(&cam->perspectiveMatrix);
    Mat4 camInvPerspective;
    mat4Mul(&camInvPerspective, &mat, &mat2);

    Vec4 ret4;
    mat4Vec4Mul(&ret4, &camInvPerspective, &screenCoord);
    vec4Scale(&ret4, &ret4, 1.0/ret4.w);

    return vec3FromVec4(ret4);
}
Exemplo n.º 3
0
vec4 vec4Subtract(const vec4 aVec, const vec4 bVec)
{
    return vec4Add(aVec, vec4Scale(-1., bVec));
}
Exemplo n.º 4
0
vec4 vec4Mix(const vec4 aVec, const vec4 bVec, const GLfloat blend)
{
    return vec4Add(vec4Scale(blend, aVec),
                   vec4Scale(1. - blend, bVec));
}
Exemplo n.º 5
0
vec4 vec4Normalize(const vec4 inVec)
{
    return vec4Scale(1.0f/vec4Magnitude(inVec), inVec);
}