C++Opengl回転機能ソースのダウンロードに添付します。
プロジェクト開発環境:
開発言語:C++とIDE:VS 2017、オペレーティングシステムWindowsバージョンwindows SDK 8.1、三方ライブラリ:OpenGL。
プロジェクトの機能:
図形が回転します。
プロジェクトのソースコードは以下の通りです。
プロジェクトの完全なダウンロード先:
リンク:https://pan.baidu.com/s/1qg1PwVd78zE-QgRVMRMVow抽出コード:us 6 g
締め括りをつける
ここでは、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; // ,
/*********************************** ***********************************************************************************/
GLfloat rtri; //
GLfloat rquad; //
/********************************************************************************************************************************/
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
/*********************************** ***********************************************************************************/
glRotatef(rtri, 0.0f, 1.0f, 0.0f); // Y
/********************************************************************************************************************************/
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); //
/*********************************** ***********************************************************************************/
glLoadIdentity(); //
glTranslatef(1.5f, 0.0f, -6.0f); // 1.5 , 6.0
glRotatef(rquad, 1.0f, 0.0f, 0.0f); // X
rtri += 0.2f; //
rquad -= 0.15f; //
/********************************************************************************************************************************/
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
// OpenGL
/*********************************** ***********************************************************************************/
int scrWidth, scrHeight;
RECT rect;
scrWidth = GetSystemMetrics(SM_CXSCREEN);
scrHeight = GetSystemMetrics(SM_CYSCREEN);
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/1qg1PwVd78zE-QgRVMRMVow抽出コード:us 6 g
締め括りをつける
ここでは、C++Openglの回転機能についてのソースコードをダウンロードした記事を紹介します。これに関連して、C++Openglのソースコードの内容については、以前の記事を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。