OpenGL学习程序,创建一个3D的三角椎体和正方体并旋转

这篇博客介绍了如何使用OpenGL创建3D的旋转三角椎体和正方体。作者分享了学习OpenGL的经验,推荐了两个外国的学习资源,并提供了代码示例,包括窗口初始化、渲染过程以及全屏切换等功能。

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

近日看了两个OpenGL ES的程序,看的云里雾里的,意识到OpenGL ES是OpenGL的一个方面,所以任务学习OpenGL还是很有必要的,发现一个非常不错的学习网站,这里推荐给大家:http://www.owlei.com/DancingWind/Course/Tutorial_01.htm还有一个视频学习的网站,这两个都是外国友人编写和录制的,觉得为什么经过外国人描述出来的东西就会特别容易理解,这一点还是需要学习的。还有要多看原文,不要看中文翻译后的技术书,很多都被翻译的很难了。
#include <windows.h>		// Windows的头文件
#include <gl\gl.h>		// 包含最新的gl.h,glu.h库
#include   <gl\glu.h>
#include	<stdio.h>							// 标准输入/输出库的头文件
#include	<glaux.h>							// GLaux库的头文件

HGLRC           hRC=NULL;							// 窗口着色描述表句柄
HDC             hDC=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的定义

AUX_RGBImageRec *LoadBMP(char *Filename)					// 载入位图图象
{
	FILE *File=NULL;							// 文件句柄
if (!Filename)								// 确保文件名已提供
	{
		return NULL;							// 如果没提供,返回 NULL


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(1.0f, 0.0f, 0.0f, 0.0f);					// 黑色背景
	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, 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);			// 绿色
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值