Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

I. Aim You are required to design and display 3D objects in this project. The project aims to examine your understanding and application of essential

I. Aim

You are required to design and display 3D objects in this project. The project aims to examine your understanding and application of essential 3D graphics concepts including modelling, projection, transformation, visible-surface determination, illumination, shading and texture mapping.

II. Tasks

Design a 3D object that consists of at least five curved surfaces (e.g. spherical surfaces or cylindrical surfaces) and at least seven planar surfaces. Display the object in the form of a wire-frame using an orthographic parallel projection. The coordinates of the object and the projection parameters should be properly selected so that the projection plane is not perpendicular to a surface of the object. The curved surfaces can be approximated by a polygon mesh for display. Place your drawing code in the drawing function of Display_1 (Display_1::Draw(...)) in the sample program EV_Shell_GL_CV. Your result should show when the key 1 on the keyboard is pressed.

Listed below are the requirements for this task, which should be addressed in your report.

i.Explain the design of the 3D object. What are the components of the object? How do they join together? How is each component expressed mathematically? How does your design meet the requirements specified in this task?

Explain how the object is displayed using an orthographic projection of your choice. What are the parameters for this particular orthographic projection?

Summarise the C++ source code that you have written for the task using a sequence of steps, a flow chart or pseudo-code.

Explain each step of your C++ source code clearly so that an experienced reader can repeat the task to obtain the same result without the need of your C++ code.

Include the drawing result of the task in your report.

Explain the drawing result you have obtained (e.g., what has been drawn? Have you drawn what you are asked to draw?).

Rotate the object designed in Task 1 through 360? about an axis that passes through it. Rotate the object by steps of 5? so that a viewer can see it rotating. The projection parameters should be properly selected so that the projection plane is not always perpendicular to a surface of the object. Place your drawing code in the drawing function of Display_2 (Display_2::Draw(...)) in the sample program EV_Shell_GL_CV. Your result should show when the key 2 on the keyboard is pressed.

Listed below are the requirements for this task, which should be addressed in your report.

Explain how the object is rotated. How is your particular axis for rotation expressed mathematically? How is your operation of rotation expressed mathematically?

Summarise the C++ source code that you have written for the task using a sequence of steps, a flow chart or pseudo-code.

Explain each step of your C++ source code clearly so that an experienced reader can repeat the task to obtain the same result without the need of your C++ code.

Include the drawing result of the task in your report.

Explain the drawing result you have obtained (e.g., what has been drawn? Have you drawn what you are asked to draw?).

Repeat Task 2 with the following additional requirements in visualizing your object.

Only show the visible surface of the object. It is assumed that the surface of the object is opaque.

Use the z-buffer (depth-buffer) algorithm to determine the visible surface.

Shade the visible surface using solid colours.

Use different colours for different surfaces. Divide each curved surface into at least three parts and shade the parts with different colours.

Place your drawing code in the drawing function of Display_3 (Display_3::Draw(...)) in the sample program

EV_Shell_GL_CV. Your result should show when the key 3 on the keyboard is pressed.

Listed below are the requirements for this task, which should be addressed in your report.

i.Explain how the visible surface of the object is displayed using the z-buffer (depth-buffer) algorithm in this case. How does the z-buffer algorithm work? How is it used to determine the visible surface of your object?

Summarise the C++ source code that you have written for the task using a sequence of steps, a flow chart or pseudo-code.

Explain each step of your C++ source code clearly so that an experienced reader can repeat the task to obtain the same result without the need of your C++ code.

Include the drawing result of the task in your report.

Explain the drawing result you have obtained (e.g., what has been drawn? Have you drawn what you are asked to draw?).

Repeat Task 2 with the following additional requirements in visualizing your object.

Only show the visible surface of the object. It is assumed that the surface of the object is opaque.

Use the z-buffer (depth-buffer) algorithm to determine the visible surface.

Map texture images to the surfaces of the object.

Use different images for different surfaces.

Place your drawing code in the drawing function of Display_4 (Display_4::Draw(...)) in the sample program

EV_Shell_GL_CV. Your result should show when the key 4 on the keyboard is pressed.

Listed below are the requirements for this task, which should be addressed in your report.

Explain how a texture image is mapped to a surface with the aid of relevant mathematical equations.

Show the texture images used for this task in your report. Each texture image must be an image of a natural scene (e.g. an image of the Opera House). It cannot be a computer-generated image.

Summarise the C++ source code that you have written for the task using a sequence of steps, a flow chart or pseudo-code.

Explain each step of your C++ source code clearly so that an experienced reader can repeat the task to obtain the same result without the need of your C++ code.

Include the drawing result of the task in your report.

Explain the drawing result you have obtained (e.g., what has been drawn? Have you drawn what you are asked to draw?).

Hints:

(a) A sample program for texture mapping has been posted to vUWS (under Lecture 12).

An example of texture mapping to the surfaces of a cube is shown below.

Redesign the 3D object in Task 1 so that it consists of at least eight bicubic Bezier surface patches, which join along their edges in pairs. It is required that each Bezier surface patch is a curved surface, rather than a planar surface. Each pair of joining Bezier surface patches must have G0 continuity along the joining edge.

Repeat Task 2 with the following additional requirements in visualizing your object.

Only show the visible surface of the object. It is assumed that the surface is opaque.

Shade the visible surface using the basic illumination model and the Gouraud rendering/shading model (see Lectures 11 & 12). Use a single point-light source. Parameters used in the models should be properly selected to show the specular reflection from the visible surface.

Map texture images to the curved Bezier surface patches.

Use different images for different Bezier patches.

Place your drawing code in the drawing function of Display_5 (Display_5::Draw(...)) in the sample program

EV_Shell_GL_CV. Your result should show when the key 5 on the keyboard is pressed.

Listed below are the requirements for this task, which should be addressed in your report.

Explain your design of the 3D object using Bezier surface patches. What are the coordinates of the control points? How are the Bezier surface patches joined together?

Explain what the basic illumination model is with the aid of relevant mathematical equations. What are the parameters used for your illumination model?

Explain what the Gouraud rendering/shading model is. How is the surface normal determined for your particular design?

Explain how a texture image is mapped to a bicubic Bezier surface patch of your object.

Show the texture images used for this task in your report. Each texture image must be an image of a natural scene (e.g. an image of the Opera House). It cannot be a computer-generated image.

Summarise the C++ source code that you have written for the task using a sequence of steps, a flow chart or pseudo-code.

vii.Explain each step of your C++ source code clearly so that an experienced reader can repeat the task to obtain the same result without the need of your C++ code. viii.Include the drawing result of the task in your report.

ix. Explain the drawing result you have obtained (e.g., what has been drawn? Have you drawn what you are asked to draw?).

Hints:

To draw a Bezier patch, you may divide it into small patches and then draw each small patch by approximating it by a polygon. You may consider the sample code below to draw the surface of a small patch.

glBegin(GL_POLYGON);

// Evaluate the coordinates of the vertices of the polygon

// (e.g., by using glEvalCoord2f(u, v);) :

:

glEnd();

The surface normal is required for rendering/shading each small patch. It can be computed automatically using the OpenGL function below.

glEnable(GL_AUTO_NORMAL);

OpenGL functions and associated examples for illumination, surface rendering and texture mapping are discussed in Lecture 12 and the textbook.

An example of a Bezier object is shown below.

Perform a task of your choice, which can be used to distinguish you from others. This is a required task and it must be directly related to this unit of study. Place your drawing code in the drawing function of Display_9 (Display_9::Draw(...)) in the sample program EV_Shell_GL_CV. Your result should show when the key 9 on the keyboard is pressed. Examples of the task are given below.

Example 1: You find a problem during this project. You decide to tackle the problem. You propose a method to solve the problem and implement the method using C++. You show results to verify your proposal.

Example 2: You find an interesting algorithm in the textbook, which has not been discussed in this unit of study. You decide to implement the algorithm in C++. You show results to verify your implementation.

Example 3: You find an interesting algorithm in visualisation in an IEEE journal. You decide to implement the algorithm in C++. You show results to verify your implementation.

The requirements for this task are listed below.

i. Please respond to the following questions in your report.

What is the aim of the task? In other words, what do you want to do?

Why do you want to do it?

What are the challenges of this task when compared to the tasks above?

How do you do it? In other words, can you explain your method or implementation?

What are your results? Can you explain them?

What can you conclude from the results?

Have you achieved your aim?

Is your conclusion significant and why?

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Mysql Examples Explanations Explain Examples

Authors: Harry Baker ,Ray Yao

1st Edition

B0CQK9RN2J, 979-8872176237

More Books

Students also viewed these Databases questions

Question

=+a) Which one will be dropped?

Answered: 1 week ago

Question

=+2. How reliable is this existing information?

Answered: 1 week ago