opengl 画点、画线

该博客介绍了使用OpenGL进行3D图形编程的基础步骤,包括设置投影和模型视口矩阵,初始化颜色和点大小,以及绘制3D点。通过创建窗口、设置像素格式和OpenGL上下文,实现了一个简单的OpenGL渲染程序,展示了如何在场景中绘制多个点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.设置投影矩阵

	glMatrixMode(GL_PROJECTION); //设置投影矩阵  tell the gpu processer that i would select the projection matrix
	gluPerspective(50.0f,800.0f/600.0f,0.1f,1000.0f); //set some values to projection matrix

2.设置模型视口矩阵

glMatrixMode(GL_MODELVIEW);  //设置模型视口矩阵 tell   model view matrix
	glLoadIdentity();

3.设置颜色,画点,设置点的位置

glColor4ub(255,255,255,255); //setCurremt color : white
		
glPointSize(20.0f); //set up point size
glBegin(GL_POINTS); //start to draw something
glVertex3f(0.0f,0.0f,-0.5f);  //set up point position
glEnd();

4.绘制多个点

glVertex3f(0.0f,0.0f,-10.0f);  //set up point position	
glVertex3f(3.0f, 0.0f, -10.0f);  //set up point position
glVertex3f(-5.0f, 0.0f, -10.0f);  //set up point position

5.绘制一条线

//draw scene
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
//glColor4ub(255,255,255,255); //setCurremt color : white
		
glLineWidth(4.0f); //改变线的宽度
//glBegin(GL_LINES); //start to draw something (两点直线)
//glBegin(GL_LINE_LOOP); //start to draw something (连接所有点)
glBegin(GL_LINE_STRIP); //start to draw something (首尾相接)
//两个点一组成一条直线
glColor4ub(255, 0, 0, 255);
glVertex3f(0.0f,0.0f,-10.0f);  //set up point position
glColor4ub(0, 255, 0, 255);
glVertex3f(-5.0f, 0.0f, -10.0f);  //set up point position
glColor4ub(0, 0, 255, 255);
glVertex3f(-5.0f, 3.0f, -10.0f);  //set up point position
glEnd();

完整代码:

#include <Windows.h>
#include <gl/GL.h>
#include <gl/GLU.h>

#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")

LRESULT CALLBACK GLWindowProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch (msg)
	{
	case WM_CLOSE:
		PostQuitMessage(0);
		break;
	default:
		break;
	}

	return DefWindowProc(hwnd,msg,wParam,lParam);
}


INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,_In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
	//register class
	WNDCLASSEX wndclass;
	wndclass.cbClsExtra = 0;
	wndclass.cbSize = sizeof(WNDCLASSEX);
	wndclass.cbWndExtra = 0;
	wndclass.hbrBackground = NULL;
	wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
	wndclass.hIcon = NULL;
	wndclass.hIconSm = NULL;
	wndclass.hInstance = hInstance;
	wndclass.lpfnWndProc = GLWindowProc;
	wndclass.lpszClassName = L"GLWindow";
	wndclass.lpszMenuName = NULL;
	wndclass.style = CS_VREDRAW | CS_HREDRAW;

	ATOM atom = RegisterClassEx(&wndclass);
	if (!atom)
		return 0;

	//create window
	HWND hwnd = CreateWindowEx(NULL,L"GLWindow",L"OpwnGL Window",WS_OVERLAPPEDWINDOW,100,100,800,600,NULL,NULL,hInstance,NULL);
	
	//create opengl render context
	HDC dc = GetDC(hwnd);
	PIXELFORMATDESCRIPTOR pfd;  //像素格式描述符
	memset(&pfd,0,sizeof(PIXELFORMATDESCRIPTOR));
	pfd.nVersion = 1;
	pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
	pfd.cColorBits = 32;
	pfd.cDepthBits = 24;
	pfd.cStencilBits = 8;
	pfd.iPixelType = PFD_TYPE_RGBA;
	pfd.iLayerType = PFD_MAIN_PLANE;
	pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;

	int pixelFormat = ChoosePixelFormat(dc,&pfd);
	SetPixelFormat(dc,pixelFormat,&pfd);

	HGLRC rc = wglCreateContext(dc);
	wglMakeCurrent(dc,rc);   //set up opengl context complete

	//opengl init
	glMatrixMode(GL_PROJECTION); //设置投影矩阵  tell the gpu processer that i would select the projection matrix
	gluPerspective(50.0f,800.0f/600.0f,0.1f,1000.0f); //set some values to projection matrix
	glMatrixMode(GL_MODELVIEW);  //设置模型视口矩阵 tell   model view matrix
	glLoadIdentity();

	glClearColor(0.1,0.4,0.6,1.0); //set "clear color for background"

	//show Window
	ShowWindow(hwnd,SW_SHOW);
	UpdateWindow(hwnd);

	MSG msg;
	while (true)
	{
		if (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
		{
			if (msg.message == WM_QUIT)
				break;
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		//draw scene
		glClear(GL_COLOR_BUFFER_BIT);
		glColor4ub(255,255,255,255); //setCurremt color : white
		
        //画点
		glPointSize(20.0f); //set up point size
		glBegin(GL_POINTS); //start to draw something
		glVertex3f(0.0f,0.0f,-10.0f);  //set up point position
		glVertex3f(3.0f,0.0f,-10.0f);  //set up point position
		glVertex3f(-3.0f,0.0f,-10.0f);  //set up point position
		glEnd();

        //画线
        glLineWidth(4.0f); //改变线的宽度
		//glBegin(GL_LINES); //start to draw something (两点直线)
		//glBegin(GL_LINE_LOOP); //start to draw something (连接所有点)
		glBegin(GL_LINE_STRIP); //start to draw something (首尾相接)
		//两个点一组成一条直线
		glColor4ub(255, 0, 0, 255);
		glVertex3f(0.0f,0.0f,-10.0f);  //set up point position
		glColor4ub(0, 255, 0, 255);
		glVertex3f(-5.0f, 0.0f, -10.0f);  //set up point position
		glColor4ub(0, 0, 255, 255);
		glVertex3f(-5.0f, 3.0f, -10.0f);  //set up point position
		glEnd();

		//present scene
		SwapBuffers(dc);
	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值