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

资源简介

本例使用了opengl的基础知识,实现了星星公转,自转,闪烁的效果。

资源截图

代码片段和文件信息

// OpenGLWindow.cpp : 定义应用程序的入口点。
//

#include “stdafx.h“
#include “OpenGLWindow.h“
#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

GLuint texture[1];//存储纹理

BOOL light;//光源开关
BOOL lp;//L键是否按下
BOOL fp;//F键是否按下

bool blend;//是否进行色彩混合
bool bp;//B键按下了吗?

//载入一个位图,并用它创建三种不同的纹理。使用glaux辅助库来载入位图,因此在编译时您应该确认是否包含了glaux库。glaux是OpenGL辅助库,根据OpenGL的跨平台特性,所有平台上的代码都应通用。但辅助库不是正式的OpenGL标准库,没有出现在所有的平台上。
GLuint filter;//滤波类型
GLuint texture3[3];//三种纹理的存储空间

BOOL twinkle;//闪烁的效果是否启用
BOOL tp;//T键是否按下
int const num = 2;//常量,屏幕上绘制的星星数量。

typedef struct //星星结构体
{
int r g b;//星星颜色
GLfloat dist;//星星距离中心的距离
GLfloat angle;//当前星星所处的角度,以屏幕中心为原点的任意360度中的一个角度
} star;
star stars[num];
GLfloat zoom = -15.0f;//星星距离观察者的距离
GLfloat tilt = 90.0f;//星星的倾角
GLfloat spin;//闪烁星星的自转
GLuint loop;//全局loop变量

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/Star.bmp“))
{
Status = TRUE;

//现在使用中 TextureImage[0] 的数据创建纹理
glGenTextures(1 &texture[0]);//告诉OpenGL我们想生成一个纹理:创建纹理
glBindTexture(GL_TEXTURE_2D texture[0]);//告诉OpenGL将纹理 texture[0] 绑定到纹理目标上。2D纹理只有高度(在 Y 轴上)和宽度(在 X 轴上)。主函数将纹理指派给纹理数据,我们创建的纹理将存储在 &texture[0] 的 指向的内存区域

//创建真正的纹理
//下面一行告诉OpenGL此纹理是一个2D纹理 ( GL_TEXTURE_2D )。参数“0”代表图像的详细程度,通常就由它为零去了。参数三是数据的成分数。因为图像是由红色数据,绿色数据,蓝色数据三种组分组成。 TextureImage[0]->sizeX 是纹理的宽度。如果您知道宽度,您可以在这里填入,但计算机可以很容易的为您指出此值。 TextureImage[0]->sizey 是纹理的高度。参数零是边框的值,一般就是“0”。 GL_RGB 告诉OpenGL图像数据由红、绿、蓝三色数据组成。GL_UNSIGNED_BYTE 意味着组成图像的数据是无符号字节类型的。最后... TextureImage[0]->data 告诉OpenGL纹理数据的来源。此例中指向存放在 TextureImage[0] 记录中的数据。
glTexImage2D(GL_TEXTURE_2D 0 3 TextureImage[0]->sizeX TextureImage[0]->sizeY 0 GL_RGB GL_UNSIGNED_BYTE TextureIma

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      82944  2015-06-04 10:38  OpenGLWindowMovePic\Debug\OpenGLWindow.exe

     文件     606156  2015-06-04 10:38  OpenGLWindowMovePic\Debug\OpenGLWindow.ilk

     文件    1313792  2015-06-04 10:38  OpenGLWindowMovePic\Debug\OpenGLWindow.pdb

     文件   21561344  2015-06-02 10:35  OpenGLWindowMovePic\ipch\openglwindow-95a38eaa\openglwindow-c55ee149.ipch

     文件   21561344  2015-06-01 17:22  OpenGLWindowMovePic\ipch\openglwindow-c62ecc37\openglwindow-c55ee149.ipch

     文件     196662  2015-05-27 22:17  OpenGLWindowMovePic\OpenGLWindow\Data\CooperOpengl.bmp

     文件      49206  2015-06-02 16:47  OpenGLWindowMovePic\OpenGLWindow\Data\Star.bmp

     文件       1525  2015-06-01 17:57  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.Build.CppClean.log

     文件       1802  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.log

     文件      49993  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.obj

     文件    6094848  2015-06-02 10:45  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.pch

     文件       6824  2015-06-02 10:45  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.res

     文件       3386  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\cl.command.1.tlog

     文件      28948  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\CL.read.1.tlog

     文件       2772  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\CL.write.1.tlog

     文件       3970  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\link.command.1.tlog

     文件       7598  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\link.read.1.tlog

     文件       1798  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\link.write.1.tlog

     文件        182  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\OpenGLWindow.lastbuildstate

     文件       1234  2015-06-02 10:45  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\rc.command.1.tlog

     文件       5644  2015-06-02 10:45  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\rc.read.1.tlog

     文件        638  2015-06-02 10:45  OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\rc.write.1.tlog

     文件     150220  2015-06-02 10:45  OpenGLWindowMovePic\OpenGLWindow\Debug\stdafx.obj

     文件     445440  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\vc120.idb

     文件     512000  2015-06-04 10:38  OpenGLWindowMovePic\OpenGLWindow\Debug\vc120.pdb

     文件      28312  2015-06-04 10:39  OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.cpp

     文件         37  2015-05-19 10:10  OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.h

     文件       2998  2013-07-22 01:18  OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.ico

     文件       6616  2015-05-18 21:45  OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.rc

     文件       5064  2015-05-30 20:51  OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.vcxproj

............此处省略23个文件信息

评论

共有 条评论