Question
/* 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
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started