C++Openglパターンの色機能は、ソースのダウンロードに添付されます。
プロジェクト開発環境:
開発言語:C++とIDE:VS 2017、オペレーティングシステムWindowsバージョンwindows SDK 8.1、三方ライブラリ:OpenGL。
プロジェクトの機能:
色のある図形を作成します。
プロジェクトのソースコードは以下の通りです。
プロジェクトの完全なダウンロード先:
リンク:https://pan.baidu.com/s/1i4FmtqquRUY31lBDw1dEyQ抽出コード:xrcj
ここでは、C++Opengl図形色機能についてソースコードをダウンロードした記事を紹介します。C++Opengl図形色については、以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。
開発言語:C++とIDE:VS 2017、オペレーティングシステムWindowsバージョンwindows SDK 8.1、三方ライブラリ: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図形色については、以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。