基于openGl的三维旋转魔方源代码.docx

上传人:b****6 文档编号:7488967 上传时间:2023-01-24 格式:DOCX 页数:25 大小:21.41KB
下载 相关 举报
基于openGl的三维旋转魔方源代码.docx_第1页
第1页 / 共25页
基于openGl的三维旋转魔方源代码.docx_第2页
第2页 / 共25页
基于openGl的三维旋转魔方源代码.docx_第3页
第3页 / 共25页
基于openGl的三维旋转魔方源代码.docx_第4页
第4页 / 共25页
基于openGl的三维旋转魔方源代码.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于openGl的三维旋转魔方源代码.docx

《基于openGl的三维旋转魔方源代码.docx》由会员分享,可在线阅读,更多相关《基于openGl的三维旋转魔方源代码.docx(25页珍藏版)》请在冰豆网上搜索。

基于openGl的三维旋转魔方源代码.docx

基于openGl的三维旋转魔方源代码

/*******/基于openGl的三维旋转魔方源代码ThisCodeWasCreatedByJeffMolofee2000

AHUGEThanksToFredricEcholsForCleaningUp

AndOptimizingTheBaseCode,MakingItMoreFlexible!

IfYou'veFoundThisCodeUseful,PleaseLetMeKnow.

//HeaderFileForStandardInput/Output

#include"MoFang.h"

HDC

HGLRC

HWND

boolkeys[256];

boolactive=TRUE;

GLfloat

GLfloat

GLfloat

GLfloatRX;

GLfloatRY;

GLuint

GLbooleanb_RX,b_RY;

LRESULT

AUX_RGBImageRec*LoadBMP(char*Filename){if(!

Filename)//MakeSureAFilenameWasGivenFILE*File=NULL;//FileHandle

//LoadsABitmapImage

CALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//DeclarationForWndProc

texture[24];//StorageForOneTexture(NEW)

xrot;

yrot;

zrot;//XRotation(NEW)

//YRotation(NEW)

//ZRotation(NEW)

//ArrayUsedForTheKeyboardRoutine

//WindowActiveFlagSetToTRUEByDefault

hDC=NULL;

hRC=NULL;

hWnd=NULL;//PrivateGDIDeviceContext

//PermanentRenderingContext

//HoldsOurWindowHandle

HINSTANCEhInstance;//HoldsTheInstanceOfTheApplication

boolfullscreen=TRUE;//FullscreenFlagSetToFullscreenModeByDefault

}{}File=fopen(Filename,"r");

if(File){}

returnNULL;//IfLoadFailedReturnNULLfclose(File);//CloseTheHandle

//LoadTheBitmapAndReturnAPointerreturnauxDIBImageLoad(Filename);//CheckToSeeIfTheFileExists

//DoesTheFileExist?

returnNULL;//IfNotReturnNULL

intLoadGLTextures(){if(TextureImage[0]){}

intStatus=FALSE;//LoadBitmapsAndConvertToTextures//StatusIndicator

//CreateStorageSpaceForTheTextureAUX_RGBImageRec*TextureImage[1];

memset(TextureImage,0,sizeof(void*)*1);//SetThePointerToNULL

//LoadTheBitmap,CheckForErrors,IfBitmap'sNotFoundQuit

if(TextureImage[0]=LoadBMP("Data/NeHe.bmp")){Status=TRUE;//SetTheStatusToTRUEglGenTextures(1,&texture[0]);//CreateTheTexture

//TypicalTextureGenerationUsingDataFromTheBitmap

glBindTexture(GL_TEXTURE_2D,texture[0]);

glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

GL_UNSIGNED_BYTE,TextureImage[0]->data);

//IfTextureExists

//IfTextureImageExists//FreeTheTextureImageMemoryif(TextureImage[0]->data){}free(TextureImage[0]->data);}intLoadGLTextures(char*file,intindex)

ConvertToTextures{}intStatus=FALSE;

AUX_RGBImageRec*TextureImage[1];

memset(TextureImage,0,sizeof(void*)*1);//SetThePointerToNULL

//LoadTheBitmap,CheckForErrors,IfBitmap'sNotFoundQuit

if(TextureImage[0]=LoadBMP(file)){}

if(TextureImage[0]){}

returnStatus;//ReturnTheStatus

if(TextureImage[0]->data){}

free(TextureImage[0]);//FreeTheImageStructurefree(TextureImage[0]->data);//FreeTheTextureImageMemory//IfTextureImageExists//IfTextureExists

Status=TRUE;

glGenTextures(1,&texture[index]);

//TypicalTextureGenerationUsingDataFromTheBitmap

glBindTexture(GL_TEXTURE_2D,texture[index]);

glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//CreateTheTexture

//SetTheStatusToTRUE//CreateStorageSpaceForTheTexture//StatusIndicator//LoadBitmapsAndreturnStatus;//ReturnTheStatus

}free(TextureImage[0]);//FreeTheImageStructureGL_UNSIGNED_BYTE,TextureImage[0]->data);

GLvoidReSizeGLScene(GLsizeiwidth,GLsizeiheight){}

intInitGL(GLvoid){if(!

LoadGLTextures("Data/y

3."bmp",2)){}

if(!

LoadGLTextures("Data/y

4."bmp",3)){}

if(!

LoadGLTextures("Data/y

5."bmp",4))returnFALSE;

returnFALSE;

if(!

LoadGLTextures("Data/y

2."bmp",1)){}returnFALSE;

if(!

LoadGLTextures("Data/y

1."bmp",0)){}returnFALSE;

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

//CalculateTheAspectRatioOfTheWindow

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glViewport(0,0,width,height);

if(height==0){}height=1;//ResizeAndInitializeTheGLWindow

//PreventADivideByZeroBy//MakingHeightEqualOne//ResetTheCurrentViewport//SelectTheProjectionMatrix//ResetTheProjectionMatrixgluPerspective(

45."0f,(GLfloat)width/(GLfloat)height,

0."1f,

100."0f);

//SelectTheModelviewMatrix//ResetTheModelviewMatrix

//AllSetupForOpenGLGoesHere

//JumpToTextureLoadingRoutine(NEW)

//IfTextureDidn'tLoadReturnFALSE

//JumpToTextureLoadingRoutine(NEW)

//IfTextureDidn'tLoadReturnFALSE

//JumpToTextureLoadingRoutine(NEW)

//IfTextureDidn'tLoadReturnFALSE

//JumpToTextureLoadingRoutine(NEW)

//IfTextureDidn'tLoadReturnFALSE

//JumpToTextureLoadingRoutine(NEW)}voidDrawObject1(GLfloatX,GLfloatY,GLfloatZ){glBegin(GL_QUADS);

//FrontFace

glTexCoord2f(

0."0f,

0."0f);glVertex3f(-

1."0f+X,-

1."0f+Y,

1."0f+Z);

glTexCoord2f(

1."0f,

0."0f);glVertex3f(

1."0f+X,-

1."0f+Y,

1."0f+Z);

glTexCoord2f(

1."0f,

1."0f);glVertex3f(

1."0f+X,

1."0f+Y,

1."0f+Z);

glTexCoord2f(

0."0f,

1."0f);glVertex3f(-

1."0f+X,

1."0f+Y,

1."0f+Z);

//BackFace

glTexCoord2f(

1."0f,

0."0f);glVertex3f(-

1."0f+X,-

1."0f+Y,-

1."0f+Z);

glTexCoord2f(

1."0f,

1."0f);glVertex3f(-

1."0f+X,

1."0f+Y,-

1."0f+Z);

glTexCoord2f(

0."0f,

1."0f);glVertex3f(

1."0f+X,

1."0f+Y,-

1."0f+Z);

glTexCoord2f(

0."0f,

0."0f);glVertex3f(

1."0f+X,-

1."0f+Y,-

1."0f+Z);{}

if(!

LoadGLTextures("Data/y

6."bmp",5)){}

if(!

LoadGLTextures("Data/y

7."bmp",6)){}

if(!

LoadGLTextures("Data/y

8."bmp",7)){}

glEnable(GL_TEXTURE_2D);

glShadeModel(GL_SMOOTH);

glClearDepth(

1."0f);//EnableTextureMapping(NEW)

//EnableSmoothShading//DepthBufferSetup

//TheTypeOfDepthTestingToDo//InitializationWentOKreturnFALSE;//IfTextureDidn'tLoadReturnFALSE//JumpToTextureLoadingreturnFALSE;//IfTextureDidn'tLoadReturnFALSE//JumpToTextureLoadingreturnFALSE;//IfTextureDidn'tLoadReturnFALSE//JumpToTextureLoadingreturnFALSE;//IfTextureDidn'tLoadReturnFALSERoutine(NEW)

Routine(NEW)

Routine(NEW)

glClearColor(

0."0f,

0."0f,

0."0f,

0."5f);

glEnable(GL_DEPTH_TEST);

glDepthFunc(GL_LEQUAL);

returnTRUE;//BlackBackground

//EnablesDepthTesting

glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//ReallyNicePerspectiveCalculations}//TopFace

glTexCoord2f(

0."0f,

1."0f);glVertex3f(-

1."0f+X,

1."0f+Y,-

1."0f+Z);

glTexCoord2f(

0."0f,

0."0f);glVertex3f(-

1."0f+X,

1."0f+Y,

1."0f+Z);

glTexCoord2f(

1."0f,

0."0f);glVertex3f(

1."0f+X,

1."0f+Y,

1."0f+Z);

glTexCoord2f(

1."0f,

1."0f);glVertex3f(

1."0f+X,

1."0f+Y,-

1."0f+Z);

//BottomFace

glTexCoord2f(

1."0f,

1."0f);glVertex3f(-

1."0f+X,-

1."0f+Y,-

1."0f+Z);

glTexCoord2f(

0."0f,

1."0f);glVertex3f(

1."0f+X,-

1."0f+Y,-

1."0f+Z);

glTexCoord2f(

0."0f,

0."0f);glVertex3f(

1."0f+X,-

1."0f+Y,

1."0f+Z);

glTexCoord2f(

1."0f,

0."0f);glVertex3f(-

1."0f+X,-

1."0f+Y,

1."0f+Z);

//Rightface

glTexCoord2f(

1."0f,

0."0f);glVertex3f(

1."0f+X,-

1."0f+Y,-

1."0f+Z);

glTexCoord2f(

1."0f,

1."0f);glVertex3f(

1."0f+X,

1."0f+Y,-

1."0f+Z);

glTexCoord2f(

0."0f,

1."0f);glVertex3f(

1."0f+X,

1."0f+Y,

1."0f+Z);

glTexCoord2f(

0."0f,

0."0f);glVertex3f(

1."0f+X,-

1."0f+Y,

1."0f+Z);

//LeftFace

glTexCoord2f(

0."0f,

0."0f);glVertex3f(-

1."0f+X,-

1."0f+Y,-

1."0f+Z);

glTexCoord2f(

1."0f,

0."0f);glVertex3f(-

1."0f+X,-

1."0f+Y,

1."0f+Z);

glTexCoord2f(

1."0f,

1."0f);glVertex3f(-

1."0f+X,

1."0f+Y,

1."0f+Z);

glTexCoord2f(

0."0f,

1."0f);glVertex3f(-

1."0f+X,

1."0f+Y,-

1."0f+Z);

glEnd();

voidDrawObject(intID){glBegin(GL_QUADS);

//FrontFace

glTexCoord2f(

0."0f,

0."0f);glVertex3fv(CubePoint[0].p);

glTexCoord2f(

1."0f,

0."0f);glVertex3fv(CubePoint[1].p);

glTexCoord2f(

1."0f,

1."0f);glVertex3fv(CubePoint[2].p);

glTexCoord2f(

0."0f,

1."0f);glVertex3fv(CubePoint[3].p);

//BackFace

glTexCoord2f(

1."0f,

0."0f);glVertex3fv(CubePoint[4].p);

glTexCoord2f(

1."0f,

1."0f);glVertex3fv(CubePoint[5].p);

glTexCoord2f(

0."0f,

1."0f);glVertex3fv(CubePoint[6].p);

glTexCoord2f(

0."0f,

0."0f);glVertex3fv(CubePoint[7].p);

//TopFace

glTexCoord2f(

0."0f,

1."0f);glVertex3fv(CubePoint[5].p);

glTexCoord2f(

0."0f,

0."0f);glVertex3fv(CubePoint[3].p);

stPoint*CubePoint=Cube[ID].CubePoint;

glTexCoord2f(

1."0f,

0."0f);glVertex3fv(CubePoint[2].p);

glTexCoord2f(

1."0f,

1."0f);glVertex3fv(CubePoint[6].p);

//BottomFace

glTexCoord2f(

1."0f,

1."0f);glVertex3fv(CubePoint[4].p);

glTexCoord2f(

0."0f,

1."0f);glVertex3fv(CubePoint[7].p);

glTexCoord2f(

0."0f,

0."0f);glVertex3fv(CubePoint[1].p);

glTexCoord2f(

1."0f,

0."0f);glVertex3fv(CubePoint[0].p);

//Rightface

glTexCoord2f(

1."0f,

0."0f);glVertex3fv(CubePoint[7].p);

glTexCoord2f(

1."0f,

1."0f);glVertex3fv(CubePoint[6].p);

glTexCoord2f(

0."0f,

1."0f);glVertex3fv(CubePoint[2].p);

glTexCoord2f(

0."0f,

0."0f);glVertex3fv(CubePoint[1].p);

//LeftFace

glTexCoord2f(

0."0f,

0."0f);glVertex3fv(CubePoint[4].p);

glTexCoord2f(

1."0f,

0."0f);glVertex3fv(CubePoint[0].p);

glTexCoord2f(

1."0f,

1."0f);glVertex3fv(CubePoint[3].p);

glTexCoord2f(

0."0f,

1."0f);glVertex3fv(CubePoint[5].p);

glEnd();}intDrawGLScene(GLvoid)

Drawing{glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

glTranslatef(

0."0f,

0."0f,-

12."0f);

glTranslatef(RX,

0."0f,

0."0f);

glTranslatef(

0."0,RY,

0."0);

glRotatef(xrot,

1."0f,

0."0f,

0."0f);

glRotatef(yrot,

0."0f,

1."0f,

0."0f);

glRotatef(zrot,

0."0f,

0."0f

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1