示例#1
0
 @Override
 public FloatBuffer fillBuffer(FloatBuffer buffer) {
   return cameraToClipMatrix.fillBuffer(buffer);
 }
示例#2
0
  @Override
  protected void display() {
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClearDepth(1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    MatrixStack modelMatrix = new MatrixStack();
    modelMatrix.setMatrix(viewPole.calcMatrix());

    Vec4 lightDirCameraSpace = Mat4.mul(modelMatrix.top(), lightDirection);

    glUseProgram(whiteDiffuseColor.theProgram);
    glUniform3(whiteDiffuseColor.dirToLightUnif, lightDirCameraSpace.fillAndFlipBuffer(vec4Buffer));
    glUseProgram(vertexDiffuseColor.theProgram);
    glUniform3(
        vertexDiffuseColor.dirToLightUnif, lightDirCameraSpace.fillAndFlipBuffer(vec4Buffer));
    glUseProgram(0);

    {
      modelMatrix.push();

      // Render the ground plane.
      {
        modelMatrix.push();

        glUseProgram(whiteDiffuseColor.theProgram);
        glUniformMatrix4(
            whiteDiffuseColor.modelToCameraMatrixUnif,
            false,
            modelMatrix.top().fillAndFlipBuffer(mat4Buffer));
        Mat3 normMatrix = new Mat3(modelMatrix.top());
        glUniformMatrix3(
            whiteDiffuseColor.normalModelToCameraMatrixUnif,
            false,
            normMatrix.fillAndFlipBuffer(mat3Buffer));
        glUniform4f(whiteDiffuseColor.lightIntensityUnif, 1.0f, 1.0f, 1.0f, 1.0f);
        planeMesh.render();
        glUseProgram(0);

        modelMatrix.pop();
      }

      // Render the Cylinder
      {
        modelMatrix.push();

        modelMatrix.applyMatrix(objtPole.calcMatrix());

        if (drawColoredCyl) {
          glUseProgram(vertexDiffuseColor.theProgram);
          glUniformMatrix4(
              vertexDiffuseColor.modelToCameraMatrixUnif,
              false,
              modelMatrix.top().fillAndFlipBuffer(mat4Buffer));
          Mat3 normMatrix = new Mat3(modelMatrix.top());
          glUniformMatrix3(
              vertexDiffuseColor.normalModelToCameraMatrixUnif,
              false,
              normMatrix.fillAndFlipBuffer(mat3Buffer));
          glUniform4f(vertexDiffuseColor.lightIntensityUnif, 1.0f, 1.0f, 1.0f, 1.0f);
          cylinderMesh.render("lit-color");
        } else {
          glUseProgram(whiteDiffuseColor.theProgram);
          glUniformMatrix4(
              whiteDiffuseColor.modelToCameraMatrixUnif,
              false,
              modelMatrix.top().fillAndFlipBuffer(mat4Buffer));
          Mat3 normMatrix = new Mat3(modelMatrix.top());
          glUniformMatrix3(
              whiteDiffuseColor.normalModelToCameraMatrixUnif,
              false,
              normMatrix.fillAndFlipBuffer(mat3Buffer));
          glUniform4f(whiteDiffuseColor.lightIntensityUnif, 1.0f, 1.0f, 1.0f, 1.0f);
          cylinderMesh.render("lit");
        }

        glUseProgram(0);

        modelMatrix.pop();
      }

      modelMatrix.pop();
    }
  }