void Load() { /* Load shader */ char shaderName_vsh[] = "Shader.vsh"; char shaderName_fsh[] = "Shader.fsh"; CompileShader(&g_Shader, shaderName_vsh, shaderName_fsh); /* Load mesh */ CreateMesh(&g_Mesh[0], kCommonMesh_Cube); CreateMesh(&g_Mesh[1], kCommonMesh_Square); // Cube g_Cube.mesh = &g_Mesh[0]; DefaultTransform(&g_Cube.transform); g_Cube.transform.position.z = 40.0f; g_Cube.transform.axis = GLKVector3Make(0.0f, 1.0f, 0.0f); //g_Cube.transform.scale = GLKVector3Make(10.0f, 10.0f, 10.0f); g_Cube.transform.angle = 0.0f; g_Cube.transform.parent = &g_WorldTrans; g_Cube.color = GLKVector4Make(0.4f, 0.6f, 0.7f, 0.8f); // Mask g_Mask.mesh = &g_Mesh[1]; DefaultTransform(&g_Mask.transform); g_Mask.transform.position = GLKVector3Make(0.0f, 2.0f, 40.0f); g_Mask.transform.axis = GLKVector3Make(1.0f, 0.0f, 0.0f); g_Mask.transform.angle = 90.0f; g_Mask.transform.scale = GLKVector3Make(2.0f, 2.0f, 1.0f); g_Mask.transform.parent = &g_WorldTrans; g_Mask.color = GLKVector4Make(0.0f, 0.0f, 0.0f, 0.8f); /* Set gl states */ glClearColor(0.5f, 0.5f, 0.5f, 1.0f); glEnable(GL_DEPTH_TEST); }
//------------------------------------------------------------------------------ GameObject::GameObject(ColorEnum color) { switch (color) { case COLOR_RED: solidColor_ = GLKVector4Make(1.f, 0.f, 0.f, 1.f); break; case COLOR_GREEN: solidColor_ = GLKVector4Make(0.f, 1.f, 0.f, 1.f); break; case COLOR_BLUE: solidColor_ = GLKVector4Make(0.f, 0.f, 1.f, 1.f); break; case COLOR_YELLOW: solidColor_ = GLKVector4Make(1.f, 1.f, 0.f, 1.f); break; case COLOR_BROWN: solidColor_ = GLKVector4Make(169.f/255.f, 82.f/255.f, 45.f/255.f, 1.f); break; case COLOR_VIOLET: solidColor_ = GLKVector4Make(238.f/255.f, 130.f/255.f, 238.f/255.f, 1.f); break; case COLOR_GRAY: solidColor_ = GLKVector4Make(.67f, .67f, .67f, 1.f); break; case COLOR_WHITE: default: solidColor_ = GLKVector4Make(1.f, 1.f, 1.f, 1.f); break; } }
GLKVector3 Transform_GetLocalPosition(const Transform slf, GLKVector3 world_position) { bool inv_result; GLKMatrix4 transform_inv = GLKMatrix4Invert(Transform_GetMV(&slf), &inv_result); assert(inv_result); // the matrix should be invertible. GLKVector4 position4 = GLKMatrix4MultiplyVector4(transform_inv, GLKVector4Make(world_position.x, world_position.y, world_position.z, 1.0f)); return GLKVector3Make(position4.x, position4.y, position4.z); }
void MovingDots::drawFrame(shared_ptr<StimulusDisplay> display) { // // Update dots // currentTime = getElapsedTime(); if (previousTime != currentTime) { updateParameters(); updateDots(); previousTime = currentTime; if (currentNumDots > 0) { gl::BufferBinding<GL_ARRAY_BUFFER> arrayBufferBinding(dotPositionBuffer); glBufferData(GL_ARRAY_BUFFER, dotPositions.size() * sizeof(decltype(dotPositions)::value_type), dotPositions.data(), GL_STREAM_DRAW); } } if (0 == currentNumDots) { // No dots, so nothing to draw return; } // // Draw the dots // gl::ProgramUsage programUsage(program); gl::VertexArrayBinding vertexArrayBinding(vertexArray); auto currentMVPMatrix = GLKMatrix4Translate(display->getProjectionMatrix(), fieldCenterX->getValue().getFloat(), fieldCenterY->getValue().getFloat(), 0.0); currentMVPMatrix = GLKMatrix4Scale(currentMVPMatrix, currentFieldRadius, currentFieldRadius, 1.0); currentMVPMatrix = GLKMatrix4Rotate(currentMVPMatrix, GLKMathDegreesToRadians(direction->getValue().getFloat()), 0.0, 0.0, 1.0); glUniformMatrix4fv(mvpMatrixUniformLocation, 1, GL_FALSE, currentMVPMatrix.m); #if !MWORKS_OPENGL_ES gl::Enabled<GL_PROGRAM_POINT_SIZE> pointSizeEnabled; #endif glUniform1f(pointSizeUniformLocation, dotSize->getValue().getFloat() * dotSizeToPixels); auto currentColor = GLKVector4Make(red->getValue().getFloat(), green->getValue().getFloat(), blue->getValue().getFloat(), alpha->getValue().getFloat()); glUniform4fv(colorUniformLocation, 1, currentColor.v); gl::Enabled<GL_BLEND> blendEnabled; glBlendEquation(GL_FUNC_ADD); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDrawArrays(GL_POINTS, 0, currentNumDots); }