/*
* 下面这一段是codeblocks中利用OpenGL编写图形的接口程序,具体过程就是打开codeblocks,
*新建项目,选择OpenGL project,点击出发,然后点击下一步,随便输入一个项目标题,
*进入OpenGL的编辑空间,然后用下面的代码替换里面的源代码,就可以进行编写啦。其中初学者不需要到其他的
*任何代码,只要修改中间要加的部分就行啦。具体就去找OpenGL的教程吧。nehe的比较好。
*对于缺少的头文件可以去网上去下载,直接放在include\GL\下就行。也可以跟我要。
*O(∩_∩)O哈哈~
*/
#include <windows.h> // Windows的头文件
#include <gl\gl.h> // OpenGL32库的头文件
#include <gl\glu.h> // GLu32库的头文件
#include <gl\glaux.h> // GLaux库的头文件
#include <stdio.h> // 标准输入/输出库的头文件 ( 新增 )
HDC hDC=NULL; // 私有GDI设备描述表
HGLRC hRC=NULL; // 永久着色描述表
HWND hWnd=NULL; // 保存我们的窗口句柄
HINSTANCE hInstance; // 保存程序的实例
BOOL keys[256]; // 用于键盘例程的数组
BOOL active=TRUE; // 窗口的活动标志,缺省为TRUE
BOOL fullscreen=TRUE; // 全屏标志缺省设定成全屏模式
///////////////////////////**************************/////////////////////////////////
////////**********************************************************************////////
GLfloat rtri; // 用于三角形的角度 ( 新增 )
GLfloat rquad; // 用于四边形的角度 ( 新增 )
GLfloat xrot; // X 旋转量 ( 新增 )
GLfloat yrot; // Y 旋转量 ( 新增 )
GLfloat zrot; // Z 旋转量 ( 新增 )
GLuint texture[1]; // 存储一个纹理 ( 新增 )
/////////////////************************//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // WndProc的定义
GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // 重置并初始化GL窗口大小
{
if (height==0) // 防止被零除
{
height=1; // 将Height设为1
}
glViewport(0,0,width,height); // 重置当前的视口(Viewport)
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(0.0f, 0.0f, 0.0f, 0.5f); // 黑色背景
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(); // 重置视口
//调用glLoadIdentity()之后,您实际上讲当前点移到了屏幕中心,X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。
//OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。中心左面的坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。
//移入屏幕深处是负值,移出屏幕则是正值。
////////////*********************************************************************/////////////////////
////////////////////////////**************************////////////////////////////////////////////////
//**************************************************************************//
//***********编写的图形代码都在这,对于初学者,上下暂时都还不用动***********//
//**************************************************************************//
glTranslatef(-3.0f,-0.2f,-8.0f); // 左移 1.5 单位,并移入屏幕 6.0
glRotatef(rtri,0.0f,1.0f,0.0f); // 绕Y轴旋转三角形 ( 新增 )
glBegin(GL_TRIANGLES); // 绘制三角形
glColor3f(0.8f,0.0f,0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f); // 上顶点
glColor3f(0.0f,0.8f,0.0f);
glVertex3f(-1.0f,-1.0f, 1.0f); // 左下
glColor3f(0.0f,0.0f,0.8f);
glVertex3f( 1.0f,-1.0f, 1.0f); // 右下
glColor3f(0.8f,0.0f,0.0f);
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,0.0f,0.8f);
glVertex3f(1.0f,-1.0f,1.0f);
glColor3f(0.0f,0.8f,0.0f);
glVertex3f(0.0f,-1.0f,-1.0f);
glColor3f(0.8f,0.0f,0.0f);
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,0.8f,0.0f);
glVertex3f(0.0f,-1.0f,-1.0f);
glColor3f(0.0f,0.8f,0.0f);
glVertex3f(-1.0f,-1.0f, 1.0f); // 左下
glEnd(); // 三角形绘制结束
glLoadIdentity(); // 重置模型观察矩阵
glTranslatef(0.2f,0.3f,-9.1f);
glRotatef(xrot,1.0f,0.0f,0.0f); // 绕X轴旋转
glRotatef(yrot,0.0f,1.0f,0.0f); // 绕Y轴旋转
glRotatef(zrot,0.0f,0.0f,1.0f); // 绕Z轴旋转
glBegin(GL_QUADS); // 绘制正方形
//前表面
glColor3f(0.0f,0.8f,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.8f,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(0.0f,0.8f,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.8f,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(0.0f,0.0f,0.8f);
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,0.8f);
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(); // 正方形绘制结束
glLoadIdentity();
glTranslatef(2.2f,-1.0f,-7.0f);
glRotatef(rtri,-1.0f,1.0f,1.0f);
glBegin(GL_POLYGON);
glVertex3f(-1.0,0.0f,0.0f);
glColor3f(0.0f,0.4f,0.2f);
glVertex3f(-1.0f,-1.0f,0.0f);
glColor3f(0.9f,0.1f,0.0f);
glVertex3f(-0.3f,-1.4f,0.0f);
glColor3f(0.3f,0.6f,0.0f);
glVertex3f(1.0f,-0.4f,0.0f);
glColor3f(1.0f,0.9f,0.9f);
glVertex3f(1.0f,0.8f,0.0f);
glEnd();
rtri+=3.2f; // 增加三角形的旋转变量(新增)
xrot+=1.6f; // X 轴旋转
yrot+=1.4f; // Y 轴旋转
zrot+=2.2f; // Z 轴旋转
//**************************************************************************//
//***********编写的图形代码都在这,对于初学者,上下暂时都还不用动***********//
//**************************************************************************//
//////////////////////////////////****************************//////////////////////////////////////
//////////////******************************************************************//////////////////
return TRUE; // 一切 OK
}
GLvoid KillGLWindow(GLvoid) //正常销毁窗口
{
if (fullscreen) // 我们处于全屏模式吗?
{
ChangeDisplaySettings(NULL,0); // 是的话,切换回桌面
ShowCursor(TRUE); // 显示鼠标指针
}
if (hRC) // 我们拥有着色描述表吗?
{
if (!wglMakeCurrent(NULL,NULL)) // 我们能否释放DC和RC描述表?
{
MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
if (!wglDeleteContext(hRC)) // 我们能否删除RC?
{
MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
hRC=NULL; // 将RC设为 NULL
}
if (hDC && !ReleaseDC(hWnd,hDC)) // 我们能否释放 DC?
{
MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
hDC=NULL; // 将 DC 设为 NULL
}
if (hWnd && !DestroyWindow(hWnd)) // 能否销毁窗口?
{
MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
hWnd=NULL; // 将 hWnd 设为 NULL
}
if (!UnregisterClass("OpenGL",hInstance)) // 能否注销类?
{
MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
opengl.rar_codeblocks_codeblocks open_codeblocks opengl_opengl
版权申诉
159 浏览量
2022-09-23
09:07:52
上传
评论
收藏 6KB RAR 举报
刘良运
- 粉丝: 66
- 资源: 1万+
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0