![]() |
Beaming Scene Service
2.0
RakNet wrapper for managing data communications between multiple Beaming clients
|
00001 #ifndef COMMON_S3D 00002 #define COMMON_S3D 00003 00004 var RADTODEG=180/Pi; 00005 var DEGTORAD=Pi/180; 00006 00007 00008 var Time = 0.0; 00009 var Dt = 0.0; 00010 var frozen = false; 00011 00012 00013 function LoadShader(ShaderName) 00014 { 00015 var Shader = CVmShaderProgram(ShaderName); 00016 00017 var shaderLog = Shader.GetLinkerLog(); 00018 outputln("Loading Shader", ShaderName); 00019 outputln(shaderLog); 00020 00021 var index; 00022 var name; 00023 var type; 00024 var nameType; 00025 var size; 00026 00027 00028 for (index =0; index<Shader.GetUniformCount(); index++) 00029 { 00030 Shader.GetUniform( index, &name, &type, &nameType, &size ); 00031 outputln("Uniform ", index, name, type, nameType, size); 00032 } 00033 return Shader; 00034 } 00035 00036 00037 // Draws a grid 00038 function DrawGrid(col, size) 00039 { 00040 /* let's not mess up current OpenGL status */ 00041 glPushAttrib(GL_LIGHTING_BIT | GL_LINE_BIT | GL_CURRENT_BIT); 00042 00043 glLineWidth(1); 00044 glDisable(GL_LIGHTING); 00045 glColor(col); 00046 var max = size / 2.0; 00047 var min = -max; 00048 var step = size / 10.0; 00049 00050 glBegin(GL_LINES); 00051 for (var i = min; i <= max; i += step) 00052 { 00053 glVertex(i, 0, max); 00054 glVertex(i, 0, min); 00055 00056 glVertex(max, 0, i); 00057 glVertex(min, 0, i); 00058 } 00059 glEnd(); 00060 00061 /* polite restoration of previous OpenGL status */ 00062 glPopAttrib(); 00063 } 00064 00065 function DrawLine(A, B) 00066 { 00067 00068 glBegin(GL_LINES); 00069 glVertex(A); 00070 glVertex(B); 00071 glEnd(); 00072 } 00073 00074 00075 00076 function CameraMoveMouse() 00077 { 00078 static var InMouseR = false, InMouseL = false; 00079 static var PrecX = 0, PrecY = 0; 00080 static var prevPos=vector(3); 00081 // Change these values to modify the mouse sensitivity 00082 var TR_SENSITIVITY = 0.00001;// * SceneScale; 00083 var ROT_SENSITIVITY = 0.001; 00084 // Mouse manager 00085 if(Mouse.ButtonL && !Mouse.ButtonR) 00086 { 00087 //==== Left Button: Camera rotation ====// 00088 if (InMouseL) 00089 { 00090 00091 CameraRotate(( Mouse.X-PrecX)*ROT_SENSITIVITY,0,1,0); 00092 CameraRotateABS((Mouse.Y-PrecY)*ROT_SENSITIVITY,1,0,0); 00093 } 00094 else 00095 { 00096 00097 PrecX = Mouse.X; 00098 PrecY = Mouse.Y; 00099 } 00100 InMouseL = true; 00101 InMouseR = false; 00102 } 00103 else 00104 if(Mouse.ButtonR) 00105 { 00106 00107 //==== Right Button: Camera translation ====// 00108 if (InMouseR) 00109 { 00110 var CameraMatrix = CameraGetMatrix(); 00111 var CameraPos = CameraGetPosition(); 00112 if (!Mouse.ButtonL) 00113 //==== Translation on X and Z axis ====// 00114 CameraPos += CameraGetZAxis() * (Mouse.y-PrecY)*TR_SENSITIVITY + CameraGetXAxis() * (Mouse.X- PrecX)*TR_SENSITIVITY; 00115 else 00116 //==== Right + Left Button: Translation on Y axis ====// 00117 CameraPos -= CameraGetYAxis() * (Mouse.y-PrecY)*TR_SENSITIVITY; 00118 CameraSetPosition(CameraPos); 00119 } 00120 else 00121 { 00122 PrecX = Mouse.X; 00123 PrecY = Mouse.Y; 00124 } 00125 InMouseR = true; 00126 InMouseL = false; 00127 } 00128 else 00129 { 00130 InMouseR = false; 00131 InMouseL = false; 00132 } 00133 00134 var CameraPos = CameraGetPosition(); 00135 var CameraDir = CameraGetDirection(); 00136 00137 /* HUDprintAt(HUDtopLine(), "Camera @: %f %f %f Direction: %f %f %f\n", 00138 CameraPos[0], CameraPos[1], CameraPos[2], CameraDir[0], CameraDir[1], CameraDir[2] ); 00139 */ 00140 CameraSetPosition(CameraGetPosition()+CameraGetDirection()*(0.001*Mouse.Wheel)); 00141 var curPos=CameraGetPosition(); 00142 CameraSetPosition(curPos+0.95*(curPos-prevPos)); 00143 prevPos=curPos; 00144 } 00145 00146 00147 function DrawAxis(o, ax){ 00148 Var axlen=0.1; 00149 glBegin(GL_LINES); 00150 glVertex(o); 00151 glVertex(o+ax*axlen); 00152 glEnd(); 00153 } 00154 00155 function DrawAxes(o,xax,yax,zax){ 00156 glPushAttrib(GL_LIGHTING|GL_DEPTH_TEST); 00157 glDisable(GL_LIGHTING); 00158 glDisable(GL_DEPTH_TEST); 00159 glLineWidth(3.0); 00160 glColor(1.0, 0.0, 0.0,1.0); 00161 DrawAxis(o,xAx); 00162 glColor(0.0, 1.0, 0.0,1.0); 00163 DrawAxis(o,yAx); 00164 glColor(0.0, 0.0, 1.0,1.0); 00165 DrawAxis(o,zAx); 00166 glPopAttrib(); 00167 } 00168 00169 function DrawAAxes(o){ 00170 DrawAxes(o,[1,0,0],[0,1,0],[0,0,1]); 00171 } 00172 00173 00174 class CVmVec3f 00175 { 00176 var theVec; 00177 setValue(vec); 00178 setPosition(vec); 00179 getPosition(); 00180 getValue(); 00181 addValue(x); 00182 }; 00183 00184 function CVmVec3f::CVmVec3f(x,y,z){ 00185 theVec=[x,y,z]; 00186 } 00187 00188 function CVmVec3f::setValue(vec) 00189 { 00190 theVec=vec; 00191 } 00192 function CVmVec3f::getValue() 00193 { 00194 return theVec; 00195 } 00196 00197 function CVmVec3f::setPosition(vec) 00198 { 00199 theVec=vec; 00200 } 00201 function CVmVec3f::getPosition() 00202 { 00203 return theVec; 00204 } 00205 00206 00207 function CVmVec3f::addValue(x){ 00208 theVec+=x; 00209 } 00210 00211 00212 class CVmFloat 00213 { 00214 var theFloat; 00215 setValue(x); 00216 getValue(); 00217 addValue(x); 00218 }; 00219 00220 function CVmFloat::CVmFloat(x){ 00221 theFloat=x; 00222 } 00223 00224 function CVmFloat::setValue(x) 00225 { 00226 theFloat=x; 00227 } 00228 function CVmFloat::getValue() 00229 { 00230 return theFloat; 00231 } 00232 00233 function CVmFloat::addValue(x) 00234 { 00235 theFloat+=x; 00236 } 00237 00238 00239 00240 #endif //COMMON_S3D