⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 旋转四面体和六面体.txt

📁 在VC下实现简单的3D图形绘制
💻 TXT
📖 第 1 页 / 共 2 页
字号:
		// 返回 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:				// 中断系统命令Intercept System Commands
		{
			switch (wParam) 			// 检查系统调用Check System Calls
			{
				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 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, 1.0f);
	// 三角形的左下顶点 (前侧面)
	glColor3f(0.0f,0.0f,1.0f);
	// 蓝色
	glVertex3f( 1.0f,-1.0f, 1.0f);
	// 三角形的右下顶点 (前侧面)
	glColor3f(1.0f,0.0f,0.0f);
	// 红色
	glVertex3f( 0.0f, 1.0f, 0.0f);
	// 三角形的上顶点 (右侧面)
	glColor3f(0.0f,0.0f,1.0f);
	// 蓝色
	glVertex3f( 1.0f,-1.0f, 1.0f);
	// 三角形的左下顶点 (右侧面)
	glColor3f(0.0f,1.0f,0.0f);
	// 绿色
	glVertex3f( 1.0f,-1.0f, -1.0f);
	// 三角形的右下顶点 (右侧面)
	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, -1.0f);
	// 三角形的左下顶点 (后侧面)
	glColor3f(0.0f,0.0f,1.0f);
	// 蓝色
	glVertex3f(-1.0f,-1.0f, -1.0f);
	// 三角形的右下顶点 (后侧面)
	glColor3f(1.0f,0.0f,0.0f);
	// 红色
	glVertex3f( 0.0f, 1.0f, 0.0f);
	// 三角形的上顶点 (左侧面)
	glColor3f(0.0f,0.0f,1.0f);
	// 蓝色
	glVertex3f(-1.0f,-1.0f,-1.0f);
	// 三角形的左下顶点 (左侧面)
	glColor3f(0.0f,1.0f,0.0f);
	// 绿色
	glVertex3f(-1.0f,-1.0f, 1.0f);
	// 三角形的右下顶点 (左侧面)
	glEnd();
	//金字塔绘制结束
	glLoadIdentity();
	glTranslatef(1.5f,0.0f,-7.0f);
	// 先右移再移入屏幕

	glRotatef(rquad,1.0f,1.0f,1.0f);
	// 在XYZ轴上旋转立方体

	glBegin(GL_QUADS);
	// 开始绘制立方体
	glColor3f(0.0f,1.0f,0.0f);
	// 颜色改为蓝色
	glVertex3f( 1.0f, 1.0f,-1.0f);
	// 四边形的右上顶点 (顶面)
	glVertex3f(-1.0f, 1.0f,-1.0f);
	// 四边形的左上顶点 (顶面)
	glVertex3f(-1.0f, 1.0f, 1.0f);
	// 四边形的左下顶点 (顶面)
	glVertex3f( 1.0f, 1.0f, 1.0f);
	// 四边形的右下顶点 (顶面)
	glColor3f(1.0f,0.5f,0.0f);
	// 颜色改成橙色
	glVertex3f( 1.0f,-1.0f, 1.0f);
	// 四边形的右上顶点(底面)
	glVertex3f(-1.0f,-1.0f, 1.0f);
	// 四边形的左上顶点(底面)
	glVertex3f(-1.0f,-1.0f,-1.0f);
	// 四边形的左下顶点(底面)
	glVertex3f( 1.0f,-1.0f,-1.0f);
	// 四边形的右下顶点(底面)
	glColor3f(1.0f,0.0f,0.0f);
	// 颜色改成红色
	glVertex3f( 1.0f, 1.0f, 1.0f);
	// 四边形的右上顶点(前面)
	glVertex3f(-1.0f, 1.0f, 1.0f);
	// 四边形的左上顶点(前面)
	glVertex3f(-1.0f,-1.0f, 1.0f);
	// 四边形的左下顶点(前面)
	glVertex3f( 1.0f,-1.0f, 1.0f);
	// 四边形的右下顶点(前面)
	glColor3f(1.0f,1.0f,0.0f);
	// 颜色改成黄色
	glVertex3f( 1.0f,-1.0f,-1.0f);
	// 四边形的右上顶点(后面)
	glVertex3f(-1.0f,-1.0f,-1.0f);
	// 四边形的左上顶点(后面)
	glVertex3f(-1.0f, 1.0f,-1.0f);
	// 四边形的左下顶点(后面)
	glVertex3f( 1.0f, 1.0f,-1.0f);
	// 四边形的右下顶点(后面)
	glColor3f(0.0f,0.0f,1.0f);
	// 颜色改成蓝色
	glVertex3f(-1.0f, 1.0f, 1.0f);
	// 四边形的右上顶点(左面)
	glVertex3f(-1.0f, 1.0f,-1.0f);
	// 四边形的左上顶点(左面)
	glVertex3f(-1.0f,-1.0f,-1.0f);
	// 四边形的左下顶点(左面)
	glVertex3f(-1.0f,-1.0f, 1.0f);
	// 四边形的右下顶点(左面)
	glColor3f(1.0f,0.0f,1.0f);
	// 颜色改成紫罗兰色
	glVertex3f( 1.0f, 1.0f,-1.0f);
	// 四边形的右上顶点(右面)
	glVertex3f( 1.0f, 1.0f, 1.0f);
	// 四边形的左上顶点(右面)
	glVertex3f( 1.0f,-1.0f, 1.0f);
	// 四边形的左下顶点(右面)
	glVertex3f( 1.0f,-1.0f,-1.0f);
	// 四边形的右下顶点(右面)
	glEnd();
	// 立方体绘制结束
	rtri+=0.2f;
	// 增加三角形的旋转变量(新增)
	rquad-=0.15f;
	// 减少四边形的旋转变量(新增)
	return TRUE;
	// 继续运行
	if (keys[VK_F1]) //  F1键按下了么?
	{
		keys[VK_F1]=FALSE;
		// 若是,使对应的Key数组中的值为 FALSE
		KillGLWindow();
		// 销毁当前的窗口
		fullscreen=!fullscreen;
		// 切换 全屏 / 窗口 模式
		// 重建 OpenGL 窗口(修改)
		if (!CreateGLWindow("NeHe's First Polygon Tutorial",640,480,16,fullscreen))
		{
			return 0;
			// 如果窗口未能创建,程序退出
		}
	}
}
int WINAPI WinMain( HINSTANCE hInstance,//实例
HINSTANCE hPrevInstance,				// 前一个实例
LPSTR lpCmdLine, 						// 命令行参数
int nCmdShow) 							// 窗口显示状态 
{
	MSG msg;
	// Windowsx消息结构
	BOOL done=FALSE;
	// 用来退出循环的Bool 变量 
	// 提示用户选择运行模式
	if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
	{
		fullscreen=FALSE;
		//窗口模式
	}
	// 创建OpenGL窗口
	if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))
	{
		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("NeHe's OpenGL Framework",640,480,16,fullscreen))
				{
					return 0;
					// 如果窗口未能创建,程序退出
				}
			}
		}
	}
	
	// 关闭程序
	KillGLWindow();
	// 销毁窗口
	return (msg.wParam);
	// 退出程序 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -