Ignore:
Timestamp:
Oct 31, 2011, 9:19:09 AM (9 years ago)
Author:
sam
Message:

core: new combinations of integer vectors (unsigned, 8-bit, etc.), dot and
cross product, normalize, etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/matrix.cpp

    r939 r1041  
    2323{
    2424
     25template<> float dot(vec2 v1, vec2 v2)
     26{
     27    return v1.x * v2.x + v1.y * v2.y;
     28}
     29
     30template<> float dot(vec3 v1, vec3 v2)
     31{
     32    return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
     33}
     34
     35template<> float dot(vec4 v1, vec4 v2)
     36{
     37    return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z + v1.w * v2.w;
     38}
     39
     40template<> vec3 cross(vec3 v1, vec3 v2)
     41{
     42    return vec3(v1.y * v2.z - v1.z * v2.y,
     43                v1.z * v2.x - v1.x * v2.z,
     44                v1.x * v2.y - v1.y * v2.x);
     45}
     46
     47template<> vec2 normalize(vec2 v)
     48{
     49    float norm = v.sqlen();
     50    if (!norm)
     51        return vec2(0);
     52    return v / norm;
     53}
     54
     55template<> vec3 normalize(vec3 v)
     56{
     57    float norm = v.sqlen();
     58    if (!norm)
     59        return vec3(0);
     60    return v / norm;
     61}
     62
     63template<> vec4 normalize(vec4 v)
     64{
     65    float norm = v.sqlen();
     66    if (!norm)
     67        return vec4(0);
     68    return v / norm;
     69}
     70
    2571static inline float det3(float a, float b, float c,
    2672                         float d, float e, float f,
     
    67113}
    68114
     115template<> void vec2::printf() const
     116{
     117    Log::Debug("[ %6.6f %6.6f ]\n", x, y);
     118}
     119
     120template<> void vec3::printf() const
     121{
     122    Log::Debug("[ %6.6f %6.6f %6.6f ]\n", x, y, z);
     123}
     124
     125template<> void vec4::printf() const
     126{
     127    Log::Debug("[ %6.6f %6.6f %6.6f %6.6f ]\n", x, y, z, w);
     128}
     129
    69130template<> void mat4::printf() const
    70131{
     
    164225}
    165226
    166 template<> mat4 mat4::perspective(float theta, float width,
    167                                   float height, float near, float far)
    168 {
    169     float t1 = tanf(theta / 2.0f);
    170     float t2 = t1 * height / width;
    171 
    172     return frustum(-near * t1, near * t1, -near * t2, near * t2, near, far);
    173 }
    174 
    175227template<> mat4 mat4::translate(float x, float y, float z)
    176228{
     
    180232    ret[3][2] = z;
    181233    return ret;
     234}
     235
     236template<> mat4 mat4::translate(vec3 v)
     237{
     238    return translate(v.x, v.y, v.z);
     239}
     240
     241template<> mat4 mat4::lookat(vec3 eye, vec3 center, vec3 up)
     242{
     243    vec3 f = normalize(center - eye);
     244    vec3 u = normalize(up);
     245    vec3 s = normalize(cross(f, u));
     246    u = cross(s, f);
     247
     248    mat4 ret(1.0f);
     249    ret[0][0] = s.x;
     250    ret[0][1] = s.y;
     251    ret[0][2] = s.z;
     252    ret[1][0] = u.x;
     253    ret[1][1] = u.y;
     254    ret[1][2] = u.z;
     255    ret[2][0] =-f.x;
     256    ret[2][1] =-f.y;
     257    ret[2][2] =-f.z;
     258    return ret * mat4::translate(-eye);
     259}
     260
     261template<> mat4 mat4::perspective(float theta, float width,
     262                                  float height, float near, float far)
     263{
     264    float t1 = tanf(theta * 0.5f);
     265    float t2 = t1 * height / width;
     266
     267    return frustum(-near * t1, near * t1, -near * t2, near * t2, near, far);
    182268}
    183269
     
    214300}
    215301
     302template<> mat4 mat4::rotate(float theta, vec3 v)
     303{
     304    return rotate(theta, v.x, v.y, v.z);
     305}
     306
    216307} /* namespace lol */
    217308
Note: See TracChangeset for help on using the changeset viewer.