Beaming Scene Service  2.0
RakNet wrapper for managing data communications between multiple Beaming clients
sampleXVRclient/Common.s3d
Go to the documentation of this file.
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
 All Classes Files Functions Variables Enumerations Enumerator Defines