资源简介
opengl实现旗帜飘扬的效果,通过纹理映射和位置切换来实现。
代码片段和文件信息
// OpenGLWindow.cpp : 定义应用程序的入口点。
//
#include “stdafx.h“
#include “OpenGLWindow.h“
#include //标准输入输出库头文件
#include
#include
#define MAX_LOADSTRING 100
// 全局变量:
HINSTANCE hInst; // 当前实例
TCHAR sztitle[MAX_LOADSTRING]; // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE int);
LRESULT CALLBACK WndProc(HWND UINT WPARAM LPARAM);
INT_PTR CALLBACK About(HWND UINT WPARAM LPARAM);
//user varible
HGLRC hRC = NULL;//窗口着色描述表句柄
HDC hDC = NULL;//opengl渲染设备描述表句柄
HWND hWnd = NULL;//保存我们的窗口句柄
HINSTANCE hInstance;//保存我们程序的实例
bool keys[256];//保存键盘按键的数组
bool active = true;//窗口的活动标志,缺省为true
bool fullscreen = true;//全屏标志,缺省为true
GLfloat rtri;//用于三角形旋转
GLfloat rquad;//用户四边形的旋转
GLfloat xrot;//x旋转量
GLfloat yrot;//y旋转量
GLfloat zrot;//z旋转量
GLuint texture[1];//存储纹理
BOOL light;//光源开关
BOOL lp;//L键是否按下
BOOL fp;//F键是否按下
GLfloat xxrot;//x轴旋转
GLfloat yyrot;//y轴旋转
GLfloat xspeed;//x轴旋转速度
GLfloat yspeed;//y轴旋转速度
GLfloat z = -5.0f;//深入屏幕距离
bool blend;//是否进行色彩混合
bool bp;//B键按下了吗?
//使用points数组来存放网格各顶点独立的xyz坐标。网格由45×45点形成,也就是由44×44个小方格子依次组成。wiggle_count用来指定纹理波浪的运动速度,每8帧一次看起来不错,变量hold将存放一个用来对旗形波浪进行光滑的浮点数。
float points[45][45][3];//网格顶点数据
int wiggle_count = 0;//指定旗形波浪的运动速度
GLfloat hold;//临时变量
//接着设置用来创建光源的数组。我们将使用两种不同的光。第一种称为环境光。环境光来自于四面八方。所有场景中的对象都处于环境光的照射中。第二种类型的光源叫做漫射光。漫射光由特定的光源产生,并在您的场景中的对象表面上产生反射。处于漫射光直接照射下的任何对象表面都变得很亮,而几乎未被照射到的区域就显得要暗一些。这样在我们所创建的木板箱的棱边上就会产生的很不错的阴影效果。
//创建光源的过程和颜色的创建完全一致。前三个参数分别是RGB三色分量,最后一个是alpha通道参数。
//因此,下面的代码我们得到的是半亮(0.5f)的白色环境光。如果没有环境光,未被漫射光照到的地方会变得十分黑暗。
GLfloat LightAmbinent[] = { 0.5f 0.5f 0.5f 1.0f };//环境光参数
//生成最亮的漫射光。所有的参数值都取成最大值1.0f。它将照在我们木板箱的前面,看起来挺好。
GLfloat LightDiffuse[] = { 1.0f 1.0f 1.0f 1.0f };//漫反射光参数
//保存光源的位置。前三个参数和glTranslate中的一样。依次分别是XYZ轴上的位移。最后一个参数取为1.0f。这将告诉OpenGL这里指定的坐标就是光源的位置
GLfloat LightPosition[] = { 0.0f 0.0f 2.0f 1.0f };//光源位置
//载入一个位图,并用它创建三种不同的纹理。使用glaux辅助库来载入位图,因此在编译时您应该确认是否包含了glaux库。glaux是OpenGL辅助库,根据OpenGL的跨平台特性,所有平台上的代码都应通用。但辅助库不是正式的OpenGL标准库,没有出现在所有的平台上。
GLuint filter;//滤波类型
GLuint texture3[3];//三种纹理的存储空间
AUX_RGBImageRec * LoadBMP(char* Filename)//载入图像位图
{
FILE *File = NULL;//文件句柄
if (!Filename)//确保文件名提供
{
return NULL;
}
File = fopen(Filename “r“);//尝试打开文件
if (File)
{
fclose(File);
WCHAR wsztitleName[256];
memset(wsztitleName 0 sizeof(wsztitleName));
int l = MultiByteToWideChar(CP_ACP 0 Filename lstrlenA(Filename) wsztitleName sizeof(wsztitleName) / sizeof(wsztitleName[0]));
return auxDIBImageLoad(wsztitleName);//载入位图并返回指针
}
return NULL;//载入失败
}
//载入位图并转换成纹理
int LoadGLTextures()
{
int Status = FALSE;//状态指示器
AUX_RGBImageRec *TextureImage[1];//创建存储位图的图像记录,记录包含位图的宽度,高度和数据
memset(TextureImage 0 sizeof(void*)* 1);//清除图像记录,确保为空
//载入位图
if (TextureImage[0] = LoadBMP(“Data/Flag.bmp“))
{
Status = TRUE;
//现在使用中
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 82432 2015-06-04 12:18 OpenGLWindowFlag\Debug\OpenGLWindow.exe
文件 608232 2015-06-04 12:18 OpenGLWindowFlag\Debug\OpenGLWindow.ilk
文件 1281024 2015-06-04 12:18 OpenGLWindowFlag\Debug\OpenGLWindow.pdb
文件 21561344 2015-06-04 11:14 OpenGLWindowFlag\ipch\openglwindow-2cfd7f31\openglwindow-c55ee149.ipch
文件 21561344 2015-06-01 17:22 OpenGLWindowFlag\ipch\openglwindow-c62ecc37\openglwindow-c55ee149.ipch
文件 196662 2015-05-27 22:17 OpenGLWindowFlag\OpenGLWindow\Data\CooperOpengl.bmp
文件 98358 2015-06-04 12:11 OpenGLWindowFlag\OpenGLWindow\Data\Flag.bmp
文件 1525 2015-06-01 17:57 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.Build.CppClean.log
文件 1784 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.log
文件 49809 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.obj
文件 6094848 2015-06-04 12:07 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.pch
文件 6824 2015-06-04 12:07 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.res
文件 3362 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\cl.command.1.tlog
文件 28902 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\CL.read.1.tlog
文件 2718 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\CL.write.1.tlog
文件 3934 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\li
文件 7562 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\li
文件 1762 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\li
文件 179 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\OpenGLWindow.lastbuildstate
文件 1222 2015-06-04 12:07 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\rc.command.1.tlog
文件 5614 2015-06-04 12:07 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\rc.read.1.tlog
文件 626 2015-06-04 12:07 OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\rc.write.1.tlog
文件 150181 2015-06-04 12:07 OpenGLWindowFlag\OpenGLWindow\Debug\stdafx.obj
文件 445440 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\vc120.idb
文件 512000 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\Debug\vc120.pdb
文件 29919 2015-06-04 12:18 OpenGLWindowFlag\OpenGLWindow\OpenGLWindow.cpp
文件 37 2015-05-19 10:10 OpenGLWindowFlag\OpenGLWindow\OpenGLWindow.h
文件 2998 2013-07-22 01:18 OpenGLWindowFlag\OpenGLWindow\OpenGLWindow.ico
文件 6616 2015-05-18 21:45 OpenGLWindowFlag\OpenGLWindow\OpenGLWindow.rc
文件 5064 2015-05-30 20:51 OpenGLWindowFlag\OpenGLWindow\OpenGLWindow.vcxproj
............此处省略23个文件信息
- 上一篇:OpenGL星星公转自转
- 下一篇:flash获奖作品
相关资源
- OpenGL星星公转自转
- OpenGL显示三维点云图像
- opengl绘制太阳、地球、月球
- Qt通过控件控制立方体旋转
- OpenGL编程指南 第九版英文版 OpenGL P
- 三维游戏设计师宝典(经典!)——学
- OpenGL课程设计
- OpenGL飘动的雏菊画布
- OpenGL-篮球场.rar
- opengl显示兔子程序
- learnopengl-cn-2018年5月更新.pdf
- OpenGL超级宝典完整源码(第五版)
- OpenGL游戏程序设计+源码
- opengl编程指南第七版
- 基于OpenGL实现的各种粒子特效
- 3D模型obj文件导入渲染光照贴图
- OpenGL配置库与教程实现一个.
- 基于特征点匹配的三维重建OpenCV+Ope
- OpenGL编程指南原书第8版 中文PDF 高清
- glui批生成文件
- 利用opengl 读取建筑物模型 obj文件并加
- 学OpenGL编3D游戏含源代码
- openGL正方体贴图
- 用opengl写的一个保龄球游戏
- OpenGL完成对OFF文件的读取和使三维模
- OpenGL实验八犹他茶壶光照、阴影、纹
- opengl绘制花瓶演示
- 自己写的读取任意格式点云并读取的
- opengl加载off文件
- OPENGL 水波效果 源代码
评论
共有 条评论