• 大小: 16.18MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-03
  • 语言: 其他
  • 标签: opengl  

资源简介

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\link.command.1.tlog

     文件       7562  2015-06-04 12:18  OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\link.read.1.tlog

     文件       1762  2015-06-04 12:18  OpenGLWindowFlag\OpenGLWindow\Debug\OpenGLWindow.tlog\link.write.1.tlog

     文件        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个文件信息

评论

共有 条评论