00001
00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024
00025
00026 #include "driver_opengl.h"
00027
00028 namespace NL3D {
00029
00030 void CDriverGL::setFrustum(float left, float right, float bottom, float top, float znear, float zfar, bool perspective)
00031 {
00032 glMatrixMode(GL_PROJECTION);
00033 glLoadIdentity();
00034 if (perspective)
00035 {
00036 glFrustum(left,right,bottom,top,znear,zfar);
00037 }
00038 else
00039 {
00040 glOrtho(left,right,bottom,top,znear,zfar);
00041 }
00042 glMatrixMode(GL_MODELVIEW);
00043 }
00044
00045
00046
00047 void CDriverGL::setupViewMatrix(const CMatrix& mtx)
00048 {
00049
00050 CMatrix changeBasis;
00051 CVector I(1,0,0);
00052 CVector J(0,0,-1);
00053 CVector K(0,1,0);
00054
00055 changeBasis.identity();
00056 changeBasis.setRot(I,J,K, true);
00057
00058 changeBasis*= mtx;
00059 _ViewMtx=changeBasis;
00060
00061 _MatrixSetupDirty= true;
00062 _ViewMatrixSetupDirty= true;
00063 }
00064
00065 CMatrix CDriverGL::getViewMatrix(void) const
00066 {
00067
00068 CMatrix changeBasis;
00069 CVector I(1,0,0);
00070 CVector J(0,0,1);
00071 CVector K(0,-1,0);
00072
00073 changeBasis.identity();
00074 changeBasis.setRot(I,J,K, true);
00075 return(changeBasis*_ViewMtx);
00076 }
00077
00078 void CDriverGL::setupModelMatrix(const CMatrix& mtx, uint8 n)
00079 {
00080
00081 nlassert (n<IDriver::MaxModelMatrix);
00082
00083
00084
00085 _MatrixSetupDirty= true;
00086
00087 _ModelViewMatrixDirty.set(n);
00088 _ModelViewMatrixDirtyPaletteSkin.set(n);
00089
00090
00091
00092 _ModelViewMatrix[n]= _ViewMtx*mtx;
00093 }
00094
00095
00096
00097
00098 void CDriverGL::CMatrix3x4::set(const CMatrix &mat)
00099 {
00100 const float *m =mat.get();
00101 a11= m[0]; a12= m[4]; a13= m[8] ; a14= m[12];
00102 a21= m[1]; a22= m[5]; a23= m[9] ; a24= m[13];
00103 a31= m[2]; a32= m[6]; a33= m[10]; a34= m[14];
00104 }
00105
00106
00107 }