0% found this document useful (0 votes)
127 views6 pages

CG Project Report

The document describes a computer graphics project that renders a rotating triangle on a window using OpenGL. It includes code to initialize an OpenGL context, render a triangle with different colored vertices that rotates over time, and shut down the OpenGL context. The triangle is manipulated by applying transformations like translation, rotation, and changing colors.

Uploaded by

Muhammad Asad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
127 views6 pages

CG Project Report

The document describes a computer graphics project that renders a rotating triangle on a window using OpenGL. It includes code to initialize an OpenGL context, render a triangle with different colored vertices that rotates over time, and shut down the OpenGL context. The triangle is manipulated by applying transformations like translation, rotation, and changing colors.

Uploaded by

Muhammad Asad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

CSC306

COMPUTER GRAPHICS
COMPUTER SCIENCE
(PROJECT REPORT)
TRIANGLE MANIPULATION USING
OPENGL
Created By:
HARIS ULLAH KHAN 16FBSCSM050 (6B)
AQIB HANIF 16FBSCSM061 (6B)
UNDER THE SUPERVISION OF SIR IRFAN ALI
KANDHORO
TRIANGLE MANIPULATION USING
OPENGL
INTRODUCTION:
In this project a graphical triangle is rendered on a window having different colors and
motion using opengl drawing primitives commands and functions.

CODE:
/**************************
* Includes
*
**************************/

#include <windows.h>
#include <gl/gl.h>

/**************************
* Function Declarations
*
**************************/

LRESULT CALLBACK WndProc (HWND hWnd, UINT message,


WPARAM wParam, LPARAM lParam);
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);
/**************************
* WinMain
*
**************************/
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int iCmdShow)
{
WNDCLASS wc;
HWND hWnd;
HDC hDC;
HGLRC hRC;
MSG msg;
BOOL bQuit = FALSE;
float theta = 0.0f;

/* register window class */


wc.style = CS_OWNDC;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject
(BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "GLProject";
RegisterClass (&wc);

/* create main window */


hWnd = CreateWindow (
"GLProject", "Computer Graphics Project",
WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
0, 0, 256, 256,
NULL, NULL, hInstance, NULL);

/* 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.0f, 0.0f, 0.0f, 0.0f);


glClear (GL_COLOR_BUFFER_BIT);

glPushMatrix ();
glRotatef (theta, 0.0f, 0.0f, 1.0f);
glBegin (GL_TRIANGLES);
glColor3f (1.0f, 0.0f, 0.0f); glVertex2f
(0.0f, 1.0f);
glColor3f (0.0f, 1.0f, 0.0f); glVertex2f
(0.87f, -0.5f);
glColor3f (0.0f, 0.0f, 1.0f); glVertex2f (-
0.87f, -0.5f);
glEnd ();
glPopMatrix ();

SwapBuffers (hDC);

theta += 1.0f;
Sleep (1);
}
}

/* shutdown OpenGL */
DisableOpenGL (hWnd, hDC, hRC);

/* destroy the window explicitly */


DestroyWindow (hWnd);

return msg.wParam;
}
/********************
* Window Procedure
*
********************/
LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{

switch (message)
{
case WM_CREATE:
return 0;
case WM_CLOSE:
PostQuitMessage (0);
return 0;

case WM_DESTROY:
return 0;

case WM_KEYDOWN:
switch (wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
return 0;
}
return 0;

default:
return DefWindowProc (hWnd, message, wParam,
lParam);
}
}
/*******************
* Enable OpenGL
*
*******************/
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 = 24;
pfd.cDepthBits = 16;
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 );

}
/******************
* Disable OpenGL
*
******************/
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
{
wglMakeCurrent (NULL, NULL);
wglDeleteContext (hRC);
ReleaseDC (hWnd, hDC);
}

SCREEN SHOT:

You might also like