Bondthickness in Vive

Add default colour for markers
Add option to make the side button go either forward (+1), backwards (-1)
or disabled (0) in timestep.
Update Vive to latest NOMADVRLib
Update documentation.
parent e9f9cd7f
...@@ -2,7 +2,7 @@ This repository contains the demos for Google cardboard using GVR Android SDK v1 ...@@ -2,7 +2,7 @@ This repository contains the demos for Google cardboard using GVR Android SDK v1
https://github.com/googlevr/gvr-android-sdk https://github.com/googlevr/gvr-android-sdk
Clone that repository and add the content of this one inside the Samples directory. Clone that repository and add the content of this one inside the Samples directory.
Copy the content of the ../libs directory (happyhttp, rapidjson, rply) and NOMADVRLib and GoogleCardboard into Copy the content of the ../libs directory (happyhttp, rapidjson, rply, LodePNG) and NOMADVRLib and GoogleCardboard into
NOMADgvrT/src/main/jni NOMADgvrT/src/main/jni
Enable support for ndk (tested: android-ndk-r10d) in settings.gradle: Enable support for ndk (tested: android-ndk-r10d) in settings.gradle:
......
...@@ -77,6 +77,7 @@ float ** markercolours; ...@@ -77,6 +77,7 @@ float ** markercolours;
float animationspeed; float animationspeed;
float movementspeed; float movementspeed;
int sidebuttontimestep;
menubutton_t menubutton; menubutton_t menubutton;
...@@ -231,6 +232,7 @@ void initState() ...@@ -231,6 +232,7 @@ void initState()
animationspeed=1.0f; animationspeed=1.0f;
movementspeed=1.0f; movementspeed=1.0f;
sidebuttontimestep=-1;
infolinecolour[0] = 1.0f; infolinecolour[0] = 1.0f;
infolinecolour[1] = 1.0f; infolinecolour[1] = 1.0f;
...@@ -393,7 +395,7 @@ int loadConfigFile(const char * f) ...@@ -393,7 +395,7 @@ int loadConfigFile(const char * f)
else if (!strcmp(s, "scaling")) { else if (!strcmp(s, "scaling")) {
r = fscanf(F, "%f", &scaling); r = fscanf(F, "%f", &scaling);
} }
else if (!strcmp(s, "abc")) { else if (!strcmp(s, "abc") || !strcmp (s, "unitcell") ) {
for (int i=0;i<3;i++) for (int i=0;i<3;i++)
for (int j=0;j<3;j++) { for (int j=0;j<3;j++) {
r = fscanf(F, "%f", &(abc[i][j])); r = fscanf(F, "%f", &(abc[i][j]));
...@@ -672,6 +674,10 @@ int loadConfigFile(const char * f) ...@@ -672,6 +674,10 @@ int loadConfigFile(const char * f)
r=fscanf (F, "%f", &movementspeed); r=fscanf (F, "%f", &movementspeed);
if (r<1) if (r<1)
eprintf ("Error reading movementspeed"); eprintf ("Error reading movementspeed");
} else if (!strcmp (s, "sidebuttontimestep")) {
r=fscanf (F, "%d", &sidebuttontimestep);
if (r<1)
eprintf ("Error reading sidebuttontimestep");
#ifdef WIN32 #ifdef WIN32
} else if (!strcmp (s, "info")) { } else if (!strcmp (s, "info")) {
information i; information i;
...@@ -701,10 +707,10 @@ int loadConfigFile(const char * f) ...@@ -701,10 +707,10 @@ int loadConfigFile(const char * f)
//verification and additional processing //verification and additional processing
fclose(F); fclose(F);
if (ISOS != 0 && TIMESTEPS==0) { if (ISOS != 0 && TIMESTEPS == 0) {
eprintf( "Isos requested, but no timesteps indicated\n"); eprintf("Isos requested, but no timesteps indicated\n");
return -6; return -6;
} }
if (ISOS !=0 && plyfiles[0] == 0) { if (ISOS !=0 && plyfiles[0] == 0) {
eprintf( "Missing values parameter\n"); eprintf( "Missing values parameter\n");
fclose(F); fclose(F);
...@@ -727,6 +733,17 @@ int loadConfigFile(const char * f) ...@@ -727,6 +733,17 @@ int loadConfigFile(const char * f)
atomtrajectories.push_back(i); atomtrajectories.push_back(i);
} }
if (markers && !markercolours) {
markercolours=new float* [TIMESTEPS];
for (int i=0;i<TIMESTEPS;i++) {
markercolours[i]=new float[4];
for (int j = 0; j < 3; j++) {
markercolours [i][j]=1-BACKGROUND[j];
}
markercolours[i][3]=0.5;
}
}
//chemical bonds //chemical bonds
//if (numAtoms) { //if (numAtoms) {
//} //}
......
...@@ -72,6 +72,7 @@ extern float nearclip, farclip; ...@@ -72,6 +72,7 @@ extern float nearclip, farclip;
extern float animationspeed; //how fast to change to next timestep extern float animationspeed; //how fast to change to next timestep
extern float movementspeed; //how fast to move the user extern float movementspeed; //how fast to move the user
extern int sidebuttontimestep; //clicking the second side button: timestep ++, -- or do nothing
//markers such as hole positions and electron positions //markers such as hole positions and electron positions
extern float ** markers; extern float ** markers;
......
...@@ -56,25 +56,23 @@ GLenum atomTexture(GLuint t) ...@@ -56,25 +56,23 @@ GLenum atomTexture(GLuint t)
a[(i+atomsInPeriodicTable)*4+3]=extraAtomData[i][3]*atomScaling; a[(i+atomsInPeriodicTable)*4+3]=extraAtomData[i][3]*atomScaling;
} }
glBindTexture(GL_TEXTURE_2D, t); //atom texture glBindTexture(GL_TEXTURE_2D, t); //atom texture
if ((e = glGetError()) != GL_NO_ERROR) { if ((e = glGetError()) != GL_NO_ERROR) {
eprintf( "opengl error %d, atomTexture bind\n", e); eprintf("opengl error %d, atomTexture bind\n", e);
} }
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
if ((e = glGetError()) != GL_NO_ERROR) { if ((e = glGetError()) != GL_NO_ERROR) {
eprintf( "opengl error %d, atomTexture parameter\n", e); eprintf("opengl error %d, atomTexture parameter\n", e);
} }
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, finalatoms, 1, 0, GL_RGBA, GL_FLOAT, a); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, finalatoms, 1, 0, GL_RGBA, GL_FLOAT, a);
if ((e = glGetError()) != GL_NO_ERROR) { if ((e = glGetError()) != GL_NO_ERROR) {
eprintf( "opengl error %d, atomTexture glTexImage2D\n", e); eprintf("opengl error %d, atomTexture glTexImage2D\n", e);
} }
glBindTexture( GL_TEXTURE_2D, 0 ); glBindTexture( GL_TEXTURE_2D, 0 );
if ((e = glGetError()) != GL_NO_ERROR) { if ((e = glGetError()) != GL_NO_ERROR) {
eprintf( "opengl error %d, atomTexture\n", e); eprintf("opengl error %d, atomTexture\n", e);
} }
delete [] a; delete [] a;
return e; return e;
...@@ -414,7 +412,7 @@ GLenum SetupAtoms(GLuint **AtomVAO /*[4]*/, GLuint **AtomVertBuffer /*[3]*/, GLu ...@@ -414,7 +412,7 @@ GLenum SetupAtoms(GLuint **AtomVAO /*[4]*/, GLuint **AtomVertBuffer /*[3]*/, GLu
e=glGetError(); e=glGetError();
if ((e = glGetError()) != GL_NO_ERROR) if ((e = glGetError()) != GL_NO_ERROR)
eprintf( "opengl error %d, creating chemical bonds, l %d\n", e, __LINE__); eprintf("opengl error %d, creating chemical bonds, l %d\n", e, __LINE__);
} }
//now clones //now clones
if (basisvectorreps ||!clonedAtoms) //do not replicate if (basisvectorreps ||!clonedAtoms) //do not replicate
......
...@@ -179,12 +179,14 @@ ...@@ -179,12 +179,14 @@
<ClCompile Include="NOMADVRLib\atomsGL.cpp" /> <ClCompile Include="NOMADVRLib\atomsGL.cpp" />
<ClCompile Include="NOMADVRLib\CompileGLShader.cpp" /> <ClCompile Include="NOMADVRLib\CompileGLShader.cpp" />
<ClCompile Include="NOMADVRLib\ConfigFile.cpp" /> <ClCompile Include="NOMADVRLib\ConfigFile.cpp" />
<ClCompile Include="NOMADVRLib\ConfigFileAtoms.cpp" />
<ClCompile Include="NOMADVRLib\Grid.cpp" /> <ClCompile Include="NOMADVRLib\Grid.cpp" />
<ClCompile Include="NOMADVRLib\IsoShaders.cpp" /> <ClCompile Include="NOMADVRLib\IsoShaders.cpp" />
<ClCompile Include="NOMADVRLib\IsosurfacesGL.cpp" /> <ClCompile Include="NOMADVRLib\IsosurfacesGL.cpp" />
<ClCompile Include="NOMADVRLib\markerShaders.cpp" /> <ClCompile Include="NOMADVRLib\markerShaders.cpp" />
<ClCompile Include="NOMADVRLib\polyhedron.cpp" /> <ClCompile Include="NOMADVRLib\polyhedron.cpp" />
<ClCompile Include="NOMADVRLib\TessShaders.cpp" /> <ClCompile Include="NOMADVRLib\TessShaders.cpp" />
<ClCompile Include="NOMADVRLib\TexturedShaders.cpp" />
<ClCompile Include="NOMADVRLib\UnitCellShaders.cpp" /> <ClCompile Include="NOMADVRLib\UnitCellShaders.cpp" />
<ClCompile Include="rply\rply.c" /> <ClCompile Include="rply\rply.c" />
</ItemGroup> </ItemGroup>
...@@ -198,6 +200,7 @@ ...@@ -198,6 +200,7 @@
<ClInclude Include="NOMADVRLib\atomsGL.h" /> <ClInclude Include="NOMADVRLib\atomsGL.h" />
<ClInclude Include="NOMADVRLib\CompileGLShader.h" /> <ClInclude Include="NOMADVRLib\CompileGLShader.h" />
<ClInclude Include="NOMADVRLib\ConfigFile.h" /> <ClInclude Include="NOMADVRLib\ConfigFile.h" />
<ClInclude Include="NOMADVRLib\ConfigFileAtoms.h" />
<ClInclude Include="NOMADVRLib\eprintf.h" /> <ClInclude Include="NOMADVRLib\eprintf.h" />
<ClInclude Include="NOMADVRLib\Grid.h" /> <ClInclude Include="NOMADVRLib\Grid.h" />
<ClInclude Include="NOMADVRLib\IsoShaders.h" /> <ClInclude Include="NOMADVRLib\IsoShaders.h" />
......
...@@ -1015,9 +1015,11 @@ bool CMainApplication::HandleInput() ...@@ -1015,9 +1015,11 @@ bool CMainApplication::HandleInput()
seconddevice=unDevice; seconddevice=unDevice;
if (unDevice == firstdevice) { if (unDevice == firstdevice) {
currentset--; currentset+=sidebuttontimestep;
if (currentset < 0) if (currentset < 0)
currentset = TIMESTEPS - 1; currentset = TIMESTEPS - 1;
else if (currentset > TIMESTEPS - 1)
currentset=0;
} else { } else {
currentiso++; currentiso++;
if (currentiso > ISOS) if (currentiso > ISOS)
...@@ -1150,7 +1152,7 @@ void CMainApplication::HapticFeedback(int device) ...@@ -1150,7 +1152,7 @@ void CMainApplication::HapticFeedback(int device)
else else
mycurrentset=currentset; mycurrentset=currentset;
vr::HmdMatrix34_t mat=dp.mDeviceToAbsoluteTracking; vr::HmdMatrix34_t mat=dp.mDeviceToAbsoluteTracking;
Vector3 controllerPos(mat.m[0][3], mat.m[1][3],mat.m[2][3]); Vector3 controllerPos(mat.m[0][3]/scaling, mat.m[1][3]/scaling,mat.m[2][3]/scaling);
int atomsInTimestep; int atomsInTimestep;
if (mycurrentset==0) if (mycurrentset==0)
atomsInTimestep=numAtoms[0]; atomsInTimestep=numAtoms[0];
...@@ -1326,7 +1328,7 @@ bool CMainApplication::CreateAllShaders() ...@@ -1326,7 +1328,7 @@ bool CMainApplication::CreateAllShaders()
return false; return false;
} }
m_unRenderModelProgramID = CompileGLShader( m_unRenderModelProgramID = CompileGLShader(
TexturedShaders[SHADERNAME], TexturedShaders[SHADERNAME],
TexturedShaders[SHADERVERTEX], TexturedShaders[SHADERVERTEX],
TexturedShaders[SHADERFRAGMENT] TexturedShaders[SHADERFRAGMENT]
...@@ -1474,6 +1476,7 @@ void CMainApplication::SetupScene() ...@@ -1474,6 +1476,7 @@ void CMainApplication::SetupScene()
SetupUnitCell(); SetupUnitCell();
SetupMarker(); SetupMarker();
SetupInfoCube(); SetupInfoCube();
movementspeed/=scaling;
} }
void CMainApplication::SetupInfoCube() void CMainApplication::SetupInfoCube()
...@@ -1667,6 +1670,7 @@ void CMainApplication::SetupIsosurfaces() ...@@ -1667,6 +1670,7 @@ void CMainApplication::SetupIsosurfaces()
//matFinal.translate(translations[p%ISOS][0]+cubetrans[0], translations[p%ISOS][1]+cubetrans[1], translations[p%ISOS][2]+cubetrans[2]); //matFinal.translate(translations[p%ISOS][0]+cubetrans[0], translations[p%ISOS][1]+cubetrans[1], translations[p%ISOS][2]+cubetrans[2]);
Matrix4 matcubetrans, mvs; Matrix4 matcubetrans, mvs;
if (voxelSize[0]!=-1 ||has_abc) { if (voxelSize[0]!=-1 ||has_abc) {
mvs.scale(scaling);
if (voxelSize[0]!=-1) if (voxelSize[0]!=-1)
mvs.scale(1.0f / (float)voxelSize[0], 1.0f / (float)voxelSize[1], 1.0f / (float)voxelSize[2]); mvs.scale(1.0f / (float)voxelSize[0], 1.0f / (float)voxelSize[1], 1.0f / (float)voxelSize[2]);
matcubetrans.translate(cubetrans[0], cubetrans[1], cubetrans[2]); //angstrom matcubetrans.translate(cubetrans[0], cubetrans[1], cubetrans[2]); //angstrom
...@@ -1684,11 +1688,11 @@ void CMainApplication::SetupIsosurfaces() ...@@ -1684,11 +1688,11 @@ void CMainApplication::SetupIsosurfaces()
Matrix4 sc; Matrix4 sc;
sc.scale(supercell[0], supercell[1], supercell[2]); sc.scale(supercell[0], supercell[1], supercell[2]);
Matrix4 sctrans; Matrix4 sctrans;
sctrans.translate(-translations[p%ISOS][2], -translations[p%ISOS][1], -translations[p%ISOS][0]); sctrans.translate(-translations[p%ISOS][2]*scaling, -translations[p%ISOS][1]*scaling, -translations[p%ISOS][0]*scaling);
matFinal = rot*abcm*sctrans*sc*mvs; matFinal = rot*abcm*sctrans*sc*mvs;
} else { } else {
matFinal.translate(translations[p%ISOS][0], translations[p%ISOS][1], translations[p%ISOS][2]); matFinal.translate(translations[p%ISOS][0]*scaling, translations[p%ISOS][1]*scaling, translations[p%ISOS][2]*scaling);
matFinal=mat*matFinal; matFinal=mat*matFinal; //mat above defined has scaling and rotation
} }
if (!AddModelToScene(matFinal.get(), vertdataarray[currentlod][p], vertindicesarray[currentlod][p], if (!AddModelToScene(matFinal.get(), vertdataarray[currentlod][p], vertindicesarray[currentlod][p],
...@@ -2165,9 +2169,9 @@ void CMainApplication::PaintGrid(const vr::Hmd_Eye &nEye, int iso) { ...@@ -2165,9 +2169,9 @@ void CMainApplication::PaintGrid(const vr::Hmd_Eye &nEye, int iso) {
int c=0; int c=0;
Matrix4 trans; Matrix4 trans;
Vector3 iPos = Vector3(0, 0, 0); //Vector3 iPos = Vector3(0, 0, 0);
trans.translate(iPos).translate(UserPosition); trans/*.translate(iPos)*/.translate(UserPosition*scaling);
Matrix4 transform = GetCurrentViewProjectionMatrix(nEye)*trans; Matrix4 transform = GetCurrentViewProjectionMatrix(nEye)*trans;
glUniformMatrix4fv(m_nSceneMatrixLocation, 1, GL_FALSE, transform.get()); glUniformMatrix4fv(m_nSceneMatrixLocation, 1, GL_FALSE, transform.get());
...@@ -2205,7 +2209,8 @@ void CMainApplication::RenderUnitCell(const vr::Hmd_Eye &nEye) ...@@ -2205,7 +2209,8 @@ void CMainApplication::RenderUnitCell(const vr::Hmd_Eye &nEye)
//unit cells //unit cells
Matrix4 globalScaling;
globalScaling.scale(scaling, scaling, scaling);
int p[3]; int p[3];
for (p[0]=0;p[0]<repetitions[0];(p[0])++) for (p[0]=0;p[0]<repetitions[0];(p[0])++)
for (p[1]=0;p[1]<repetitions[1];(p[1])++) for (p[1]=0;p[1]<repetitions[1];(p[1])++)
...@@ -2217,7 +2222,7 @@ void CMainApplication::RenderUnitCell(const vr::Hmd_Eye &nEye) ...@@ -2217,7 +2222,7 @@ void CMainApplication::RenderUnitCell(const vr::Hmd_Eye &nEye)
trans.identity(); trans.identity();
trans.translate(iPos).rotateX(-90).translate(UserPosition); trans.translate(iPos).rotateX(-90).translate(UserPosition);
transform = GetCurrentViewProjectionMatrix(nEye)*trans; transform = GetCurrentViewProjectionMatrix(nEye)*globalScaling*trans;
glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get()); glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get());
if ((e = glGetError()) != GL_NO_ERROR) if ((e = glGetError()) != GL_NO_ERROR)
dprintf("Gl error after glUniform4fv 1 RenderUnitCell: %d, %s\n", e, gluErrorString(e)); dprintf("Gl error after glUniform4fv 1 RenderUnitCell: %d, %s\n", e, gluErrorString(e));
...@@ -2233,10 +2238,10 @@ void CMainApplication::RenderUnitCell(const vr::Hmd_Eye &nEye) ...@@ -2233,10 +2238,10 @@ void CMainApplication::RenderUnitCell(const vr::Hmd_Eye &nEye)
//supercell //supercell
glEnable(GL_LINE_SMOOTH); glEnable(GL_LINE_SMOOTH);
glLineWidth(2); glLineWidth(2.0f);
trans.identity(); trans.identity();
trans.rotateX(-90).translate(UserPosition); trans.rotateX(-90).translate(UserPosition);
transform = GetCurrentViewProjectionMatrix(nEye)*trans; transform = GetCurrentViewProjectionMatrix(nEye)*globalScaling*trans;
glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get()); glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get());
if ((e = glGetError()) != GL_NO_ERROR) if ((e = glGetError()) != GL_NO_ERROR)
dprintf("Gl error after glUniform4fv 1 RenderUnitCell, supercell: %d, %s\n", e, gluErrorString(e)); dprintf("Gl error after glUniform4fv 1 RenderUnitCell, supercell: %d, %s\n", e, gluErrorString(e));
...@@ -2265,7 +2270,11 @@ glPatchParameterfv(GL_PATCH_DEFAULT_INNER_LEVEL,levelsi); ...@@ -2265,7 +2270,11 @@ glPatchParameterfv(GL_PATCH_DEFAULT_INNER_LEVEL,levelsi);
glPatchParameteri(GL_PATCH_VERTICES, 1); glPatchParameteri(GL_PATCH_VERTICES, 1);
trans.translate(iPos).rotateX(-90).translate(UserPosition); trans.translate(iPos).rotateX(-90).translate(UserPosition);
Matrix4 transform = GetCurrentViewProjectionMatrix(nEye)*trans;
Matrix4 globalScaling;
globalScaling.scale(scaling, scaling, scaling);
Matrix4 transform = GetCurrentViewProjectionMatrix(nEye)*globalScaling*trans;
if (numAtoms && showAtoms) { if (numAtoms && showAtoms) {
glBindVertexArray(m_unAtomVAO[0]); glBindVertexArray(m_unAtomVAO[0]);
...@@ -2275,7 +2284,7 @@ if (numAtoms && showAtoms) { ...@@ -2275,7 +2284,7 @@ if (numAtoms && showAtoms) {
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const void *)(0)); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const void *)(0));
glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const void *)(3 * sizeof(float))); glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const void *)(3 * sizeof(float)));
Matrix4 mv=GetCurrentViewMatrix(nEye)*trans; //Matrix4 mv=GetCurrentViewMatrix(nEye)*globalScaling*trans;
glUniformMatrix4fv(m_nAtomMatrixLocation, 1, GL_FALSE, transform.get()); glUniformMatrix4fv(m_nAtomMatrixLocation, 1, GL_FALSE, transform.get());
//glUniformMatrix4fv(m_nAtomMVLocation, 1, GL_FALSE, mv.get()); //glUniformMatrix4fv(m_nAtomMVLocation, 1, GL_FALSE, mv.get());
if ((e = glGetError()) != GL_NO_ERROR) if ((e = glGetError()) != GL_NO_ERROR)
...@@ -2298,6 +2307,7 @@ if (numClonedAtoms!=0 && (currentset==0||fixedAtoms) && showAtoms) { ...@@ -2298,6 +2307,7 @@ if (numClonedAtoms!=0 && (currentset==0||fixedAtoms) && showAtoms) {
//now bonds //now bonds
if (numBonds && displaybonds && showAtoms) { if (numBonds && displaybonds && showAtoms) {
glLineWidth(bondThickness);
glBindVertexArray(m_unAtomVAO[2]); glBindVertexArray(m_unAtomVAO[2]);
glUseProgram(m_unUnitCellProgramID); glUseProgram(m_unUnitCellProgramID);
glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get()); glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get());
...@@ -2310,6 +2320,7 @@ if (numBonds && displaybonds && showAtoms) { ...@@ -2310,6 +2320,7 @@ if (numBonds && displaybonds && showAtoms) {
if ((e = glGetError()) != GL_NO_ERROR) if ((e = glGetError()) != GL_NO_ERROR)
dprintf("Gl error after Render Atom bonds timestep =%d: %d, %s\n", currentset, e, gluErrorString(e)); dprintf("Gl error after Render Atom bonds timestep =%d: %d, %s\n", currentset, e, gluErrorString(e));
glLineWidth(1.0f);
} }
...@@ -2399,14 +2410,17 @@ void CMainApplication::CleanDepthTexture () ...@@ -2399,14 +2410,17 @@ void CMainApplication::CleanDepthTexture ()
void CMainApplication::RenderInfo(const vr::Hmd_Eye &nEye) void CMainApplication::RenderInfo(const vr::Hmd_Eye &nEye)
{ {
int e; int e;
if (info.size()==0) if (info.size() == 0)
return; return;
glBindVertexArray(m_unInfoVAO); glBindVertexArray(m_unInfoVAO);
glActiveTexture( GL_TEXTURE0 ); glActiveTexture( GL_TEXTURE0 );
glBindBuffer(GL_ARRAY_BUFFER, m_unInfoVertBuffer); glBindBuffer(GL_ARRAY_BUFFER, m_unInfoVertBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_unInfoIndexBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_unInfoIndexBuffer);
glUseProgram(m_unRenderModelProgramID); glUseProgram(m_unRenderModelProgramID);
Matrix4 globalScaling;
globalScaling.scale(scaling, scaling, scaling);
for (int i=0;i<info.size(); i++) { for (int i=0;i<info.size(); i++) {
Matrix4 trans; Matrix4 trans;
...@@ -2416,7 +2430,7 @@ for (int i=0;i<info.size(); i++) { ...@@ -2416,7 +2430,7 @@ for (int i=0;i<info.size(); i++) {
Matrix4 scal; Matrix4 scal;
scal.scale(info[i].size); scal.scale(info[i].size);
Matrix4 transform = GetCurrentViewProjectionMatrix(nEye)*trans*scal; Matrix4 transform = GetCurrentViewProjectionMatrix(nEye)*globalScaling*trans*scal;
glUniformMatrix4fv(m_nRenderModelMatrixLocation, 1, GL_FALSE, transform.get()); glUniformMatrix4fv(m_nRenderModelMatrixLocation, 1, GL_FALSE, transform.get());
glBindTexture(GL_TEXTURE_2D, info[i].tex); glBindTexture(GL_TEXTURE_2D, info[i].tex);
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0); glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0);
...@@ -2445,11 +2459,10 @@ for (int i = 0; i < info.size(); i++) { ...@@ -2445,11 +2459,10 @@ for (int i = 0; i < info.size(); i++) {
);//.transpose(); );//.transpose();
Matrix4 trans; Matrix4 trans;
trans.rotateX(-90).translate(UserPosition); trans.rotateX(-90).translate(UserPosition);
Matrix4 transform = GetCurrentViewProjectionMatrix(nEye)*trans*nt; Matrix4 transform = GetCurrentViewProjectionMatrix(nEye)*globalScaling*trans*nt;
glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get()); glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get());
if ((e = glGetError()) != GL_NO_ERROR) if ((e = glGetError()) != GL_NO_ERROR)
dprintf("Gl error after glUniform4fv 1 RenderInfo: %d, %s\n", dprintf("Gl error after glUniform4fv 1 RenderUnitCell: %d, %s\n", e, gluErrorString(e));
e, gluErrorString(e));
glUniform4fv(m_nUnitCellColourLocation, 1, infolinecolour); glUniform4fv(m_nUnitCellColourLocation, 1, infolinecolour);
......
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