Add cutplanes support, double-sided normals and explicit iso names (from standard NOMAD VR code).

parent 34956c87
......@@ -30,6 +30,7 @@ int ISOS;
int TIMESTEPS;
float **isocolours; // [ISOS][4];
const char **plyfiles;
const char *** fullplyfiles;
float **translations;
float userpos[3];
float scaling;
......@@ -73,6 +74,7 @@ bool showcontrollers;
bool gazenavigation;
int transparencyquality;
float nearclip, farclip;
float nearcut, farcut;
//markers such as hole positions and electron positions
float ** markers;
......@@ -82,6 +84,8 @@ float cubetrans[3];
float animationspeed;
float movementspeed;
menubutton_t menubutton;
//added variables for move with Particles
int isoBufferSize;
float arrowScalingVelocity;
......@@ -315,6 +319,23 @@ int loadConfigFile(const char * f)
}
}
else if (!strcmp(s, "fullvalues")) {
if (TIMESTEPS == 0 || ISOS == 0) {
eprintf("full values with no previous correct isos or timesteps parameter\n");
fclose(F);
return -3;
}
fullplyfiles = new const char **[TIMESTEPS];
for (int j = 0; j < TIMESTEPS; j++) {
for (int i = 0; i < ISOS; i++) {
r = readString(F, s);
if (r != 0)
return -14;
free((void*)(fullplyfiles[j][i]));
fullplyfiles[j][i] = strdup(s);
}
}
}
else if (!strcmp(s, "colours")) {
if (ISOS == 0) {
eprintf( "colours with no previous correct isos parameter\n");
......@@ -622,6 +643,10 @@ int loadConfigFile(const char * f)
r=fscanf (F, "%f %f", &nearclip, &farclip);
if (r<2)
eprintf ("Error reading clippingplanes values");
} else if (!strcmp(s, "cutplanes")) {
r = fscanf(F, "%f %f", &nearcut, &farcut);
if (r<2)
eprintf("Error reading clippingplanes values");
}else if (!strcmp (s, "bondscolour")) {
r=fscanf (F, "%f %f %f", bondscolours, bondscolours+1, bondscolours+2);
if (r<3)
......@@ -642,6 +667,15 @@ int loadConfigFile(const char * f)
r=fscanf (F, "%f", &animationspeed);
if (r<1)
eprintf ("Error reading animationspeed");
} else if (!strcmp(s, "menubutton")) {
r = fscanf(F, "%99s", s);
if (!strcmp(s, "Record"))
menubutton = Record;
else if (!strcmp(s, "CuttingPlane"))
menubutton = CuttingPlane;
else if (!strcmp (s, "Nothing"))
menubutton = Nothing;
else eprintf ("Unknown menubutton parameter %s\n", s);
} else if (!strcmp (s, "movementspeed")) {
r=fscanf (F, "%f", &movementspeed);
if (r<1)
......
......@@ -25,6 +25,7 @@ extern int ISOS;
extern int TIMESTEPS;
extern float **isocolours; // [ISOS][4];
extern const char **plyfiles;
extern const char *** fullplyfiles; //explicit plyfiles for all timesteps
extern float **translations;
extern float userpos[3];
extern float scaling;
......@@ -69,6 +70,7 @@ extern bool gazenavigation;
extern int transparencyquality;
extern float nearclip, farclip;
extern float nearcut, farcut;
extern float animationspeed; //how fast to change to next timestep
extern float movementspeed; //how fast to move the user
......@@ -89,4 +91,12 @@ extern float arrowScalingVelocity;
extern float arrowScalingAcceleration;
extern float arrowScalingCross;
typedef enum {
Record,
CuttingPlane,
Nothing
} menubutton_t;
extern menubutton_t menubutton;
#endif //__CONFIGFILE_H
......@@ -50,8 +50,9 @@ const char * const IsoShaders [] = {"Iso Renderer",
"void main()\n"
"{\n"
"lowp vec3 nn=normalize(vnormal);"
"lowp float a=max(0.0, dot(nn, vec3(0,sqrt(2.0)/2.0,sqrt(2.0)/2.0)));\n"
"lowp float b=max(0.0, dot(nn, vec3(0,0,1)));\n"
//two faced normal
"lowp float a=abs (dot(nn, vec3(0,sqrt(2.0)/2.0,sqrt(2.0)/2.0)));\n"
"lowp float b=abs (dot(nn, vec3(0,0,1)));
"highp vec4 res=vcolor;\n"
" outputColor = vec4 ((res.rgb) * (0.2 + 0.2*a + 0.3*b), vcolor.a);\n"
"}\n"
......@@ -111,8 +112,8 @@ const char *const IsoTransparentShaders [] = {"Iso Transparent Renderer",
"if ((pos.z/pos.w+1.0)/2.0 <= mytex.r+0.00001 ) discard;\n"
"lowp vec3 nn=normalize(n);"
"lowp float a=max(0.0, dot(nn, vec3(0,sqrt(2.0)/2.0,sqrt(2.0)/2.0)));\n"
"lowp float b=max(0.0, dot(nn, vec3(0,0,1)));\n"
"lowp float a=abs(dot(nn, vec3(0,sqrt(2.0)/2.0,sqrt(2.0)/2.0)));\n"
"lowp float b=abs(dot(nn, vec3(0,0,1)));\n"
"highp vec4 res=color;\n"
//"outputColor = vec4(pos.x/pos.w*0.5+0.5, pos.y/pos.w*0.5+0.5, 0,1);\n"
" outputColor = vec4 ((res.rgb) * (0.2 + 0.2*a + 0.3*b), color.a);\n"
......
......@@ -1294,10 +1294,22 @@ bool CMainApplication::HandleInput()
else if(unDevice !=firstdevice && seconddevice==-1)
seconddevice=unDevice;
if (firstdevice==unDevice)
savetodisk = !savetodisk;
else
if (firstdevice==unDevice) {
if (menubutton==Record)
savetodisk = !savetodisk;
else if (menubutton == CuttingPlane) {
if (firstdevice != -1 && seconddevice != -1) {
static float origNearclip = nearclip;
static float t = M_PI * 3.0f / 2.0f;
nearclip = nearcut + (farcut - nearcut) / 2.0f + sinf(t)*(farcut - nearcut) / 2.0f;
SetupCameras();
t += 0.1f;
}
}
} else {
showAtoms= !showAtoms;
}
}
else if (buttonPressed[1][unDevice] && 0 == (state.ulButtonPressed&vr::ButtonMaskFromId(vr::k_EButton_ApplicationMenu)))
{
......@@ -2415,8 +2427,10 @@ void CMainApplication::SetupIsosurfaces()
SDL_GL_SwapWindow(m_pWindow);
//http://stackoverflow.com/questions/9052224/error4error-c3861-snprintf-identifier-not-found
sprintf(tmpname, "%s%s%d-%s.ply", PATH, lods[currentlod], time, plyfiles[p % ISOS]);
if (!fullplyfiles)
sprintf(tmpname, "%s%s%d-%s.ply", PATH, lods[currentlod], time, plyfiles[p % ISOS]);
else
sprintf(tmpname, "%s%s", PATH, fullplyfiles[time][p%ISOS]);
vertdataarray[currentlod][p].clear();
vertindicesarray[currentlod][p].clear();
......@@ -2951,8 +2965,10 @@ void CMainApplication::LoadIsosurfacesDyn(int buffer){
//Loading Screen
//http://stackoverflow.com/questions/9052224/error4error-c3861-snprintf-identifier-not-found
sprintf(tmpname, "%s%d-%s.ply", PATH, time, plyfiles[p % ISOS]);
if (!fullplyfiles)
sprintf(tmpname, "%s%d-%s.ply", PATH, time, plyfiles[p % ISOS]);
else
sprintf(tmpname, "%s%s", PATH, fullplyfiles[time][p%ISOS]);
vertdataarrayDyn[p].clear();
vertindicesarrayDyn[p].clear();
......@@ -3124,7 +3140,10 @@ int CMainApplication::sdl_LoadIsos(){
for (int p = 0; p < myNUMPLY; p++) {
//http://stackoverflow.com/questions/9052224/error4error-c3861-snprintf-identifier-not-found
sprintf(tmpname, "%s%d-%s.ply", PATH, time, plyfiles[p % ISOS]);
if (!fullplyfiles)
sprintf(tmpname, "%s%d-%s.ply", PATH, time, plyfiles[p % ISOS]);
else
sprintf(tmpname, "%s%s", PATH, fullplyfiles[time][p%ISOS]);
//eprintf("%s",tmpname);
vertdataarrayDyn[p].clear();
......@@ -5044,4 +5063,4 @@ int main(int argc, char *argv[])
cleanConfig();
_CrtDumpMemoryLeaks();
return 0;
}
\ No newline at end of file
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment