From eb2d067025e0fd111ececb730b77aba75ba19d93 Mon Sep 17 00:00:00 2001
From: "Garcia-Hernandez, Ruben Jesus (rgarcia)" <garcia@lrz.de>
Date: Mon, 6 Nov 2017 12:12:52 +0100
Subject: [PATCH] OpenVR: Near and far planes GVR: userpos, animationspeed.
Make sure atoms and volumetric match. NomadVR: bondscolour,
atomtrajectorycolour
---
.../src/main/jni/treasure_hunt_renderer.cc | 136 ++++++++++++------
NOMADVRLib/ConfigFile.cpp | 87 +++++++++--
NOMADVRLib/ConfigFile.h | 9 ++
OpenVR/TimestepData/hellovr_opengl_main.cpp | 44 +++---
4 files changed, 197 insertions(+), 79 deletions(-)
diff --git a/GoogleCardboardAndroid/NOMADgvrT/src/main/jni/treasure_hunt_renderer.cc b/GoogleCardboardAndroid/NOMADgvrT/src/main/jni/treasure_hunt_renderer.cc
index b302287..984fc80 100644
--- a/GoogleCardboardAndroid/NOMADgvrT/src/main/jni/treasure_hunt_renderer.cc
+++ b/GoogleCardboardAndroid/NOMADgvrT/src/main/jni/treasure_hunt_renderer.cc
@@ -56,7 +56,7 @@ void eprintf( const char *fmt, ... )
vsprintf( buffer, fmt, args );
va_end( args );
- LOGD("Error in NOMADgvrT");
+ LOGD("Message in NOMADgvrT");
if (*fmt=='\0')
LOGD("Empty format");
LOGD("<%s>", buffer);
@@ -66,6 +66,39 @@ void eprintf( const char *fmt, ... )
namespace {
+
+
+gvr::Mat4f TranslationMatrix (float x, float y, float z)
+{
+gvr::Mat4f mvs;
+mvs.m[0][0]=1;mvs.m[0][1]=0;mvs.m[0][2]=0; mvs.m[0][3]=x;
+mvs.m[1][0]=0;mvs.m[1][1]=1;mvs.m[1][2]=0;mvs.m[1][3]=y;
+mvs.m[2][0]=0;mvs.m[2][1]=0;mvs.m[2][2]=1; mvs.m[2][3]=z;
+mvs.m[3][0]=0;mvs.m[3][1]=0;mvs.m[3][2]=0; mvs.m[3][3]=1;
+return mvs;
+}
+
+gvr::Mat4f TranslationMatrix (float v[3])
+{
+return TranslationMatrix (v[0], v[1], v[2]);
+}
+
+gvr::Mat4f ScalingMatrix (float x, float y, float z)
+{
+gvr::Mat4f mvs;
+
+mvs.m[0][0]=x;mvs.m[0][1]=0;mvs.m[0][2]=0; mvs.m[0][3]=0;
+mvs.m[1][0]=0;mvs.m[1][1]=y;mvs.m[1][2]=0;mvs.m[1][3]=0;
+mvs.m[2][0]=0;mvs.m[2][1]=0;mvs.m[2][2]=z; mvs.m[2][3]=0;
+mvs.m[3][0]=0;mvs.m[3][1]=0;mvs.m[3][2]=0; mvs.m[3][3]=1;
+return mvs;
+}
+
+gvr::Mat4f ScalingMatrix (float v[3])
+{
+return ScalingMatrix(v[0], v[1], v[2]);
+}
+
//static const float kZNear = 1.0f;
//static const float kZFar = 100.0f;
static const float kZNear = 0.01f;
@@ -343,6 +376,10 @@ void TreasureHuntRenderer::loadConfigFile(void)
LOGD("No atom glyph specified, using Icosahedron");
solid=new Solid(Solid::Type::Icosahedron);
}
+ for (int i=0;i<3;i++)
+ UserTranslation[i]=userpos[i];
+
+// LOGD("UT=%f, %f, %f\n", UserTranslation[0], UserTranslation[1], UserTranslation[2]);
}
TreasureHuntRenderer::TreasureHuntRenderer(
@@ -355,6 +392,8 @@ TreasureHuntRenderer::TreasureHuntRenderer(
loadConfigFile();
//eprintf("after config load, timesteps=%d", TIMESTEPS);
+
+
ResumeControllerApiAsNeeded();
if (gvr_viewer_type_ == GVR_VIEWER_TYPE_CARDBOARD) {
LOGD("Viewer type: CARDBOARD");
@@ -506,26 +545,43 @@ glGenTextures(2+ZLAYERS, textDepthPeeling);
for (int p = 0; p < TIMESTEPS*ISOS; p++) {
sprintf(tmpname, "%s%d-%s.ply", PATH, timestep,
plyfiles[p % ISOS]);
- gvr::Mat4f trans, matFinal;
+ gvr::Mat4f trans;
+ gvr::Mat4f matFinal, matcubetrans, mvs, sc, sctrans;
//rotateX(-90)
+ if (voxelSize[0]!=-1) {
+ mvs=ScalingMatrix(scaling/(float)voxelSize[0], scaling/(float)voxelSize[1],
+ scaling/(float)voxelSize[2]);
+ matcubetrans=TranslationMatrix(cubetrans);
+ gvr::Mat4f abcm {abc[0][0], abc[0][1], abc[0][2], 0,
+ abc[1][0], abc[1][1], abc[1][2], 0,
+ abc[2][0], abc[2][1], abc[2][2], 0,
+ 0, 0, 0, 1};
+ sc=ScalingMatrix(supercell);
+ sctrans=TranslationMatrix(-translations[p%ISOS][2],
+ -translations[p%ISOS][1], -translations[p%ISOS][0]);
+ matFinal = MatrixMul(abcm,sctrans);
+ matFinal=MatrixMul(matFinal,sc);
+ matFinal=MatrixMul(matFinal,mvs);
+ } else {
trans.m[0][0]=1;trans.m[0][1]=0;trans.m[0][2]=0; trans.m[0][3]=0;
trans.m[1][0]=0;trans.m[1][1]=0;trans.m[1][2]=1;trans.m[1][3]=0;
trans.m[2][0]=0;trans.m[2][1]=-1;trans.m[2][2]=0; trans.m[2][3]=0;
trans.m[3][0]=0;trans.m[3][1]=0;trans.m[3][2]=0; trans.m[3][3]=1;
for (int i=0;i<4;i++)
- for(int j=0;j<4;j++)
+ for(int j=0;j<4;j++)
matFinal.m[i][j]=(i==j);
for (int i=0;i<3;i++)
matFinal.m[i][3]=translations[p%ISOS][i];
matFinal=MatrixMul(trans, matFinal);
- trans.m[0][0]=0.2;trans.m[0][1]=0;trans.m[0][2]=0; trans.m[0][3]=0;
- trans.m[1][0]=0;trans.m[1][1]=0.2;trans.m[1][2]=0;trans.m[1][3]=0;
- trans.m[2][0]=0;trans.m[2][1]=0;trans.m[2][2]=0.2; trans.m[2][3]=0;
+ trans.m[0][0]=scaling;trans.m[0][1]=0;trans.m[0][2]=0; trans.m[0][3]=0;
+ trans.m[1][0]=0;trans.m[1][1]=scaling;trans.m[1][2]=0;trans.m[1][3]=0;
+ trans.m[2][0]=0;trans.m[2][1]=0;trans.m[2][2]=scaling; trans.m[2][3]=0;
trans.m[3][0]=0;trans.m[3][1]=0;trans.m[3][2]=0; trans.m[3][3]=1;
matFinal=MatrixMul(trans, matFinal);
+ }
float mat[16];
for (int i=0;i<4;i++)
for (int j=0;j<4;j++)
@@ -613,7 +669,17 @@ void TreasureHuntRenderer::DrawFrame() {
}
// if (animateTimesteps) {
- currentSet++;
+
+ if (animationspeed>1)
+ currentSet+=animationspeed;
+ else {
+ static float current=0;
+ current+=animationspeed;
+ if (current>1) {
+ currentSet++;
+ current=0;
+ }
+ }
if (currentSet>TIMESTEPS-1)
currentSet=0;
// }
@@ -638,9 +704,13 @@ if (animateTimesteps) {
float il=1.0/sqrtf(dir2[0]*dir2[0]+dir2[1]*dir2[1]+dir2[2]*dir2[2]);
//dir2[2]=-dir2[2];
for (int i=0;i<3;i++)
- UserTranslation[i]+=dir2[i]*il*speed;
+ UserTranslation[i]+=dir2[i]*il*speed*movementspeed;
}
+
+ LOGD("UT=%f, %f, %f\n", UserTranslation[0], UserTranslation[1], UserTranslation[2]);
+LOGD("MovementSpeed=%f\n", movementspeed);
+
gvr::Mat4f left_eye_matrix = gvr_api_->GetEyeFromHeadMatrix(GVR_LEFT_EYE);
gvr::Mat4f right_eye_matrix = gvr_api_->GetEyeFromHeadMatrix(GVR_RIGHT_EYE);
gvr::Mat4f left_eye_view = MatrixMul(left_eye_matrix, head_view_);
@@ -813,53 +883,26 @@ if (curDataPos!=ISOS) {
glBindVertexArray(ISOVAO[currentSet*ISOS+curDataPos]);
if ((e = glGetError()) != GL_NO_ERROR)
eprintf("3 Gl error RenderIsos timestep =%d: %d\n", currentSet, e);
- eprintf ("Drawing %d vertices, isos", numISOIndices[currentSet*ISOS+curDataPos]);
+ //eprintf ("Drawing %d vertices, isos", numISOIndices[currentSet*ISOS+curDataPos]);
glDrawElements(GL_TRIANGLES,numISOIndices[currentSet*ISOS+curDataPos] , GL_UNSIGNED_INT, 0);
if ((e = glGetError()) != GL_NO_ERROR)
eprintf("4 Gl error RenderIsos timestep =%d: %d\n", currentSet, e);
} else {
-//transparency; FIXME disabled as I get 1fps, with screen in 4 columns and z-check is incorrect
-/*
- glDisable(GL_BLEND);
- glDepthMask(GL_TRUE);
- //do depth peeling
- CleanDepthTexture(textDepthPeeling[0], render_size_.width, render_size_.height);
- GLint dfb;
- glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &dfb);
-if ((e = glGetError()) != GL_NO_ERROR)
- eprintf("Gl error RenderIsos, before zl loop: %d\n", e);
- for (int zl = 0; zl < ZLAYERS; zl++) {
- EnableDepthFB(zl, TransP,
- peelingFramebuffer, textDepthPeeling);
- glUniformMatrix4fv(TransMatrixLoc, 1, GL_FALSE, t);
- for (int i=0;i<ISOS;i++) {
- glBindVertexArray(ISOVAO[currentSet*ISOS+i]);
- glDrawElements(GL_TRIANGLES,numISOIndices[currentSet*ISOS+i] , GL_UNSIGNED_INT, 0);
- }
- }
- glUseProgram(BlendP);
- glBindFramebuffer(GL_FRAMEBUFFER, dfb);
- glBindVertexArray(BlendVAO);
-if ((e = glGetError()) != GL_NO_ERROR)
- eprintf("Gl error RenderIsos, after glBindVertexArray: %d\n", e);
- BlendTextures(textDepthPeeling, ZLAYERS);
- glBindVertexArray(0);
-if ((e = glGetError()) != GL_NO_ERROR)
- eprintf("Gl error RenderIsos, after BlendTextures: %d\n", e);*/
-/* no transparency*/
+/*transparency*/
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glDepthMask(GL_FALSE);
for (int i=0;i<ISOS;i++) {
glBindVertexArray(ISOVAO[currentSet*ISOS+i]);
- if ((e = glGetError()) != GL_NO_ERROR)
- eprintf("5 Gl error RenderIsos timestep =%d: %d\n", currentSet, e);
- eprintf ("Drawing %d vertices, isos", numISOIndices[currentSet*ISOS+i]);
+ if ((e = glGetError()) != GL_NO_ERROR)
+ eprintf("5 Gl error RenderIsos timestep =%d: %d\n", currentSet, e);
+ //eprintf ("Drawing %d vertices, isos", numISOIndices[currentSet*ISOS+i]);
glDrawElements(GL_TRIANGLES,numISOIndices[currentSet*ISOS+i] , GL_UNSIGNED_INT, 0);
- if ((e = glGetError()) != GL_NO_ERROR)
- eprintf("6 Gl error RenderIsos timestep =%d: %d\n", currentSet, e);
+ if ((e = glGetError()) != GL_NO_ERROR)
+ eprintf("6 Gl error RenderIsos timestep =%d: %d\n", currentSet, e);
}
glDisable(GL_BLEND);
+ glDepthMask(GL_TRUE);
} //if (curDataPos!=ISOS)
//eprintf ("end of RenderIsos");
glBindVertexArray(0);
@@ -962,15 +1005,14 @@ void TreasureHuntRenderer::RenderAtoms(const float *m) //m[16]
} // no tess
}
+
+
void TreasureHuntRenderer::RenderAtomTrajectories(const gvr::Mat4f eyeViewProjection)
{
int e;
if (!numAtoms)
return;
-gvr::Mat4f trans={1,0,0,UserTranslation[0],
- 0,1,0,UserTranslation[1],
- 0,0,1,UserTranslation[2],
- 0,0,0,1};
+gvr::Mat4f trans=TranslationMatrix (UserTranslation);
//trans.translate(iPos).rotateX(-90).translate(UserPosition);
gvr::Mat4f transform = MatrixMul(eyeViewProjection,trans);
diff --git a/NOMADVRLib/ConfigFile.cpp b/NOMADVRLib/ConfigFile.cpp
index 549af32..c81afb7 100644
--- a/NOMADVRLib/ConfigFile.cpp
+++ b/NOMADVRLib/ConfigFile.cpp
@@ -28,6 +28,9 @@ std::vector<float> *clonedAtoms;
std::vector<int> bonds;
int *numBonds;
bool displaybonds;
+float bondscolours[4];
+float atomtrajectorycolour[4];
+
int numClonedAtoms;
int *basisvectorreps;
@@ -40,6 +43,8 @@ bool has_abc = false;
bool displayunitcell;
float supercell[3];
int voxelSize[3];
+float unitcellcolour[4];
+float supercellcolour[4];
int repetitions[3];
Solid *solid;
@@ -48,6 +53,10 @@ bool saveStereo;
int screenshotdownscaling;
bool hapticFeedback;
bool showcontrollers;
+bool gazenavigation;
+int transparencyquality;
+float nearclip, farclip;
+
//markers such as hole positions and electron positions
float ** markers;
@@ -135,14 +144,9 @@ while (*file!='\0') {
}
}
-int loadConfigFile(const char * f)
+void initState()
{
- //default values
- //eprintf ("load config file start");
- bool nonperiodic=false;
- char base_url[1024]="http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/materials/";
- char material[1024]="";
- BACKGROUND[0] = 0.95f;
+ BACKGROUND[0] = 0.95f;
BACKGROUND[1] = 0.95f;
BACKGROUND[2] = 0.95f;
SCREENSHOT="C:\\temp\\frame";
@@ -166,7 +170,7 @@ int loadConfigFile(const char * f)
for (int i=0;i<3;i++)
supercell[i] = 1;
solid=0;
- char *token=0;
+
markers=nullptr;
markercolours=nullptr;
displayunitcell=false;
@@ -181,7 +185,42 @@ int loadConfigFile(const char * f)
screenshotdownscaling=1;
hapticFeedback=false;
showcontrollers=false;
+ gazenavigation=false;
inv_abc_init=false;
+
+ transparencyquality=12;
+ nearclip=0.2f;
+ farclip=200.f;
+
+ for (int i=0;i<4;i++)
+ unitcellcolour[i]=1.0f;
+
+ supercellcolour[0]=0.0f;
+ supercellcolour[1]=1.0f;
+ supercellcolour[2]=1.0f;
+ supercellcolour[3]=1.0f;
+
+ bondscolours[0]=0.5f;
+ bondscolours[1]=0.5f;
+ bondscolours[2]=1.0f;
+ bondscolours[3]=1.0f;
+
+ atomtrajectorycolour[0]=1.0f;
+ atomtrajectorycolour[1]=0.0f;
+ atomtrajectorycolour[2]=0.0f;
+ atomtrajectorycolour[3]=1.0f;
+}
+
+int loadConfigFile(const char * f)
+{
+ //default values
+ //eprintf ("load config file start");
+ bool nonperiodic=false;
+ char base_url[1024]="http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/materials/";
+ char material[1024]="";
+ initState();
+ char *token=0;
+
//
FILE *F = fopen(f, "r");
if (F == 0)
@@ -499,11 +538,39 @@ int loadConfigFile(const char * f)
hapticFeedback=true;
} else if (!strcmp (s, "supercell")) {
r=fscanf (F, "%f %f %f", supercell, supercell+1, supercell+2);
+ if (r<3)
+ eprintf ("Error reading supercell value");
} else if (!strcmp (s, "showcontrollers")) {
showcontrollers=true;
- } else if (!strcmp (s, "\x0d")) { //discard windows newline (problem in Sebastian Kokott's phone (?!)
+ } else if (!strcmp (s, "gazenavigation")) {
+ gazenavigation=true;
+ }else if (!strcmp (s, "\x0d")) { //discard windows newline (problem in Sebastian Kokott's phone (?!)
continue;
- } else {
+ } else if (!strcmp (s, "transparencyquality")) {
+ r=fscanf (F, "%d", &transparencyquality);
+ if (r<1)
+ eprintf ("Error reading transparencyquality value");
+ } else if (!strcmp (s, "clippingplanes")) {
+ r=fscanf (F, "%f %f", &nearclip, &farclip);
+ 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)
+ eprintf ("Error reading bondscolour value");
+ }else if (!strcmp (s, "unitcellcolour")) {
+ r=fscanf (F, "%f %f %f", unitcellcolour, unitcellcolour+1, unitcellcolour+2);
+ if (r<3)
+ eprintf ("Error reading unitcellcolour value");
+ }else if (!strcmp (s, "supercellcolour")) {
+ r=fscanf (F, "%f %f %f", supercellcolour, supercellcolour+1, supercellcolour+2);
+ if (r<3)
+ eprintf ("Error reading supercellcolour value");
+ }else if (!strcmp (s, "atomtrajectorycolour")) {
+ r=fscanf (F, "%f %f %f", atomtrajectorycolour, atomtrajectorycolour+1, atomtrajectorycolour+2);
+ if (r<3)
+ eprintf ("Error reading atomtrajectorycolour value");
+ }else {
eprintf( "Unrecognized parameter %s\n", s);
for (int i=0;i<strlen(s);i++)
eprintf ("<%d>", s[i]);
diff --git a/NOMADVRLib/ConfigFile.h b/NOMADVRLib/ConfigFile.h
index 42b45cd..55758ec 100644
--- a/NOMADVRLib/ConfigFile.h
+++ b/NOMADVRLib/ConfigFile.h
@@ -22,6 +22,9 @@ extern std::vector<float> *clonedAtoms;
extern std::vector<int> bonds;
extern int *numBonds;
extern bool displaybonds;
+extern float bondscolours[4];
+extern float atomtrajectorycolour[4];
+
extern int numClonedAtoms;
extern int *basisvectorreps;
@@ -34,6 +37,8 @@ extern bool has_abc;
extern bool displayunitcell;
extern float supercell[3];
extern float markerscaling;
+extern float unitcellcolour[4];
+extern float supercellcolour[4];
extern int repetitions[3];
@@ -44,6 +49,10 @@ extern int screenshotdownscaling;
extern bool hapticFeedback;
extern bool showcontrollers;
+extern bool gazenavigation;
+
+extern int transparencyquality;
+extern float nearclip, farclip;
//markers such as hole positions and electron positions
extern float ** markers;
diff --git a/OpenVR/TimestepData/hellovr_opengl_main.cpp b/OpenVR/TimestepData/hellovr_opengl_main.cpp
index 2061fd9..7d5bf7b 100644
--- a/OpenVR/TimestepData/hellovr_opengl_main.cpp
+++ b/OpenVR/TimestepData/hellovr_opengl_main.cpp
@@ -55,7 +55,7 @@
//#define PATH "C:\\Users\\mobile\\Desktop\\openvrDemos\\win64\\data\\CO2-CaO-B\\"
#endif
*/
-#define ZLAYERS 12
+#define ZLAYERS transparencyquality
@@ -207,9 +207,6 @@ private: // OpenGL bookkeeping
int m_iSceneVolumeInit; // if you want something other than the default 20x20x20
- float m_fNearClip;
- float m_fFarClip;
-
void SaveScreenshot (char *name);
GLuint *m_iTexture; //[3+ZLAYERS+1] // white, depth1, depth2, color[ZLAYERS], atomtexture
@@ -347,7 +344,7 @@ void eprintf( const char *fmt, ... )
if (numerrors==25) {
MessageBoxA(0, "Max messages reached, no further reporting", "Warning", 0);
}
- if (numerrors>15) {
+ if (numerrors>25) {
return;
}
va_list args;
@@ -592,13 +589,10 @@ bool CMainApplication::BInit()
m_iSceneVolumeHeight = m_iSceneVolumeInit;
m_iSceneVolumeDepth = m_iSceneVolumeInit;
- m_fScale = 0.04f; //0.15f; //rgh: original too big for room
+ //m_fScale = 0.04f; //0.15f; //rgh: original too big for room
+ m_fScale=scaling;
m_fScaleSpacing = 4.0f;
- m_fNearClip = 0.2f;
- m_fFarClip = 200.0f;//rgh: original 30 too small for our skymap
-
-
// m_MillisecondsTimer.start(1, this);
// m_SecondsTimer.start(1000, this);
@@ -996,8 +990,16 @@ bool CMainApplication::HandleInput()
else if (unDevice !=firstdevice && seconddevice==-1)
seconddevice=unDevice;
if (unDevice == firstdevice) {
- Matrix4 tmp = m_mat4HMDPose;
- UserPosition += tmp.invert()*Vector3(0, 0, speed);
+ if (gazenavigation) {
+ Matrix4 tmp = m_mat4HMDPose;
+ UserPosition += tmp.invert()*Vector3(0, 0, speed);
+ } else {
+ //vr::VRControllerState_t cs;
+ //vr::TrackedDevicePose_t dp;
+ //m_pHMD->GetControllerStateWithPose( vr::TrackingUniverseStanding, firstdevice, &cs, &dp );
+ const Matrix4 tmp = m_rmat4DevicePose[firstdevice];
+ UserPosition += tmp*Vector3(0, 0, speed);
+ }
}
else {
float newtime = videospeed*float(SDL_GetTicks());;
@@ -2160,8 +2162,8 @@ void CMainApplication::RenderUnitCell(const vr::Hmd_Eye &nEye)
glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get());
if ((e = glGetError()) != GL_NO_ERROR)
dprintf("Gl error after glUniform4fv 1 RenderUnitCell: %d, %s\n", e, gluErrorString(e));
- const float color[4]={1,1,1,1};
- glUniform4fv(m_nUnitCellColourLocation, 1, color);
+
+ glUniform4fv(m_nUnitCellColourLocation, 1, unitcellcolour);
if ((e = glGetError()) != GL_NO_ERROR)
dprintf("Gl error after glUniform4fv 2 RenderUnitCell: %d, %s\n", e, gluErrorString(e));
glDrawElements(GL_LINES, 24, GL_UNSIGNED_INT, 0);
@@ -2179,8 +2181,7 @@ void CMainApplication::RenderUnitCell(const vr::Hmd_Eye &nEye)
glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get());
if ((e = glGetError()) != GL_NO_ERROR)
dprintf("Gl error after glUniform4fv 1 RenderUnitCell, supercell: %d, %s\n", e, gluErrorString(e));
- const float colorsc[4]={0,1,1,1};
- glUniform4fv(m_nUnitCellColourLocation, 1, colorsc);
+ glUniform4fv(m_nUnitCellColourLocation, 1, supercellcolour);
glDrawElements(GL_LINES, 24, GL_UNSIGNED_INT, (void*) (24 *sizeof(int)));
glDisable(GL_LINE_SMOOTH);
glBindVertexArray(0);
@@ -2240,8 +2241,7 @@ if (numBonds && displaybonds && showAtoms) {
glBindVertexArray(m_unAtomVAO[2]);
glUseProgram(m_unUnitCellProgramID);
glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get());
- float color[4]={0.5,0.5,1,1};
- glUniform4fv(m_nUnitCellColourLocation, 1, color);
+ glUniform4fv(m_nUnitCellColourLocation, 1, bondscolours);
if (currentset==0||fixedAtoms)
glDrawElements(GL_LINES, numBonds[0], GL_UNSIGNED_INT, (void*)0);
else
@@ -2282,8 +2282,8 @@ for (int i = 0; i < atomtrajectories.size(); i++) {
glBindVertexArray(m_unAtomVAO[3]);
glUseProgram(m_unUnitCellProgramID);
glUniformMatrix4fv(m_nUnitCellMatrixLocation, 1, GL_FALSE, transform.get());
-float color2[4]={1,0,0,1};
-glUniform4fv(m_nUnitCellColourLocation, 1, color2);
+
+glUniform4fv(m_nUnitCellColourLocation, 1, atomtrajectorycolour);
if ((e = glGetError()) != GL_NO_ERROR)
dprintf("Gl error after glUniform4fv 2 RenderUnitCell: %d, %s\n", e, gluErrorString(e));
@@ -2419,7 +2419,7 @@ void CMainApplication::RenderScene(vr::Hmd_Eye nEye)
dprintf("Gl error after zlayer: %d, %s\n", e, gluErrorString(e));
glDisable(GL_CULL_FACE);
- float z = 0.0f; //(m_fNearClip + m_fFarClip) / 2.0f;
+ float z = 0.0f;
const float points[] = {
-1, -1, z, 1, 0, 0, -1, 0, 0,
-1, 1, z, 1, 0, 0, -1, 0, 1,
@@ -2567,7 +2567,7 @@ Matrix4 CMainApplication::GetHMDMatrixProjectionEye( vr::Hmd_Eye nEye )
if ( !m_pHMD )
return Matrix4();
- vr::HmdMatrix44_t mat = m_pHMD->GetProjectionMatrix( nEye, m_fNearClip, m_fFarClip, vr::API_OpenGL);
+ vr::HmdMatrix44_t mat = m_pHMD->GetProjectionMatrix( nEye, nearclip, farclip, vr::API_OpenGL);
return Matrix4(
mat.m[0][0], mat.m[1][0], mat.m[2][0], mat.m[3][0],
--
GitLab