예제 #1
0
파일: Loop.c 프로젝트: chunkyguy/EWOGL
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);
}
예제 #2
0
//------------------------------------------------------------------------------
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;
  }
}
예제 #3
0
파일: Transform.c 프로젝트: chunkyguy/EWOGL
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);
}
예제 #4
0
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);
}