Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

/* Note: the notes in this document guide you to write this report correctly. Therefore, please do not delete these notes and do not damage

/* Note: the notes in this document guide you to write this report correctly. Therefore, please do not delete these notes and do not damage the formal content and layout */

/* Rename the file name of this word according to the following rules (all data such as this report and program are archived by the computer, so please write as required)

contents

1 Program design

1.1 Topic

1.2 Content

1.3 Software/development tool

1.4 Application platform

2 detailed design

2.1 Program structure

2.2 Function of your project

2.3 Log

3 Debugging and Execution

3.1 Production results

3.2 Program instructions

3.3 Development summary

4 Source code

1 Program design

1.1 Topic

Drawing a quad using openGL/FreeGlut project.

1.2 Content

This is a graphical program that draws and colors a quad shape using openGL/FreeGlut project.

1.3 Software/development tool

CODEBLOCKS

1.4 Application platform

Windows 10

2 detailed design

2.1 Program structure

void EnableOpenGL();

void DisableOpenGL();

int WINAPI WinMain();

void EnableOpenGL();

void DisableOpenGL ();

2.2 Function of your project

This graphical program is designed to draw and color a quad, we can choose the color of the quad and its background as well as we can determine its size. Also, we can control the speed and the direction of quad rotation.

2.3 Log

I spent the most time on

The first day, I

3 Debugging and Execution

3.1 Production results

3.2 Program instructions

Select the size of the width and length area to be the quad size, determine the color of the background and the color of the quad then choose the points of the vertex. Select the speed and direction rotating of the quad and you can or cannot make it rotate regularly. After compiling the program, you can see a designed quad rotating with its colored background.

3.3 Development summary

This was an amazing experience programming this program. It was interesting and I learned so much coding this program. This also gave me more knowledge about how the graphical structure of the c program works.

4 Source code

#include

#include

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

void EnableOpenGL(HWND hwnd, HDC*, HGLRC*);

void DisableOpenGL(HWND, HDC, HGLRC);

int WINAPI WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

WNDCLASSEX wcex;

HWND hwnd;

HDC hDC;

HGLRC hRC;

MSG msg;

BOOL bQuit = FALSE;

float theta = 0.0f;

/* register window class */

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_OWNDC;

wcex.lpfnWndProc = WindowProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);

wcex.lpszMenuName = NULL;

wcex.lpszClassName = "GLSample";

wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);;

if (!RegisterClassEx(&wcex))

return 0;

/* create main window */

hwnd = CreateWindowEx(0,

"GLSample",

"OpenGL assignment B", //*the title

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

CW_USEDEFAULT,

450, //* width area

450, //* length area

NULL,

NULL,

hInstance,

NULL);

ShowWindow(hwnd, nCmdShow);

/* enable OpenGL for the window */

EnableOpenGL(hwnd, &hDC, &hRC);

/* program main loop */

while (!bQuit)

{

/* check for messages */

if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))

{

/* handle or dispatch messages */

if (msg.message == WM_QUIT)

{

bQuit = TRUE;

}

else

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

else

{

/* OpenGL animation code goes here */

glClearColor(0.25f, 0.25f, 0.25f, 0.25f); //*background is changed to gray color

glClear(GL_COLOR_BUFFER_BIT);

glPushMatrix();

glRotatef(theta, 0.0f, 0.0f, 1.0f);

glBegin(GL_QUADS);

glColor3f(1.0, 1.0, 0.0); //* color and position of the vertex

glVertex2f(-0.5f, -0.5f);

glColor3f(0.0, 1.0, 0.0);

glVertex2f( 0.5f, -0.5f);

glColor3f(1.0, 0.0, 1.0);

glVertex2f( 0.5f, 0.5f);

glColor3f(0.0, 0.0, 1.0);

glVertex2f(-0.5f, 0.5f);

glEnd();

glPopMatrix();

SwapBuffers(hDC);

theta += -3.0f; //* the speed and direction of triangle rotating

Sleep (1);

}

}

/* shutdown OpenGL */

DisableOpenGL(hwnd, hDC, hRC);

/* destroy the window explicitly */

DestroyWindow(hwnd);

return msg.wParam;

}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

switch (uMsg)

{

case WM_CLOSE:

PostQuitMessage(0);

break;

case WM_DESTROY:

return 0;

case WM_KEYDOWN:

{

switch (wParam)

{

case VK_ESCAPE:

PostQuitMessage(0);

break;

}

}

break;

default:

return DefWindowProc(hwnd, uMsg, wParam, lParam);

}

return 0;

}

void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC)

{

PIXELFORMATDESCRIPTOR pfd;

int iFormat;

/* get the device context (DC) */

*hDC = GetDC(hwnd);

/* set the pixel format for the DC */

ZeroMemory(&pfd, sizeof(pfd));

pfd.nSize = sizeof(pfd);

pfd.nVersion = 1;

pfd.dwFlags = PFD_DRAW_TO_WINDOW |

PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;

pfd.iPixelType = PFD_TYPE_RGBA;

pfd.cColorBits = 27;

pfd.cDepthBits = 15;

pfd.iLayerType = PFD_MAIN_PLANE;

iFormat = ChoosePixelFormat(*hDC, &pfd);

SetPixelFormat(*hDC, iFormat, &pfd);

/* create and enable the render context (RC) */

*hRC = wglCreateContext(*hDC);

wglMakeCurrent(*hDC, *hRC);

}

void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC)

{

wglMakeCurrent(NULL, NULL);

wglDeleteContext(hRC);

ReleaseDC(hwnd, hDC);

}

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

Students also viewed these Databases questions

Question

Tell the merits and demerits of Mendeleev's periodic table.

Answered: 1 week ago