#include <GL/glut.h>
#include <GL/GLAux.h>
#include <windows.h>
#include <iostream>
#include <math.h>
using namespace std;
float points[45][45][3];
int wiggle_count = 0;
GLfloat hold;
HGLRC hRC = NULL;
HDC hDC = NULL;
HWND hWnd = NULL;
HINSTANCE hInstance = NULL;
GLfloat rtri;
GLfloat rquad;
GLfloat xrot;
GLfloat yrot;
GLfloat zrot;
GLuint texture[1];
BOOL keys[256];
BOOL active = TRUE;
BOOL fullscreen = TRUE;
LRESULT CALLBACK WndProc(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File = NULL;
if(!Filename)
{
return NULL;
}
File = fopen(Filename,"r");
if(File)
{
fclose(File);
return auxDIBImageLoad(Filename);
};
return NULL;
}
int LoadGLTextures()
{
int Status = FALSE;
AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void *)*1);
if(TextureImage[0] = LoadBMP("Data/Tim.bmp"))
{
Status = TRUE;
glGenTextures(1,&texture[0]);
glBindTexture(GL_TEXTURE_2D,texture[0]);
glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0
,GL_RGB,GL_UNSIGNED_BYTE,TextureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
};
if(TextureImage[0])
{
if(TextureImage[0]->data)
{
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}
return Status;
};
GLvoid ReSizeGLScene(GLsizei width,GLsizei height)
{
if(height == 0)
{
height = 1;
}
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,
0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int InitGL(GLvoid)
{
if(!LoadGLTextures())
{
return FALSE;
}
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
glPolygonMode(GL_BACK,GL_FILL);
glPolygonMode(GL_FRONT,GL_LINE);
for(int x=0;x<45;x++)
{
for(int y=0;y<45;y++)
{
points[x][y][0]=float((x/5.0f)-4.5f);
points[x][y][1]=float((y/5.0f)-4.5f);
points[x][y][2]=float(sin((((x/5.0f)*40.0f)/360.0f)*3.141592654*2.0f));
}
}
return TRUE;
}
int DrawGLScene(GLvoid)
{
int x,y;
float float_x,float_y,float_xb,float_yb;
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-12.0f);
glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_QUADS);
for( x = 0; x < 44; x++ )
{
for( y = 0; y < 44; y++ )
{
float_x = float(x)/44.0f;
float_y = float(y)/44.0f;
float_xb = float(x+1)/44.0f;
float_yb = float(y+1)/44.0f;
glTexCoord2f( float_x, float_y);
glVertex3f( points[x][y][0], points[x][y][1], points[x][y][2] );
glTexCoord2f( float_x, float_yb );
glVertex3f( points[x][y+1][0], points[x][y+1][1], points[x][y+1][2] );
glTexCoord2f( float_xb, float_yb );
glVertex3f( points[x+1][y+1][0], points[x+1][y+1][1], points[x+1][y+1][2] );
glTexCoord2f( float_xb, float_y );
glVertex3f( points[x+1][y][0], points[x+1][y][1], points[x+1][y][2] );
}
}
glEnd();
if(wiggle_count==2)
{
for(y=0;y<45;y++)
{
hold = points[0][y][2];
for(x=0;x<44;x++)
{
points[x][y][2] = points[x+1][y][2];
}
points[44][y][2]=hold;
}
wiggle_count = 0;
}
wiggle_count++;
xrot+=0.3f;
yrot+=0.2f;
zrot+=0.4f;
return TRUE;
}
GLvoid KillGLWindow(GLvoid)
{
if(fullscreen)
{
ChangeDisplaySettings(NULL,0);
ShowCursor(TRUE);
}
if(hRC)
{
if(!wglMakeCurrent(NULL,NULL))
{
MessageBox(NULL,"释放DC或RC失败。","关闭错误"
,MB_OK | MB_ICONINFORMATION);
}
if(!wglDeleteContext(hRC))
{
MessageBox(NULL,"释放RC失败","关闭错误",
MB_OK | MB_ICONINFORMATION);
}
hRC = NULL;
}
if(hDC && !ReleaseDC(hWnd,hDC))
{
MessageBox(NULL,"释放DC失败","关闭错误",
MB_OK | MB_ICONINFORMATION);
hDC = NULL;
}
if(hWnd && !DestroyWindow(hWnd))
{
MessageBox(NULL,"释放窗口句柄失败","关闭错误",
MB_OK |MB_ICONINFORMATION);
hWnd = NULL;
}
if(!UnregisterClass("OpenG",hInstance))
{
MessageBox(NULL,"","",MB_OK | MB_ICONINFORMATION);
hInstance = NULL;
}
}
BOOL CreateGLWindow(char* title,int width, int height
,int bits,bool fullscreenflag)
{
GLuint PixelFormat;
WNDCLASS wc;
DWORD dwExStyle;
DWORD dwStyle;
RECT WindowRect;
WindowRect.left = (long)0;
WindowRect.right = (long)width;
WindowRect.top = (long)0;
WindowRect.bottom = (long)height;
fullscreen = fullscreenflag;
hInstance = GetModuleHandle(NULL);
wc.style = CS_HREDRAW |CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL,IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = "openG";
if(!RegisterClass(&wc))
{
MessageBox(NULL,"注册窗口失败","错误",
MB_OK |MB_ICONEXCLAMATION);
return FALSE;
}
if(fullscreen)
{
DEVMODE dmScreenSettings;
memset(&dmScreenSettings,0,
sizeof(dmScreenSettings));
dmScreenSettings.dmSize = sizeof(dmScreenSettings);
dmScreenSettings.dmPelsWidth = width;
dmScreenSettings.dmPelsHeight = height;
dmScreenSettings.dmBitsPerPel = bits;
dmScreenSettings.dmFields = DM_BITSPERPEL |
DM_PELSWIDTH | DM_PELSHEIGHT;
if(ChangeDisplaySettings(&dmScreenSettings,
CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
{
if(MessageBox(NULL,"全屏模式在当前显卡上设置失败!\n需要在窗口模式下进行显示吗?",
"MyOpenGLWindows",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
{
fullscreen = FALSE;
}
else
{
MessageBox(NULL,"程序将被关闭","错误",MB_OK | MB_ICONSTOP);
return FALSE;
}
}
}
if(fullscreen)
{
dwExStyle = WS_EX_APPWINDOW;
dwStyle = WS_POPUP;
ShowCursor(FALSE);
}
else
{
dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
dwStyle = WS_OVERLAPPEDWINDOW;
};
AdjustWindowRectEx(&WindowRect,dwStyle,FALSE,dwExStyle);
if(!(hWnd = CreateWindowEx(dwExStyle,"openG",title,WS_CLIPSIBLINGS | WS_CLIPCHILDREN
| dwStyle,0,0,WindowRect.right-WindowRect.left,WindowRect.bottom-WindowRect.top,
NULL,NULL,hInstance,NULL)))
{
KillGLWindow();
MessageBox(NULL,"创建窗口失败!","MyOpenGLWindow",MB_OK | MB_ICONEXCLAMATION);
return FALSE;
};
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |PFD_DOUBLEBUFFER
,PFD_TYPE_RGBA,bits,0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
16,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
if(!(hDC = GetDC(hWnd)))
{
KillGLWindow();
MessageBox(NULL,"不能创建一种相匹配的像素格式!","MyOpenGLWindow",
MB_OK|MB_ICONEXCLAMATION);
return FALSE;
};
if(!(PixelFormat = ChoosePixelFormat(hDC,&pfd)))
{
KillGLWindow();
MessageBox(NULL,"不能设置像素格式!","MyOpenGLWindow",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
};
if(!SetPixelFormat(hDC,PixelFormat,&pfd))
{
KillGLWindow();
MessageBox(NULL,"不能设置像素格式","MyOpenGLWindow",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
if(!(hRC = wglCreateContext(hDC)))
{
KillGLWindow();
MessageBox(NULL,"不能创建OpenGL渲染描述表","MyOpenGLWindow",
MB_OK|MB_ICONEXCLAMATION);
return FALSE;
};
if(!wglMakeCurrent(hDC,hRC))
{
KillGLWindow();
MessageBox(NULL,"激活渲染描述表失败!","MyOpenGLWindow",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
};
ShowWindow(hWnd,SW_SHOW);
SetForegroundWindow(hWnd);
SetFocus(hWnd);
ReSizeGLSce
ploat.rar_page
版权申诉
178 浏览量
2022-09-23
00:18:51
上传
评论
收藏 2.79MB RAR 举报
局外狗
- 粉丝: 66
- 资源: 1万+
最新资源
- 微信小程序 - 图书管理系统源码.zip
- 微信小程序 - 图片自适应 ,富文本解析源码.zip
- 微信小程序 - 同乐居商城:购物车合算源码
- 1、根据输入的三条边值判断能组成何种三角形,并设计测试数据进行判定覆盖测试 三条边为变量a、b、c,范围为1≤边值≤10,不在范
- SQL server 练习题目8道(小白教学).zip
- Python 手写实现 iD3 决策树算法-根据信息增益公式.zip
- 411675952289057车联助手-小窗版(三星)3.5.1.apk
- 三种快速排序方法合并在一个文件中以便直接运行的Python代码示例
- 937712277954201实习5.word
- 2程序语言基础知识pdf1_1716337722703.jpeg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈