I’m pasting the prompt below, this project must be done in C++ openGL format. A .cpp file is needed along with an exe. I’ve linked a photo example of what I’m trying to recreate in 3D. I’ve also linked some starter code so that you have a rough idea of what I’m looking for. If you can help me out i’m willing to give a big tip.
Using the image you selected in a previous milestone, you will be creating 3D objects that represent the components and layout of that image. Although you have already begun to complete some of this work in your other milestones, during this project you will be refining and adding to your earlier submissions before bringing everything together. Note that you will be working on your 3D scene in Visual Studio but will also submit a written design decisions document discussing your approach throughout the process.
- Create low-polygon 3D representations of real-world objects. Make sure you have at least four completed objects in your 3D scene. At least one of the objects you create should be made using two or more primitive shapes. Note that the object you completed in a previous milestone can count as one of your four. Utilize organized geometry and ensure that polygons (triangles) on each 3D model are well spaced and connected. To minimize complexity and save 3D modeling time, the polygon count for your objects should not exceed 1,000 triangles. As you work, remember to think in terms of simple shapes and ask yourself what primitive 3D shapes go into making up each object in your scene. Four of the following primitive shapes must appear at least once in your creation:
- Apply accurately projected textures to a 3D model. You must select two objects to texture. Note that you should have already textured one object in a previous milestone. If you use that object here, it will count as one of your two. As you work, the textures you select should be royalty-free images with resolutions of 1024 x 1024 pixels or higher. Please refer to the Sourcing Textures Tutorial, linked in the Supporting Materials section, for guidance on how to locate images that can be used for textures.
- Apply lighting to create a polished visualization of 3D models. You must include a minimum of two light sources, and at least one of them should be colored. Note that the light you worked on in a previous milestone counts as one of your two lights. The light sources you create will need to capture all of the objects in the 3D world you are building, meaning they should be positioned at locations that do not cause parts of the objects to appear dark when moving the camera around them. While we recommend that you include a point light for one of your two lights, you may implement a directional light or spotlight if you choose. As you generate lighting, make sure that any lights are designed in a way that helps curate a final polished presentation. You will need to properly implement all components of the Phong shading model, including the following:
- Place objects appropriately, using the X, Y, and Z coordinates, relative to one another in the 3D world. As you work, be sure to match the photograph you selected as closely as possible by placing the objects in their proper locations. Note that when you first import code for the objects you created in previous weeks, the objects may overlap, as it is likely that they were all initially placed at 0, 0, 0.
- Apply horizontal, vertical, and depth camera navigation around the 3D scene. The camera will be traversing the X, Y, and Z axes, and you should ensure it can capture all of the objects in your 3D scene. In a previous milestone, you already created some of this code. It is recommended that you use the code you have already created and then increase the radius of the camera’s orbit so it will correctly encompass all of the objects in the world you are building. You may find it easiest to add each object separately and then adjust the orbit radius or position of the camera each time. As you work, we recommend you use the following input devices:
- WASD keys: These keys should be used to control the forward, backward, left, and right motion.
- QE keys: These keys should be used to control the upward and downward movement.
- Apply nuanced camera controls to effectively view the 3D objects in the application. This should allow the orientation of the camera to change even though its location has not moved. You should focus first on pitch and yaw, but careful changes can be made to roll, keeping in mind that you may want the upward direction to stay in the same location. As you work, you will also want to code for adjustments in the speed of the movement so a user will have more control over how they explore the objects in the scene. We recommend you use the following input devices:
- Mouse cursor: This should be used to change the orientation of the camera so it can look up and down or right and left.
- Mouse scroll: This should be used to adjust the speed of the movement, or the speed the camera travels around the scene.
- Create perspective and orthographic displays of the 3D world. Use the tap of a keyboard key to allow a user to change the viewport display of all objects in the scene between orthographic (2D) and perspective (3D) views at will. To accomplish this, you will be switching the function call to retrieve either the perspective or orthographic projection matrix. Note that you will be keeping the camera in the same orientation that you already developed in previous criteria.