以前刚学OpenGL的时候,创建的是控制台工程,运行时有两个窗口,一个用来显示图形,另一个则是多余的控制台,看起来很别扭。我当时在想,既然控制台程序已经提供了窗口,为什么还要自己创建一个呢,难道控制台窗口只能显示冰冷的字符吗?后来自己学会搭建OpenGL渲染环境,才知道其中的奥秘。下面通过一段简短的说明和程序代码来说明如何在控制台窗口上绘图。OpenGL渲染环境的搭建,要注意的事项,跟我另一篇博客很相似,可以参考这篇博客:使用OpenGL在电脑屏幕上绘图。废话不多说,直接上代码:
#include<Windows.h>
#include<gl\GL.h>
int main()
{
PIXELFORMATDESCRIPTOR pfd;
pfd.nSize = 40;
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 0;
pfd.cRedBits = 0;
pfd.cRedShift = 0;
pfd.cGreenBits = 0;
pfd.cGreenShift = 0;
pfd.cBlueBits = 0;
pfd.cBlueShift = 0;
pfd.cAlphaBits = 0;
pfd.cAlphaShift = 0;
pfd.cAccumBits = 0;
pfd.cAccumRedBits = 0;
pfd.cAccumGreenBits = 0;
pfd.cAccumBlueBits = 0;
pfd.cAccumAlphaBits = 0;
pfd.cDepthBits = 0;
pfd.cStencilBits = 0;
pfd.cAuxBuffers = 0;
pfd.iLayerType = PFD_MAIN_PLANE;
pfd.bReserved = 0;
pfd.dwLayerMask = 0;
pfd.dwVisibleMask = 0;
pfd.dwDamageMask = 0;
//获取当前线程的控制台窗口句柄
HWND hwnd= GetConsoleWindow();
//获取控制台窗口的设备环境句柄
HDC hdc = GetDC(hwnd);
//选择适合的像素格式
int pixelFormat = ChoosePixelFormat(hdc, &pfd);
//设置像素格式
SetPixelFormat(hdc, pixelFormat, &pfd);
//创建OpenGL渲染环境
HGLRC hglrc = wglCreateContext(hdc);
//为当前线程指定设备环境和渲染环境
wglMakeCurrent(hdc, hglrc);
//glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_TRIANGLES);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, -0.5f);
glEnd();
glFlush();
SwapBuffers(hdc);
return 0;
}