dlut 可视化大作业1————椭球碰撞检测

#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
#include <stdio.h>
#include<math.h>

HDC			hDC=NULL;
HGLRC		hRC=NULL;
HWND		hWnd=NULL;
HINSTANCE	hInstance = NULL;

bool		keys[256];
bool		active=TRUE;
bool		fullscreen=TRUE;
bool        changed;

float x=0.0f;
float y=0.0f;
float z=0.0f;

float startPostion_x=0;
float startPostion_y=0;
float startPostion_z=0;

float max_x=20.0f;
float max_y=20.0f;
float max_z=20.0f;

float min_x=-20.0f;
float min_y=-20.0f;
float min_z=-20.0f;

float nv_x=-sqrt(1.0f/3.0f);
float nv_y=sqrt(1.0f/3.0f);
float nv_z=-sqrt(1.0f/3.0f);


float num;

float a=-0.01f;
float dic=0.95f;

float radious=0.7f;

float vx=0.0f;
float vy=0.0f;
float vz=0.0f;

float distance=100.0f;

static GLfloat LightAmb[] = {
   0.7f, 0.7f, 0.7f, 1.0f};
static GLfloat LightDif[] = {
   1.0f, 1.0f, 1.0f, 1.0f};
static GLfloat LightPos[] = {
   4.0f, 4.0f, 6.0f, 1.0f};

GLUquadricObj	*q;

GLfloat		xrot		=  0.0f;
GLfloat		yrot		=  0.0f;
GLfloat		xrotspeed	=  0.0f;
GLfloat		yrotspeed	=  0.0f;
GLfloat		zoom		= -60.0f;
GLfloat		height		=  0.0f;

GLuint		texture[6];

LRESULT	CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

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();
}

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[6];
    memset(TextureImage,0,sizeof(void *)*6);
    if ((TextureImage[0]=LoadBMP("Data/EnvWall.bmp")) &&
        (TextureImage[1]=LoadBMP("Data/Ball.bmp")) &&
        (TextureImage[2]=LoadBMP("Data/EnvRoll.bmp"))
		&&(TextureImage[3]=LoadBMP("Data/up.bmp"))&&
		(TextureImage[4]=LoadBMP("Data/blue.bmp"))
		&&(TextureImage[5]=LoadBMP("Data/back.bmp")))
	{
   
		Status=TRUE;
		glGenTextures(6, &texture[0]);
		for (int loop=0; loop<6; loop++)
		{
   
			glBindTexture(GL_TEXTURE_2D, texture[loop]);
			glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		}
		for (int loop=0; loop<6; loop++)
		{
   
			if (TextureImage[loop])
			{
   
				if (TextureImage[loop]->data)
				{
   
					free(TextureImage[loop]->data);
				}
				free(TextureImage[loop]);
			}
		}
	}
	return Status;
}

int InitGL(GLvoid)
{
   
	if (!LoadGLTextures())
	{
   
		return FALSE;
	}
	glShadeModel(GL_SMOOTH);
	glClearColor(0.2f, 0.5f, 1.0f, 1.0f);
	glClearDepth(1.0f);
	glClearStencil(0);
	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LEQUAL);
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
	glEnable(GL_TEXTURE_2D);

	glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmb);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDif);
	glLightfv(GL_LIGHT0, GL_POSITION, LightPos);

	glEnable(GL_LIGHT0);
	glEnable(GL_LIGHTING);

	q = gluNewQuadric();
	gluQuadricNormals(q, GL_SMOOTH);
	gluQuadricTexture(q, GL_TRUE);

	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
	glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);

	return TRUE;
}

void DrawObject()
{
   
	glColor3f(1.0f, 1.0f, 1.0f);
	glBindTexture(GL_TEXTURE_2D, texture[1]);
	gluSphere(q, radious
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值