Subversion Repositories gelsvn

Rev

Rev 595 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 595 Rev 624
Line 68... Line 68...
68
		m[2][2] = v[2];
68
		m[2][2] = v[2];
69
		m[3][3] = 1.0f;
69
		m[3][3] = 1.0f;
70
   
70
   
71
		return m;
71
		return m;
72
	}
72
	}
-
 
73
    
-
 
74
    Mat4x4f perspective_Mat4x4f(float fovy, float aspect, float zNear, float zFar){
-
 
75
        assert(zNear > 0);
-
 
76
        assert(zFar > zNear);
-
 
77
        assert(fovy > 0);
-
 
78
        float top   = tan(fovy * DEGREES_TO_RADIANS/2) * zNear;
-
 
79
        float right = top * aspect;
-
 
80
        
-
 
81
        Mat4x4f c(0);
-
 
82
        c[0][0] = zNear/right;
-
 
83
        c[1][1] = zNear/top;
-
 
84
        c[2][2] = -(zFar + zNear)/(zFar - zNear);
-
 
85
        c[2][3] = -2.0*zFar*zNear/(zFar - zNear);
-
 
86
        c[3][2] = -1.0;
-
 
87
        c[3][3] = 0.0;
-
 
88
        
-
 
89
        return c;
-
 
90
    }
-
 
91
    
-
 
92
    Mat4x4f frustum_Mat4x4f(float left, float right, float bottom, float top, float nearVal, float farVal){
-
 
93
        assert(nearVal > 0);
-
 
94
        assert(farVal > nearVal);
-
 
95
        assert(right > left);
-
 
96
        assert(top > bottom);
-
 
97
        Mat4x4f c(0);
-
 
98
        c[0][0] = 2.0 * nearVal / (right - left);
-
 
99
        c[0][2] = (right + left) / (right - left);
-
 
100
        c[1][1] = 2.0 * nearVal / (top - bottom);
-
 
101
        c[1][2] = (top + bottom) / (top - bottom);
-
 
102
        c[2][2] = -(farVal + nearVal) / (farVal - nearVal);
-
 
103
        c[2][3] = -2.0 * farVal * nearVal / (farVal - nearVal);
-
 
104
        c[3][2] = -1.0;
-
 
105
        c[3][3] = 0.0;
-
 
106
        return c;
-
 
107
    }
-
 
108
    
-
 
109
    Mat4x4f ortho_Mat4x4f(float left, float right, float bottom, float top, float nearVal, float farVal) {
-
 
110
        assert(right > left);
-
 
111
        assert(top > bottom);
-
 
112
        assert(farVal > nearVal);
-
 
113
        Mat4x4f c(0);
-
 
114
        c[0][0] = 2.0/(right - left);
-
 
115
        c[1][1] = 2.0/(top - bottom);
-
 
116
        c[2][2] = 2.0/(nearVal - farVal);
-
 
117
        c[3][3] = 1.0;
-
 
118
        c[0][3] = -(right + left)/(right - left);
-
 
119
        c[1][3] = -(top + bottom)/(top - bottom);
-
 
120
        c[2][3] = -(farVal + nearVal)/(farVal - nearVal);
-
 
121
        return c;
-
 
122
    }
-
 
123
    
-
 
124
    
-
 
125
    Mat4x4f ortho2D_Mat4x4f(float left, float right, float bottom, float top){
-
 
126
        return ortho_Mat4x4f(left, right, bottom, top, -1, 1);
-
 
127
    }
-
 
128
    
-
 
129
    Mat4x4f lookAt_Mat4x4f(const Vec3f& eye, const Vec3f& at, const Vec3f& up){
-
 
130
        Vec4f n = Vec4f(normalize(eye - at),0.0);
-
 
131
        
-
 
132
        Vec4f u = Vec4f(normalize(cross(up,Vec3f(n))),0.0);
-
 
133
        Vec4f v = Vec4f(normalize(cross(Vec3f(n),Vec3f(u))),0.0);
-
 
134
        Vec4f t = Vec4f(0.0, 0.0, 0.0, 1.0);
-
 
135
        Mat4x4f c = Mat4x4f(u, v, n, t);
-
 
136
        return c * translation_Mat4x4f( -eye );
-
 
137
    }
-
 
138
 
73
}
139
}