Exemplo n.º 1
0
int simpleRendererInitialize(struct simpleRenderer * sr)
{
  sr->viewport[0]=0;
  sr->viewport[1]=0;
  sr->viewport[2]=sr->width;
  sr->viewport[3]=sr->height;

  buildOpenGLProjectionForIntrinsics(
                                      sr->projectionMatrix ,
                                      sr->viewport ,
                                      sr->fx,
                                      sr->fy,
                                      sr->skew,
                                      sr->cx,
                                      sr->cy,
                                      sr->width,
                                      sr->height,
                                      sr->near,
                                      sr->far
                                     );

   double viewMatrixD[16];
   create4x4IdentityMatrix(viewMatrixD);

   create4x4ScalingMatrix(viewMatrixD,0.01,0.01,-0.01);
   copy4x4DMatrixToF(sr->viewMatrix,viewMatrixD);

   //Initialization of matrices not yet used
   create4x4IdentityMatrixF(sr->modelMatrix);
   create4x4IdentityMatrixF(sr->modelViewMatrix);

 return 1;
}
Exemplo n.º 2
0
void updateViewMy(int uploadIt)
{

    int viewport[4]={0};
    glm::mat4 Projection = glm::perspective(fov, 1.0f, near , far);

    buildOpenGLProjectionForIntrinsics   (
                                             projectionMatrix ,
                                             viewport ,
                                             fx,
                                             fy,
                                             0.0 , // SKEW
                                             windowWidth/2.0, windowHeight/2.0,
                                             windowWidth, windowHeight,
                                             near,
                                             far
                                           );

    glmMatToFloat(projectionMatrix, Projection);

    float rotation[16];
    float translation[16];
    MatrixF4x42Quaternion(camera.angle,qXqYqZqW,rotation);
    create4x4IdentityFMatrix(rotation);

    create4x4TranslationMatrix(translation , camera.pos[0] , camera.pos[1] , camera.pos[2]);

    multiplyTwo4x4FMatrices(modelViewMatrix, translation , rotation );

    multiplyTwo4x4FMatrices(modelViewProjectionMatrix, modelViewMatrix , projectionMatrix  );
    transpose4x4MatrixF(modelViewMatrix);
    transpose4x4MatrixF(modelViewProjectionMatrix);

    if (uploadIt)
    {
	 glUniformMatrix4fv(modelViewProjectionMatrixLocation  , 1 /*Only setting one matrix*/ , GL_FALSE /* dont transpose */, (const float * ) modelViewProjectionMatrix);
     checkOpenGLError(__FILE__, __LINE__);
    }
}
Exemplo n.º 3
0
void initScene()
{
    print4x4FMatrix("modelViewMatrix",modelViewMatrix);
    int viewport[4]={0};

    buildOpenGLProjectionForIntrinsics   (
                                             projectionMatrix ,
                                             viewport ,
                                             fx,
                                             fy,
                                             0.0 , // SKEW
                                             windowWidth/2.0, windowHeight/2.0,
                                             windowWidth, windowHeight,
                                             near,
                                             far
                                           );

    print4x4FMatrix("projectionMatrix",projectionMatrix);

    lightPosition[0]=2;
    lightPosition[1]=2;
    lightPosition[2]=2;

    //create4x4RotationMatrix(modelViewProjection , 30 , 1.0, 1.0 , 1.0 );
    camera.pos[0]=0;
    camera.pos[1]=0;
    camera.pos[2]=-3;
    camera.angle[0]=0; camera.angle[1]=0; camera.angle[2]=0; camera.angle[3]=0;
    updateView(0);

    //generate and bind a VAO for the 3D axes
    glGenVertexArrays(1, &vao);
    checkOpenGLError(__FILE__, __LINE__);
    glBindVertexArray(vao);
    checkOpenGLError(__FILE__, __LINE__);

    //colorcube();

    // Load shaders and use the resulting shader program
    #if USE_SIMPLE_SHADERS
      fprintf(stderr,GREEN "Loading simple shader set \n" NORMAL);
      program = LoadShaders( "simple.vert", "simple.frag" );
      checkOpenGLError(__FILE__, __LINE__);
      #else
      fprintf(stderr,GREEN "Loading complex shader set \n"  NORMAL);
       program = LoadShaders( "test.vert", "test.frag" );
       checkOpenGLError(__FILE__, __LINE__);
    #endif // USE_SIMPLE_SHADERS

    glUseProgram( program );
    checkOpenGLError(__FILE__, __LINE__);

    // Create and initialize a buffer object on the server side (GPU)
    glGenBuffers( 1, &buffer );
    checkOpenGLError(__FILE__, __LINE__);
    glBindBuffer( GL_ARRAY_BUFFER, buffer );
    checkOpenGLError(__FILE__, __LINE__);
    NumVertices=0;
    //pushObjectToBufferData( heartVertices , sizeof(heartVertices) , heartNormals , sizeof(heartNormals) , 0 , 0 );
    //pushObjectToBufferData( cubeCoords , sizeof(cubeCoords) , cubeNormals , sizeof(cubeNormals) , 0 , 0 );
    //pushObjectToBufferData( planeCoords , sizeof(planeCoords) , planeNormals , sizeof(planeNormals) , 0 , 0 );
    pushObjectToBufferData( pyramidCoords , sizeof(pyramidCoords) , pyramidNormals , sizeof(pyramidNormals) , 0 , 0 );

    lightPositionLocation = glGetUniformLocation( program, "lightPosition" );                   checkOpenGLError(__FILE__, __LINE__);
    fogLocation = glGetUniformLocation( program, "fogColorAndScale" );                          checkOpenGLError(__FILE__, __LINE__);
    lightColorLocation = glGetUniformLocation( program, "lightColor" );                         checkOpenGLError(__FILE__, __LINE__);
    lightMaterialsLocation   = glGetUniformLocation( program, "lightMaterials" );               checkOpenGLError(__FILE__, __LINE__);
	normalTransformationLocation = glGetUniformLocation(program, "normalTransformation");       checkOpenGLError(__FILE__, __LINE__);
	modelViewProjectionMatrixLocation  = glGetUniformLocation(program, "modelViewProjection");  checkOpenGLError(__FILE__, __LINE__);
	modelViewMatrixLocation  = glGetUniformLocation(program, "modelViewMatrix");                checkOpenGLError(__FILE__, __LINE__);

    updateView(1);


    glEnable( GL_DEPTH_TEST );
    glClearColor( 0.0, 0.0, 0.0, 1.0 );
    checkOpenGLError(__FILE__, __LINE__);


    // only one VAO can be bound at a time, so disable it to avoid altering it accidentally
    glBindVertexArray(0);
    checkOpenGLError(__FILE__, __LINE__);

}