OpenGL代写:CSCI336 3D Art Gallery


用OpenGL做一个3D Art Gallery,实现包括Animations, Light sources和Translucent surfaces等功能。


Create and display an interesting 3D virtual environment of an art gallery. Place a variety of pictures, pedestals, ornaments, etc. around the environment. The scene should be fully textured, using several different textures, and lit.
The scene should contain a number of:

  • Animations (e.g. rotating fans, moving ornaments, moving lights, blinking lights, etc.)
  • Light sources – with at least two spotlights
  • Translucent surfaces (using alpha blending)

The scene should also have a night time and a day time setting (i.e. the same scene illuminated differently to represent two different times of the day).
Implement a ‘help’ display which can be toggled on/off when the user presses the ‘h’ key. This should show the frame rate, whether it is currently night or day, the current display state (described below), user interaction controls, etc.

User Interaction

The user must be able to cycle through the following states with the scene drawn in:

  1. Wireframe mode with a
    Black background with white lines
    White background with black lines
    Blue background with yellow lines
  2. Solid mode with primitives
    Coloured differently but without lighting or textures
    Shaded using lighting only
    Textured without lighting
    Shaded using lighting and textured
  3. The user should also be able to
    Turn individual lights on/off
    Toggle the translucent surfaces (i.e. toggle between translucent and opaque)

Implement a free roaming camera for user viewpoint navigation. The user must be able to move the camera around in the environment. The camera must also be able to rotate in all directions.
Also implement a flash light feature (a spotlight orientated in the direction of the camera and moves with the camera) that can be switched on/off. The user should also be given the option to change the intensity and colour of the flash light.

Advanced Features

Implement the following features:

  1. A screenshot feature – whereby the user can take screenshots that will be saved as image files. The user must be able to take multiple images that are saved into a screenshot folder without overwriting previously saved screenshot image files that are already in that folder.
    Screenshots should be taken by reading the contents of the front buffer.
  2. Display the screenshot – the last screenshot taken should be displayed as a picture somewhere in the art gallery (please indicate where this picture is located in your readme file)
  3. Motion blurring – this feature should allow the user to turn motion blurring on/off for the animated components in the scene (use the accumulation buffer)
  4. Reflective surface – Make the gallery’s floor a reflective surface that is blended in with the textured floor (the stencil buffer should be used for this)
  5. Full scene anti-aliasing – use the accumulation buffer and jitter the scene a number of times to create full scene anti-aliasing (note that the frame rate will definitely drop when this feature is turned on)