Exemplo n.º 1
0
void SimObjectRenderer::setCameraMode(SimRobotCore2::Renderer::CameraMode mode)
{
  cameraMode = mode;
  if(cameraMode == targetCam)
  {
    cameraTarget = Vector3<>();
    updateCameraTransformation();
  }
}
Exemplo n.º 2
0
void SimObjectRenderer::rotateCamera(float x, float y)
{
  if(cameraMode == SimRobotCore2::Renderer::targetCam)
  {
    Vector3<> v = cameraPos - cameraTarget;
    Matrix3x3<> rotateY(Vector3<>(0.f, y, 0.f));
    Matrix3x3<> rotateZ(Vector3<>(0.f, 0.f, x));
    Vector3<> v2(sqrtf(v.x * v.x + v.y * v.y), 0.f, v.z);
    v2 = rotateY * v2;
    if(v2.x < 0.001f)
    {
      v2.x = 0.001f;
      v2.normalize(v.abs());
    }
    Vector3<> v3(v.x, v.y, 0.f);
    v3.normalize(v2.x);
    v3.z = v2.z;
    v = rotateZ * v3;
    cameraPos = cameraTarget + v;
  }
  else // if(cameraMode == SimRobotCore2::Renderer::freeCam)
  {
    Vector3<> v = cameraTarget - cameraPos;
    Matrix3x3<> rotateY(Vector3<>(0.f, y, 0.f));
    Matrix3x3<> rotateZ(Vector3<>(0.f, 0.f, -x));
    Vector3<> v2(sqrtf(v.x * v.x + v.y * v.y), 0.f, v.z);
    v2 = rotateY * v2;
    if(v2.x < 0.001f)
    {
      v2.x = 0.001f;
      v2.normalize(v.abs());
    }
    Vector3<> v3(v.x, v.y, 0.f);
    v3.normalize(v2.x);
    v3.z = v2.z;
    v = rotateZ * v3;
    cameraTarget = cameraPos + v;
  }
  updateCameraTransformation();
}
Exemplo n.º 3
0
void SimObjectRenderer::moveCamera(float x, float y)
{
  if(cameraMode == SimRobotCore2::Renderer::targetCam)
  {
    if(x != 0.f)
      rotateCamera(x, 0);
    if(y != 0.f)
    {
      Vector3<> v = cameraPos - cameraTarget;
      float len = v.abs() + y;
      if(len < 0.0001f)
        len = 0.0001f;
      v.normalize(len);
      cameraPos = cameraTarget + v;
    }
  }
  else // if(cameraMode == SimRobotCore2::Renderer::FREECAM)
  {
    if(x != 0.f)
    {
      Vector3<> v = cameraTarget - cameraPos;
      Vector3<> v2 = v ^ Vector3<>(0.f, 0.f, 1.f);
      v2.normalize(x);
      cameraTarget += v2;
      cameraPos += v2;
    }
    if(y != 0.f)
    {
      Vector3<> v = cameraTarget - cameraPos;
      v.normalize(y);
      cameraTarget -= v;
      cameraPos -= v;
    }
  }
  updateCameraTransformation();
}
Exemplo n.º 4
0
void SimObjectRenderer::setCamera(const float* pos, const float* target)
{
  cameraPos = Vector3<>(pos[0], pos[1], pos[2]);
  cameraTarget = Vector3<>(target[0], target[1], target[2]);
  updateCameraTransformation();
}
Exemplo n.º 5
0
void SimObjectRenderer::resetCamera()
{
  cameraPos = defaultCameraPos;
  cameraTarget = Vector3<>();
  updateCameraTransformation();
}
Exemplo n.º 6
0
void display()
{
    static float fps = 0;
    frame++;
    int time=glutGet(GLUT_ELAPSED_TIME);

    if (time - timebase > 1000) {
        fps = frame*1000.0f/(time-timebase);
        timebase = time;
        frame = 0;
    }
    runCuda(customSimulation);

    char title[100];
    sprintf( title, "565 NBody sim [%0.2f fps]", fps );
    glutSetWindowTitle(title);

    glBindBuffer( GL_PIXEL_UNPACK_BUFFER, pbo);
    glBindTexture(GL_TEXTURE_2D, displayImage);
    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, field_width, field_height, 
            GL_RGBA, GL_FLOAT, NULL);

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   
#if VISUALIZE == 1
    // VAO, shader program, and texture already bound
    //glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    //glDrawElements(GL_TRIANGLES, 6*field_width*field_height,  GL_UNSIGNED_INT, 0);
	if (cameraToggle)
		updateCameraTransformation ();

    glUseProgram(program[HEIGHT_FIELD]);

    glEnableVertexAttribArray(positionLocation);
    glEnableVertexAttribArray(texcoordsLocation);
    
    glBindBuffer(GL_ARRAY_BUFFER, planeVBO);
    glVertexAttribPointer((GLuint)positionLocation, 2, GL_FLOAT, GL_FALSE, 0, 0); 

    glBindBuffer(GL_ARRAY_BUFFER, planeTBO);
    glVertexAttribPointer((GLuint)texcoordsLocation, 2, GL_FLOAT, GL_FALSE, 0, 0);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, planeIBO);

    glDrawElements(GL_TRIANGLES, 6*field_width*field_height,  GL_UNSIGNED_INT, 0);

    glDisableVertexAttribArray(positionLocation);
    glDisableVertexAttribArray(texcoordsLocation);

    glUseProgram(program[PASS_THROUGH]);

    glEnableVertexAttribArray(positionLocation);

    glBindBuffer(GL_ARRAY_BUFFER, planetVBO);
    glVertexAttribPointer((GLuint)positionLocation, 4, GL_FLOAT, GL_FALSE, 0, 0); 

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, planetIBO);
   
    glPointSize(4.0f); 
    glDrawElements(GL_POINTS, N_FOR_VIS+1, GL_UNSIGNED_INT, 0);

    glPointSize(1.0f);

    glDisableVertexAttribArray(positionLocation);

#endif
    glutPostRedisplay();
    glutSwapBuffers();
}