资源简介
本例使用了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\li
文件 7598 2015-06-04 10:38 OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\li
文件 1798 2015-06-04 10:38 OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\li
文件 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个文件信息
- 上一篇:Visualstate状态机基础教程
- 下一篇:Opengl实现旗帜飘扬效果
相关资源
- 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 水波效果 源代码
评论
共有 条评论