diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.cpp | 310 |
1 files changed, 71 insertions, 239 deletions
diff --git a/src/main.cpp b/src/main.cpp index f140c41..fed89cd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -193,15 +193,12 @@ private: // OpenGL bookkeeping float m_fFarClip; GLuint m_iTexture; - GLuint m_arrow_texture_id; unsigned int m_uiVertcount; unsigned int m_arrow_vert_count; GLuint m_glSceneVertBuffer; - GLuint m_arrow_vert_buffer; GLuint m_unSceneVAO; - GLuint m_arrow_vao; GLuint m_unCompanionWindowVAO; GLuint m_glCompanionWindowIDVertBuffer; GLuint m_glCompanionWindowIDIndexBuffer; @@ -215,14 +212,11 @@ private: // OpenGL bookkeeping glm::mat4 m_mat4eyePosLeft; glm::mat4 m_mat4eyePosRight; - glm::mat4 m_resetPos; - glm::mat4 m_mat4ProjectionCenter; glm::mat4 m_mat4ProjectionLeft; glm::mat4 m_mat4ProjectionRight; glm::vec3 hmd_pos = glm::vec3(0.0f, 0.0f, 0.0f); - glm::vec3 hmd_reset_pos = glm::vec3(0.0f, 0.0f, 0.0f); struct VertexDataScene { @@ -244,6 +238,8 @@ private: // OpenGL bookkeeping GLuint m_unRenderModelProgramID; GLint m_nSceneMatrixLocation; + GLint m_nSceneTextureOffsetXLocation; + GLint m_nScenePositionOffsetLocation; GLint m_nControllerMatrixLocation; GLint m_nRenderModelMatrixLocation; @@ -278,10 +274,6 @@ private: // X compositor Pixmap src_window_pixmap; GLXFBConfig *configs; GLXPixmap glxpixmap; - - // Additional resources for the window manager - SDL_Surface *arrow_surface = nullptr; - glm::vec3 cursor_pos = glm::vec3(0.0f, 0.0f, 0.0f); }; @@ -392,6 +384,8 @@ CMainApplication::CMainApplication( int argc, char *argv[] ) , m_unControllerVAO( 0 ) , m_unSceneVAO( 0 ) , m_nSceneMatrixLocation( -1 ) + , m_nSceneTextureOffsetXLocation( -1 ) + , m_nScenePositionOffsetLocation( -1 ) , m_nControllerMatrixLocation( -1 ) , m_nRenderModelMatrixLocation( -1 ) , m_iTrackedControllerCount( 0 ) @@ -573,9 +567,6 @@ bool CMainApplication::BInit() return false; } - // Capture mouse inside window - SDL_SetRelativeMouseMode(SDL_TRUE); - m_strDriver = "No Driver"; m_strDisplay = "No Display"; @@ -597,7 +588,6 @@ bool CMainApplication::BInit() m_fFarClip = 30.0f; m_iTexture = 0; - m_arrow_texture_id = 0; m_uiVertcount = 0; // m_MillisecondsTimer.start(1, this); @@ -780,8 +770,6 @@ void CMainApplication::Shutdown() SDL_Quit(); if (x_display) { - if(arrow_surface) - SDL_FreeSurface(arrow_surface); glXReleaseTexImageEXT(x_display, glxpixmap, GLX_FRONT_EXT); glXDestroyPixmap(x_display, glxpixmap); XFree(configs); @@ -815,36 +803,6 @@ bool CMainApplication::HandleInput() { m_bShowCubes = !m_bShowCubes; } - } else if (sdlEvent.type == SDL_MOUSEMOTION) { - //printf("event x: %d\n", sdlEvent.motion.xrel); - float cursor_speed = 0.001f; - cursor_pos.x -= ((float)sdlEvent.motion.xrel * cursor_speed); - cursor_pos.y -= ((float)sdlEvent.motion.yrel * cursor_speed); - cursor_pos = glm::clamp(cursor_pos, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(1.0f, 1.0f, 0.0f)); - } else if(sdlEvent.type == SDL_MOUSEBUTTONDOWN) { - printf("send fake event!\n"); - XEvent fake_event; - memset(&fake_event, 0, sizeof(fake_event)); - fake_event.type = ButtonPress; - fake_event.xbutton.button = Button1; - fake_event.xbutton.root = DefaultRootWindow(x_display); - fake_event.xbutton.window = src_window_id; - fake_event.xbutton.x_root = 0; - fake_event.xbutton.y_root = 0; - fake_event.xbutton.x = cursor_pos.x * 1920; - fake_event.xbutton.y = cursor_pos.y * 1080; - fake_event.xbutton.state = Button1Mask; - fake_event.xbutton.subwindow = src_window_id; - // TODO: Find subwindow at cursor position with XQueryPoitner - if(XSendEvent(x_display, src_window_id, True, 0xfff, &fake_event) == 0) - printf("failed to send fake event button down!\n"); - XFlush(x_display); - - fake_event.type = ButtonRelease; - fake_event.xbutton.state = Button1Mask; - if(XSendEvent(x_display, src_window_id, True, 0xfff, &fake_event) == 0) - printf("failed to send fake event button up!\n"); - XFlush(x_display); } } @@ -874,7 +832,6 @@ bool CMainApplication::HandleInput() m_bShowCubes = !GetDigitalActionState( m_actionHideCubes ); if(GetDigitalActionState( m_actionHideCubes )) { //printf("reset position!\n"); - hmd_reset_pos = hmd_pos; //printf("pos, %f, %f, %f\n", m_mat4HMDPose[0][2], m_mat4HMDPose[1][2], m_mat4HMDPose[2][2]); //m_resetPos = m_mat4HMDPose; } @@ -1116,14 +1073,16 @@ bool CMainApplication::CreateAllShaders() // Vertex Shader "#version 410\n" "uniform mat4 matrix;\n" + "uniform float texture_offset_x;\n" + "uniform vec3 position_offset;\n" "layout(location = 0) in vec4 position;\n" "layout(location = 1) in vec2 v2UVcoordsIn;\n" "layout(location = 2) in vec3 v3NormalIn;\n" "out vec2 v2UVcoords;\n" "void main()\n" "{\n" - " v2UVcoords = v2UVcoordsIn;\n" - " gl_Position = matrix * position;\n" + " v2UVcoords = v2UVcoordsIn * vec2(0.5, 1.0) + vec2(texture_offset_x, 0.0);\n" + " gl_Position = matrix * (position + vec4(position_offset, 0.0));\n" "}\n", // Fragment Shader @@ -1143,6 +1102,18 @@ bool CMainApplication::CreateAllShaders() dprintf( "Unable to find matrix uniform in scene shader\n" ); return false; } + m_nSceneTextureOffsetXLocation = glGetUniformLocation( m_unSceneProgramID, "texture_offset_x" ); + if( m_nSceneTextureOffsetXLocation == -1 ) + { + dprintf( "Unable to find texture_offset_x uniform in scene shader\n" ); + return false; + } + m_nScenePositionOffsetLocation = glGetUniformLocation( m_unSceneProgramID, "position_offset" ); + if( m_nScenePositionOffsetLocation == -1 ) + { + dprintf( "Unable to find position_offset uniform in scene shader\n" ); + return false; + } m_unControllerTransformProgramID = CompileGLShader( "Controller", @@ -1249,37 +1220,6 @@ bool CMainApplication::SetupTexturemaps() { GLfloat fLargest; - //m_arrow_texture_id = SOIL_load_OGL_texture("images/arrow.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS); - int width; - int height; - unsigned char *image_data = SOIL_load_image("images/arrow.png", &width, &height, nullptr, SOIL_LOAD_RGBA); - if(!image_data) { - printf("Failed to load images/arrow.png, error: %s\n", SOIL_last_result()); - return false; - } - - glGenTextures(1, &m_arrow_texture_id ); - glBindTexture( GL_TEXTURE_2D, m_arrow_texture_id ); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data); - SOIL_free_image_data(image_data); - - glGenerateMipmap(GL_TEXTURE_2D); - - 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_MAG_FILTER, GL_LINEAR ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &fLargest); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest); - - glBindTexture( GL_TEXTURE_2D, 0 ); - const int pixmap_config[] = { GLX_BIND_TO_TEXTURE_RGBA_EXT, True, GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT, @@ -1342,7 +1282,7 @@ bool CMainApplication::SetupTexturemaps() glBindTexture( GL_TEXTURE_2D, 0 ); - return ( m_iTexture != 0 && m_arrow_texture_id != 0 ); + return ( m_iTexture != 0 ); } @@ -1384,9 +1324,11 @@ void CMainApplication::SetupScene() glm::mat4 matScale = glm::identity<glm::mat4>(); matScale = glm::scale(matScale, glm::vec3(m_fScale, m_fScale, m_fScale)); glm::mat4 matTransform = glm::identity<glm::mat4>(); + /* matTransform = glm::translate(glm::identity<glm::mat4>(), - hmd_reset_pos + glm::vec3(-m_fScale*0.5f, -m_fScale*0.5f, 0.5f) + glm::vec3(-m_fScale*0.5f, -m_fScale*0.5f, 0.5f) ); + */ glm::mat4 mat = matScale * matTransform; AddCubeToScene( mat, vertdataarray ); @@ -1413,58 +1355,6 @@ void CMainApplication::SetupScene() glBindVertexArray( 0 ); glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); - - - - // Arrow - glm::mat4 matScaleArrow = glm::identity<glm::mat4>(); - matScaleArrow = glm::scale(matScaleArrow, glm::vec3(m_fScale, m_fScale, m_fScale)); - glm::mat4 matTransformArrow = glm::identity<glm::mat4>(); - matTransformArrow = glm::translate(glm::identity<glm::mat4>(), - hmd_reset_pos + glm::vec3(-m_fScale*0.5f, -m_fScale*0.5f, 0.499f) - ); - - glm::mat4 matArrow = matScaleArrow * matTransformArrow; - std::vector<float> arrow_data; - float arrow_scale = 0.02f; - glm::vec4 v1 = matArrow * glm::vec4(0.0f, 0.0f, 0.0f, 1.0f); - glm::vec4 v2 = matArrow * glm::vec4(arrow_scale, 0.0f, 0.0f, 1.0f); - glm::vec4 v3 = matArrow * glm::vec4(0.0f, arrow_scale, 0.0f, 1.0f); - glm::vec4 v4 = matArrow * glm::vec4(0.0f, arrow_scale, 0.0f, 1.0f); - glm::vec4 v5 = matArrow * glm::vec4(arrow_scale, arrow_scale, 0.0f, 1.0f); - glm::vec4 v6 = matArrow * glm::vec4(arrow_scale, 0.0f, 0.0f, 1.0f); - AddCubeVertex(v1.x, v1.y, v1.z, 1.0f, 1.0f, arrow_data); - AddCubeVertex(v2.x, v2.y, v2.z, 0.0f, 1.0f, arrow_data); - AddCubeVertex(v3.x, v3.y, v3.z, 1.0f, 0.0f, arrow_data); - - AddCubeVertex(v4.x, v4.y, v4.z, 1.0f, 0.0f, arrow_data); - AddCubeVertex(v5.x, v5.y, v5.z, 0.0f, 0.0f, arrow_data); - AddCubeVertex(v6.x, v6.y, v6.z, 0.0f, 1.0f, arrow_data); - - m_arrow_vert_count = arrow_data.size()/5; - - - glGenVertexArrays( 1, &m_arrow_vao ); - glBindVertexArray( m_arrow_vao ); - - glGenBuffers( 1, &m_arrow_vert_buffer ); - glBindBuffer( GL_ARRAY_BUFFER, m_arrow_vert_buffer ); - glBufferData( GL_ARRAY_BUFFER, sizeof(float) * arrow_data.size(), &arrow_data[0], GL_STATIC_DRAW); - - GLsizei stride_arrow = sizeof(VertexDataScene); - uintptr_t offset_arrow = 0; - - glEnableVertexAttribArray( 0 ); - glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, stride_arrow , (const void *)offset_arrow); - - offset_arrow += sizeof(glm::vec3); - glEnableVertexAttribArray( 1 ); - glVertexAttribPointer( 1, 2, GL_FLOAT, GL_FALSE, stride_arrow, (const void *)offset_arrow); - - glBindVertexArray( 0 ); - glDisableVertexAttribArray(0); - glDisableVertexAttribArray(1); - } @@ -1497,32 +1387,22 @@ void CMainApplication::AddCubeToScene( const glm::mat4 &mat, std::vector<float> glm::vec4 G = mat * glm::vec4( 1, 1, 1, 1 ); glm::vec4 H = mat * glm::vec4( 0, 1, 1, 1 ); - // //triangles instead of quads - // AddCubeVertex( E.x, E.y, E.z, 0, 1, vertdata ); //Front - // AddCubeVertex( F.x, F.y, F.z, 1, 1, vertdata ); - // AddCubeVertex( G.x, G.y, G.z, 1, 0, vertdata ); - // AddCubeVertex( G.x, G.y, G.z, 1, 0, vertdata ); - // AddCubeVertex( H.x, H.y, H.z, 0, 0, vertdata ); - // AddCubeVertex( E.x, E.y, E.z, 0, 1, vertdata ); - - // AddCubeVertex( B.x, B.y, B.z, 0, 1, vertdata ); //Back - // AddCubeVertex( A.x, A.y, A.z, 1, 1, vertdata ); - // AddCubeVertex( D.x, D.y, D.z, 1, 0, vertdata ); - // AddCubeVertex( D.x, D.y, D.z, 1, 0, vertdata ); - // AddCubeVertex( C.x, C.y, C.z, 0, 0, vertdata ); - // AddCubeVertex( B.x, B.y, B.z, 0, 1, vertdata ); -#if 0 + long columns = 32; long rows = 32; - double angle_x = 1.0; + double angle_x = 3.14; double angle_y = 3.14; - double radius = 1.0; double radius_depth = 1.0; - double radius_height = 1.0; + double zoom = 0.5; + double radius_height = zoom; + double radius = zoom * 1.0; for(long row = 0; row < rows-1; ++row) { for(long column = 0; column < columns-1; ++column) { - double offset_angle = angle_x*0.5; + double offset_angle = 0.0;//angle_x*0.5; + + double y_sin1 = sin((double)row / (double)rows * 3.14); + double y_sin2 = sin((double)(row + 1) / (double)rows * 3.14); double z1 = sin(offset_angle + (double)column / (double)columns * angle_x) * radius; double z2 = sin(offset_angle + (double)(column + 1) / (double)columns * angle_x) * radius; @@ -1532,6 +1412,13 @@ void CMainApplication::AddCubeToScene( const glm::mat4 &mat, std::vector<float> double z5 = z2; double z6 = z2; + z1 *= y_sin1; + z2 *= y_sin1; + z3 *= y_sin2; + z4 *= y_sin2; + z5 *= y_sin2; + z6 *= y_sin1; + double x1 = -cos(offset_angle + (double)column / (double)columns * angle_x) * radius; double x2 = -cos(offset_angle + (double)(column + 1) / (double)columns * angle_x) * radius; double x3 = x1; @@ -1539,6 +1426,13 @@ void CMainApplication::AddCubeToScene( const glm::mat4 &mat, std::vector<float> double x4 = x3; double x5 = x2; double x6 = x2; + + x1 *= y_sin1; + x2 *= y_sin1; + x3 *= y_sin2; + x4 *= y_sin2; + x5 *= y_sin2; + x6 *= y_sin1; #if 0 double y1 = cos((double)row / (double)rows * angle_y) * radius; double y2 = y1; @@ -1562,9 +1456,9 @@ void CMainApplication::AddCubeToScene( const glm::mat4 &mat, std::vector<float> x5 *= sin((double)(row + 1) / (double)rows * angle_y) * radius_depth; x6 *= sin((double)row / (double)rows * angle_y) * radius_depth; #else - double y1 = ((double)row / (double)rows) * radius_height; + double y1 = cos((double)row / (double)rows * 3.14) * radius_height; double y2 = y1; - double y3 = ((double)(row + 1) / (double)rows) * radius_height; + double y3 = cos((double)(row + 1) / (double)rows * 3.14) * radius_height; double y4 = y3; double y5 = y3; @@ -1578,82 +1472,15 @@ void CMainApplication::AddCubeToScene( const glm::mat4 &mat, std::vector<float> glm::vec4 v5 = mat * glm::vec4(x5, y5, z5, 1.0); glm::vec4 v6 = mat * glm::vec4(x6, y6, z6, 1.0); - AddCubeVertex(v1.x, v1.y, v1.z, 1.0 - (double)column / (double)columns, 1.0 - (double)row / (double)rows, vertdata); - AddCubeVertex(v2.x, v2.y, v2.z, 1.0 - (double)(column + 1) / (double)columns, 1.0 - (double)row / (double)rows, vertdata); - AddCubeVertex(v3.x, v3.y, v3.z, 1.0 - (double)column / (double)columns, 1.0 - (double)(row + 1) / (double)rows, vertdata); - - AddCubeVertex(v4.x, v4.y, v4.z, 1.0 - (double)column / (double)columns, 1.0 - (double)(row + 1) / (double)rows, vertdata); - AddCubeVertex(v5.x, v5.y, v5.z, 1.0 - (double)(column + 1) / (double)columns, 1.0 - (double)(row + 1) / (double)rows, vertdata); - AddCubeVertex(v6.x, v6.y, v6.z, 1.0 - (double)(column + 1) / (double)columns, 1.0 - (double)row / (double)rows, vertdata); - } - } -#endif + AddCubeVertex(v1.x, v1.y, v1.z, 1.0 - (double)column / (double)columns, (double)row / (double)rows, vertdata); + AddCubeVertex(v2.x, v2.y, v2.z, 1.0 - (double)(column + 1) / (double)columns, (double)row / (double)rows, vertdata); + AddCubeVertex(v3.x, v3.y, v3.z, 1.0 - (double)column / (double)columns, (double)(row + 1) / (double)rows, vertdata); - int columns = 32; - int rows = 32; - float scale_x = 1.0f; - float scale_y = 1.0f; - - for(int row = 0; row < rows - 1; ++row) { - for(int column = 0; column < columns - 1; ++column) { - float x1 = ((float)column / (float)columns) * scale_x; - float x2 = ((float)(column + 1) / (float)columns) * scale_x; - float x3 = x1; - float x4 = x3; - float x5 = x2; - float x6 = x2; - - float y1 = ((float)row / (float)rows) * scale_y; - float y2 = y1; - float y3 = ((float)(row + 1) / (float)rows) * scale_y; - float y4 = y3; - float y5 = y3; - float y6 = y1; - - glm::vec4 v1 = mat * glm::vec4(x1, y1, 0.0f, 1.0); - glm::vec4 v2 = mat * glm::vec4(x2, y2, 0.0f, 1.0); - glm::vec4 v3 = mat * glm::vec4(x3, y3, 0.0f, 1.0); - glm::vec4 v4 = mat * glm::vec4(x4, y4, 0.0f, 1.0); - glm::vec4 v5 = mat * glm::vec4(x5, y5, 0.0f, 1.0); - glm::vec4 v6 = mat * glm::vec4(x6, y6, 0.0f, 1.0); - - AddCubeVertex(v1.x, v1.y, v1.z, 1.0 - (float)column / (float)columns, 1.0 - (float)row / (float)rows, vertdata); - AddCubeVertex(v2.x, v2.y, v2.z, 1.0 - (float)(column + 1) / (float)columns, 1.0 - (float)row / (float)rows, vertdata); - AddCubeVertex(v3.x, v3.y, v3.z, 1.0 - (float)column / (float)columns, 1.0 - (float)(row + 1) / (float)rows, vertdata); - - AddCubeVertex(v4.x, v4.y, v4.z, 1.0 - (float)column / (float)columns, 1.0 - (float)(row + 1) / (float)rows, vertdata); - AddCubeVertex(v5.x, v5.y, v5.z, 1.0 - (float)(column + 1) / (float)columns, 1.0 - (float)(row + 1) / (float)rows, vertdata); - AddCubeVertex(v6.x, v6.y, v6.z, 1.0 - (float)(column + 1) / (float)columns, 1.0 - (float)row / (float)rows, vertdata); + AddCubeVertex(v4.x, v4.y, v4.z, 1.0 - (double)column / (double)columns, (double)(row + 1) / (double)rows, vertdata); + AddCubeVertex(v5.x, v5.y, v5.z, 1.0 - (double)(column + 1) / (double)columns, (double)(row + 1) / (double)rows, vertdata); + AddCubeVertex(v6.x, v6.y, v6.z, 1.0 - (double)(column + 1) / (double)columns, (double)row / (double)rows, vertdata); } } - - // AddCubeVertex( H.x, H.y, H.z, 0, 1, vertdata ); //Top - // AddCubeVertex( G.x, G.y, G.z, 1, 1, vertdata ); - // AddCubeVertex( C.x, C.y, C.z, 1, 0, vertdata ); - // AddCubeVertex( C.x, C.y, C.z, 1, 0, vertdata ); - // AddCubeVertex( D.x, D.y, D.z, 0, 0, vertdata ); - // AddCubeVertex( H.x, H.y, H.z, 0, 1, vertdata ); - - // AddCubeVertex( A.x, A.y, A.z, 0, 1, vertdata ); //Bottom - // AddCubeVertex( B.x, B.y, B.z, 1, 1, vertdata ); - // AddCubeVertex( F.x, F.y, F.z, 1, 0, vertdata ); - // AddCubeVertex( F.x, F.y, F.z, 1, 0, vertdata ); - // AddCubeVertex( E.x, E.y, E.z, 0, 0, vertdata ); - // AddCubeVertex( A.x, A.y, A.z, 0, 1, vertdata ); - - // AddCubeVertex( A.x, A.y, A.z, 0, 1, vertdata ); //Left - // AddCubeVertex( E.x, E.y, E.z, 1, 1, vertdata ); - // AddCubeVertex( H.x, H.y, H.z, 1, 0, vertdata ); - // AddCubeVertex( H.x, H.y, H.z, 1, 0, vertdata ); - // AddCubeVertex( D.x, D.y, D.z, 0, 0, vertdata ); - // AddCubeVertex( A.x, A.y, A.z, 0, 1, vertdata ); - - // AddCubeVertex( F.x, F.y, F.z, 0, 1, vertdata ); //Right - // AddCubeVertex( B.x, B.y, B.z, 1, 1, vertdata ); - // AddCubeVertex( C.x, C.y, C.z, 1, 0, vertdata ); - // AddCubeVertex( C.x, C.y, C.z, 1, 0, vertdata ); - // AddCubeVertex( G.x, G.y, G.z, 0, 0, vertdata ); - // AddCubeVertex( F.x, F.y, F.z, 0, 1, vertdata ); } @@ -1953,21 +1780,26 @@ void CMainApplication::RenderScene( vr::Hmd_Eye nEye ) { glUseProgram( m_unSceneProgramID ); glUniformMatrix4fv( m_nSceneMatrixLocation, 1, GL_FALSE, glm::value_ptr(GetCurrentViewProjectionMatrix( nEye ))); + + if( nEye == vr::Eye_Left ) + { + float offset = 0.0f; + glUniform1fv(m_nSceneTextureOffsetXLocation, 1, &offset); + } + else if( nEye == vr::Eye_Right ) + { + float offset = 0.5f; + glUniform1fv(m_nSceneTextureOffsetXLocation, 1, &offset); + } + + glUniform3fv(m_nScenePositionOffsetLocation, 1, &hmd_pos[0]); + glBindVertexArray( m_unSceneVAO ); glBindTexture( GL_TEXTURE_2D, m_iTexture ); glDrawArrays( GL_TRIANGLES, 0, m_uiVertcount ); glBindVertexArray( 0 ); } - glUseProgram( m_unSceneProgramID ); - glm::mat4 arrow_mat = GetCurrentViewProjectionMatrix( nEye ); - arrow_mat = glm::translate(arrow_mat, cursor_pos); - glUniformMatrix4fv( m_nSceneMatrixLocation, 1, GL_FALSE, glm::value_ptr(arrow_mat)); - glBindVertexArray( m_arrow_vao ); - glBindTexture( GL_TEXTURE_2D, m_arrow_texture_id ); - glDrawArrays( GL_TRIANGLES, 0, m_arrow_vert_count ); - glBindVertexArray( 0 ); - bool bIsInputAvailable = m_pHMD->IsInputAvailable(); if( bIsInputAvailable ) @@ -2082,11 +1914,11 @@ glm::mat4 CMainApplication::GetCurrentViewProjectionMatrix( vr::Hmd_Eye nEye ) //memcpy(&m_mat4HMDPose[0], &pp[0], sizeof(pp)); if( nEye == vr::Eye_Left ) { - matMVP = m_mat4ProjectionLeft * m_mat4eyePosLeft * glm::translate(m_mat4HMDPose, hmd_reset_pos); + matMVP = m_mat4ProjectionLeft * m_mat4eyePosLeft * m_mat4HMDPose; } else if( nEye == vr::Eye_Right ) { - matMVP = m_mat4ProjectionRight * m_mat4eyePosRight * glm::translate(m_mat4HMDPose, hmd_reset_pos); + matMVP = m_mat4ProjectionRight * m_mat4eyePosRight * m_mat4HMDPose; } return matMVP; |