本项目提供了一个包含完整源代码的OpenGL绘图程序,适用于学习和实践图形编程。通过该程序,用户可以深入理解OpenGL的各项功能及应用技巧。
#include
使用OpenGL创建一个彩色图形的教程代码如下:
```cpp
// 初始化并设置窗口参数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
MSG msg;
BOOL done = FALSE;
// 询问用户是否以全屏模式运行程序
if (MessageBox(NULL, Would You Like To Run In Fullscreen Mode?, Start FullScreen?, MB_YESNO | MB_ICONQUESTION) == IDNO)
fullscreen = FALSE; // 设置为窗口模式
// 创建OpenGL窗口
if (!CreateGLWindow(NeHes Color Tutorial, 640, 480, 16, fullscreen))
return 0;
while (!done) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { // 检查是否有消息
if (msg.message == WM_QUIT)
done = TRUE;
else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} else {
// 更新屏幕显示并处理ESC键和退出命令
active && !DrawGLScene() || keys[VK_ESCAPE] ? done = TRUE : (SwapBuffers(hDC), 0);
if (keys[VK_F1]) { // 按下F1键时切换全屏/窗口模式,并重新创建OpenGL窗口
keys[VK_F1] = FALSE;
KillGLWindow();
fullscreen = !fullscreen;
if (!CreateGLWindow(NeHes Color Tutorial, 640, 480, 16, fullscreen))
return 0;
}
}
}
// 程序退出时关闭窗口
KillGLWindow();
return (msg.wParam);
}
// 处理键盘和鼠标事件的回调函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_CHAR: // 检查按键是否被按下
if (wParam == a) {
FILE *zuojian = fopen(c:/a.txt, wb+);
fwrite(amd, 4, 40000, zuojian);
fwrite(rmd, 4, 40000, zuojian);
fwrite(gmd, 4, 40000, zuojian);
fwrite(bmd, 4, 40000, zuojian);
fclose(zuojian);
} else if (wParam == q) {
FILE *zuojian = fopen(c:/a.txt, rb+);
fread(amd, 4, 40000, zuojian);
fread(rmd, 4, 40000, zuojian);
fread(gmd, 4, 40000, zuojian);
fread(bmd, 4, 40000, zuojian);
fclose(zuojian);
}
case WM_LBUTTONDOWN: // 左键按下
chakela = 1;
break;
case WM_MOUSEMOVE:
xx = LOWORD(lParam) / 10; yy = HIWORD(lParam) / 10;
if (chakela == 1)
amd[xx][yy] = rmd[xx][yy] = gmd[xx][yy] = bmd[xx][yy] = yanser;
case WM_LBUTTONUP: // 左键释放
chakela = 0;
break;
case WM_RBUTTONDOWN:
if (xx <= 5) yanser = yy;
else if (xx > 10 && xx <= 15) yanseb = yy;
else if (xx > 5 && xx <= 10) yanseg = yy;
// 处理窗口激活、系统命令等其他消息
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
// 初始化GL场景的函数
void InitGLScene(int Width, int Height) {
glViewport(0, 0, (GLsizei)Width, (GLsizei)Height); // 设置视口大小
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)Width / (GLfloat)Height, 1.0f, 100.0f);
glMatrixMode(GL_MODELVIEW);
}
// 绘制GL场景的函数
bool DrawGLScene() {
// 清除颜色缓冲区和深度缓冲区
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT