OpenGL星星公转自转
本例使用了opengl的基础知识,实现了星星公转,自转,闪烁的效果。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 82944 2015-06-04 10:38 OpenGLWindowMovePicDebugOpenGLWindow.exe
文件 606156 2015-06-04 10:38 OpenGLWindowMovePicDebugOpenGLWindow.ilk
文件 1313792 2015-06-04 10:38 OpenGLWindowMovePicDebugOpenGLWindow.pdb
文件 21561344 2015-06-02 10:35 OpenGLWindowMovePicipchopenglwindow-95a38eaaopenglwindow-c55ee149.ipch
文件 21561344 2015-06-01 17:22 OpenGLWindowMovePicipchopenglwindow-c62ecc37openglwindow-c55ee149.ipch
文件 196662 2015-05-27 22:17 OpenGLWindowMovePicOpenGLWindowDataCooperOpengl.bmp
文件 49206 2015-06-02 16:47 OpenGLWindowMovePicOpenGLWindowDataStar.bmp
文件 1525 2015-06-01 17:57 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.Build.CppClean.log
文件 1802 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.log
文件 49993 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.obj
文件 6094848 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.pch
文件 6824 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.res
文件 3386 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogcl.command.1.tlog
文件 28948 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogCL.read.1.tlog
文件 2772 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogCL.write.1.tlog
文件 3970 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tloglink.command.1.tlog
文件 7598 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tloglink.read.1.tlog
文件 1798 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tloglink.write.1.tlog
文件 182 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogOpenGLWindow.lastbuildstate
文件 1234 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlog
c.command.1.tlog
文件 5644 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlog
c.read.1.tlog
文件 638 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlog
c.write.1.tlog
文件 150220 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugstdafx.obj
文件 445440 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugvc120.idb
文件 512000 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugvc120.pdb
文件 28312 2015-06-04 10:39 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.cpp
文件 37 2015-05-19 10:10 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.h
文件 2998 2013-07-22 01:18 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.ico
文件 6616 2015-05-18 21:45 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.rc
文件 5064 2015-05-30 20:51 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.vcxproj
............此处省略23个文件信息
// 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 OpenGLWindowMovePicDebugOpenGLWindow.exe
文件 606156 2015-06-04 10:38 OpenGLWindowMovePicDebugOpenGLWindow.ilk
文件 1313792 2015-06-04 10:38 OpenGLWindowMovePicDebugOpenGLWindow.pdb
文件 21561344 2015-06-02 10:35 OpenGLWindowMovePicipchopenglwindow-95a38eaaopenglwindow-c55ee149.ipch
文件 21561344 2015-06-01 17:22 OpenGLWindowMovePicipchopenglwindow-c62ecc37openglwindow-c55ee149.ipch
文件 196662 2015-05-27 22:17 OpenGLWindowMovePicOpenGLWindowDataCooperOpengl.bmp
文件 49206 2015-06-02 16:47 OpenGLWindowMovePicOpenGLWindowDataStar.bmp
文件 1525 2015-06-01 17:57 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.Build.CppClean.log
文件 1802 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.log
文件 49993 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.obj
文件 6094848 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.pch
文件 6824 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.res
文件 3386 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogcl.command.1.tlog
文件 28948 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogCL.read.1.tlog
文件 2772 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogCL.write.1.tlog
文件 3970 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogli
文件 7598 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogli
文件 1798 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogli
文件 182 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlogOpenGLWindow.lastbuildstate
文件 1234 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlog
c.command.1.tlog
文件 5644 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlog
c.read.1.tlog
文件 638 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugOpenGLWindow.tlog
c.write.1.tlog
文件 150220 2015-06-02 10:45 OpenGLWindowMovePicOpenGLWindowDebugstdafx.obj
文件 445440 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugvc120.idb
文件 512000 2015-06-04 10:38 OpenGLWindowMovePicOpenGLWindowDebugvc120.pdb
文件 28312 2015-06-04 10:39 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.cpp
文件 37 2015-05-19 10:10 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.h
文件 2998 2013-07-22 01:18 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.ico
文件 6616 2015-05-18 21:45 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.rc
文件 5064 2015-05-30 20:51 OpenGLWindowMovePicOpenGLWindowOpenGLWindow.vcxproj
............此处省略23个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)