C++Opengl 그래 픽 색상 기능
개발 언어:C++와 IDE:VS 2017,운영 체제 Windows 버 전 windows SDK 8.1,3 자 라 이브 러 리:OpenGL.
항목 기능:
색상 있 는 그림 을 만 듭 니 다.
프로젝트 원본 은 다음 과 같 습 니 다.
/********************* *******************************************************************************************/
#pragma comment( lib, "opengl32.lib" )
#pragma comment( lib, "glu32.lib" )
#pragma comment( lib, "glut32.lib")
#pragma comment( lib, "glew32.lib")
#pragma comment( lib, "glaux.lib")
#pragma comment( lib, "vfw32.lib" )
/********************************************************************************************************************************/
#include <windows.h> // Windows
#include "glew.h" // gl.h,glu.h
#include "glut.h" // OpenGL
HDC hDC=NULL; //
HGLRC hRC=NULL; // OpenGL
HWND hWnd=NULL; //
HINSTANCE hInstance; //
bool keys[256]; //
bool active=TRUE; // , TRUE
bool fullscreen=TRUE; // ,
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // WndProc
GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // OpenGL
{
if (height==0) //
{
height=1; // Height 1
}
glViewport(0,0,width,height); //
glMatrixMode(GL_PROJECTION); //
glLoadIdentity(); //
//
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW); //
glLoadIdentity(); //
}
int InitGL(GLvoid) // OpenGL
{
glShadeModel(GL_SMOOTH); //
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); //
glClearDepth(1.0f); //
glEnable(GL_DEPTH_TEST); //
glDepthFunc(GL_LEQUAL); //
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //
return TRUE; // OK
}
int DrawGLScene(GLvoid) //
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //
glLoadIdentity(); //
glTranslatef(-1.5f,0.0f,-6.0f); // 1.5 , 6.0
glBegin(GL_TRIANGLES); //
/*********************************** *****************************************************/
glColor3f(1.0f,0.0f,0.0f); //
/**************************************************************************************************/
glVertex3f( 0.0f, 1.0f, 0.0f); //
/*********************************** *****************************************************/
glColor3f(0.0f,1.0f,0.0f); //
/**************************************************************************************************/
glVertex3f(-1.0f,-1.0f, 0.0f); //
/*********************************** *****************************************************/
glColor3f(0.0f,0.0f,1.0f); //
/**************************************************************************************************/
glVertex3f( 1.0f,-1.0f, 0.0f); //
glEnd(); //
glTranslatef(3.0f,0.0f,0.0f); // 3
/*********************************** *****************************************************/
glColor3f(0.5f,0.5f,1.0f); //
/**************************************************************************************************/
glBegin(GL_QUADS); //
glVertex3f(-1.0f, 1.0f, 0.0f); //
glVertex3f( 1.0f, 1.0f, 0.0f); //
glVertex3f( 1.0f,-1.0f, 0.0f); //
glVertex3f(-1.0f,-1.0f, 0.0f); //
glEnd(); //
return TRUE; // OK
}
GLvoid KillGLWindow(GLvoid) //
{
if (fullscreen) // ?
{
ChangeDisplaySettings(NULL,0); // ,
ShowCursor(TRUE); //
}
if (hRC) // OpenGL ?
{
if (!wglMakeCurrent(NULL,NULL)) // DC RC ?
{
MessageBox(NULL," DC RC 。"," ",MB_OK | MB_ICONINFORMATION);
}
if (!wglDeleteContext(hRC)) // RC?
{
MessageBox(NULL," RC 。"," ",MB_OK | MB_ICONINFORMATION);
}
hRC=NULL; // RC NULL
}
if (hDC && !ReleaseDC(hWnd,hDC)) // DC?
{
MessageBox(NULL," DC 。"," ",MB_OK | MB_ICONINFORMATION);
hDC=NULL; // DC NULL
}
if (hWnd && !DestroyWindow(hWnd)) // ?
{
MessageBox(NULL," 。"," ",MB_OK | MB_ICONINFORMATION);
hWnd=NULL; // hWnd NULL
}
if (!UnregisterClass("OpenG",hInstance)) // ?
{
MessageBox(NULL," 。"," ",MB_OK | MB_ICONINFORMATION);
hInstance=NULL; // hInstance NULL
}
}
/* OpenGL , : *
* title - *
* width - *
* height - *
* bits - (8/16/32) *
* fullscreenflag - , (TRUE), (FALSE) */
BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
GLuint PixelFormat; //
WNDCLASS wc; //
DWORD dwExStyle; //
DWORD dwStyle; //
RECT WindowRect; //
WindowRect.left=(long)0; // Left 0
WindowRect.right=(long)width; // Right
WindowRect.top=(long)0; // Top 0
WindowRect.bottom=(long)height; // Bottom
fullscreen=fullscreenflag; //
hInstance = GetModuleHandle(NULL); //
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // , DC
wc.lpfnWndProc = (WNDPROC) WndProc; // WndProc
wc.cbClsExtra = 0; //
wc.cbWndExtra = 0; //
wc.hInstance = hInstance; //
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); //
wc.hCursor = LoadCursor(NULL, IDC_ARROW); //
wc.hbrBackground = NULL; // GL
wc.lpszMenuName = NULL; //
wc.lpszClassName = "OpenG"; //
if (!RegisterClass(&wc)) //
{
MessageBox(NULL," "," ",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // FALSE
}
if (fullscreen) // ?
{
DEVMODE dmScreenSettings; //
memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); //
dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Devmode
dmScreenSettings.dmPelsWidth = width; //
dmScreenSettings.dmPelsHeight = height; //
dmScreenSettings.dmBitsPerPel = bits; //
dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
// 。 : CDS_FULLSCREEN
if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
{
// , : 。
if (MessageBox(NULL," !
?","XQ G",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
{
// , fullscreen FALSE,
fullscreen=FALSE; // (Fullscreen=FALSE)
}
else
{
// , 。 FALSE 。 。
MessageBox(NULL," "," ",MB_OK|MB_ICONSTOP);
return FALSE; // FALSE
}
}
}
if (fullscreen) // ?
{
dwExStyle=WS_EX_APPWINDOW; //
dwStyle=WS_POPUP; //
ShowCursor(FALSE); //
}
else
{
dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; //
dwStyle=WS_OVERLAPPEDWINDOW; //
}
AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle); //
//
if (!(hWnd=CreateWindowEx( dwExStyle, //
"OpenG", //
title, //
dwStyle | //
WS_CLIPSIBLINGS | //
WS_CLIPCHILDREN, //
0, 0, //
WindowRect.right-WindowRect.left, //
WindowRect.bottom-WindowRect.top, //
NULL, //
NULL, //
hInstance, //
NULL))) // WM_CREATE
{
KillGLWindow(); //
MessageBox(NULL," "," ",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // FALSE
}
static PIXELFORMATDESCRIPTOR pfd= //pfd ,
{
sizeof(PIXELFORMATDESCRIPTOR), //
1, //
PFD_DRAW_TO_WINDOW | //
PFD_SUPPORT_OPENGL | // OpenGL
PFD_DOUBLEBUFFER, //
PFD_TYPE_RGBA, // RGBA
bits, //
0, 0, 0, 0, 0, 0, //
0, // Alpha
0, // Shift Bit
0, //
0, 0, 0, 0, //
16, // 16 Z- ( )
0, //
0, //
PFD_MAIN_PLANE, //
0, //
0, 0, 0 //
};
if (!(hDC=GetDC(hWnd))) // ?
{
KillGLWindow(); //
MessageBox(NULL," "," ",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // FALSE
}
if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd))) // Windows ?
{
KillGLWindow(); //
MessageBox(NULL," "," ",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // FALSE
}
if(!SetPixelFormat(hDC,PixelFormat,&pfd)) // ?
{
KillGLWindow(); //
MessageBox(NULL," "," ",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // FALSE
}
if (!(hRC=wglCreateContext(hDC))) // OpenGL ?
{
KillGLWindow(); //
MessageBox(NULL," OpenGL "," ",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // FALSE
}
if(!wglMakeCurrent(hDC,hRC)) //
{
KillGLWindow(); //
MessageBox(NULL," OpenGL "," ",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // FALSE
}
ShowWindow(hWnd,SW_SHOW); //
SetForegroundWindow(hWnd); //
SetFocus(hWnd); //
ReSizeGLScene(width, height); // GL
if (!InitGL()) // GL
{
KillGLWindow(); //
MessageBox(NULL," "," ",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // FALSE
}
return TRUE; //
}
LRESULT CALLBACK WndProc( HWND hWnd, //
UINT uMsg, //
WPARAM wParam, //
LPARAM lParam) //
{
switch (uMsg) // Windows
{
case WM_ACTIVATE: //
{
if (!HIWORD(wParam)) //
{
active=TRUE; //
}
else
{
active=FALSE; //
}
return 0; //
}
case WM_SYSCOMMAND: //
{
switch (wParam) //
{
case SC_SCREENSAVE: // ?
case SC_MONITORPOWER: // ?
return 0; //
}
break; //
}
case WM_CLOSE: // Close ?
{
PostQuitMessage(0); //
return 0; //
}
case WM_KEYDOWN: // ?
{
keys[wParam] = TRUE; // , TRUE
return 0; //
}
case WM_KEYUP: // ?
{
keys[wParam] = FALSE; // , FALSE
return 0; //
}
case WM_SIZE: // OpenGL
{
ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width,HiWord=Height
return 0; //
}
}
// DefWindowProc 。
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, //
HINSTANCE hPrevInstance, //
LPSTR lpCmdLine, //
int nCmdShow) //
{
MSG msg; // Windowsx
BOOL done=FALSE; // Bool
//
fullscreen=FALSE; // FALSE
int scrWidth, scrHeight;
RECT rect;
scrWidth = GetSystemMetrics(SM_CXSCREEN);
scrHeight = GetSystemMetrics(SM_CYSCREEN);
GetWindowRect(hWnd, &rect);
SetWindowPos(hWnd, HWND_TOPMOST, (scrWidth - rect.right) / 2, (scrHeight - rect.bottom) / 2, rect.right - rect.left, rect.bottom - rect.top, SWP_SHOWWINDOW);
BOOL Res = CreateGLWindow(" ", 640, 480, 16, fullscreen);
if (Res)
{
GetWindowRect(hWnd, &rect);
SetWindowPos(hWnd, HWND_TOPMOST, (scrWidth - rect.right) / 2, (scrHeight - rect.bottom) / 2, rect.right - rect.left, rect.bottom - rect.top, SWP_SHOWWINDOW);
}
else
{
return 0; // ,
}
while(!done) // done=TRUE
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // ?
{
if (msg.message==WM_QUIT) // ?
{
done=TRUE; // , done=TRUE
}
else // ,
{
TranslateMessage(&msg); //
DispatchMessage(&msg); //
}
}
else //
{
// 。 ESC DrawGLScene()
if (active) // ?
{
if (keys[VK_ESCAPE]) // ESC ?
{
done=TRUE; // ESC
}
else // ,
{
DrawGLScene(); //
SwapBuffers(hDC); // ( )
}
}
if (keys[VK_F1]) // F1 ?
{
keys[VK_F1]=FALSE; // , Key FALSE
KillGLWindow(); //
fullscreen=!fullscreen; // /
// OpenGL
/*********************************** ***********************************************************************************/
if (!CreateGLWindow(" ",640,480,16,fullscreen))
/********************************************************************************************************************************/
{
return 0; // ,
}
}
}
}
//
KillGLWindow(); //
return (msg.wParam); //
}
프로젝트 프레젠테이션:프로젝트 전체 다운로드 주소:
링크:https://pan.baidu.com/s/1i4FmtqquRUY31lBDw1dEyQ추출 코드:xrcj
C++Opengl 그래 픽 색상 기능 에 대한 소스 코드 다운로드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C+Opengl 그래 픽 색상 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio에서 파일 폴더 구분 (포함 경로 설정)Visual Studio에서 c, cpp, h, hpp 파일을 폴더로 나누고 싶었습니까? 어쩌면 대부분의 사람들이 있다고 생각합니다. 처음에 파일이 만들어지는 장소는 프로젝트 파일 등과 같은 장소에 있기 때문에 파일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.