www.pudn.com > 3DMENUDEMO.zip > MENU.C


#include  
#include  
#include  
#include  
#include  
#include "menu.h" 
 
#define TOTAL_MI 9				// 菜单项总数 
 
struct menu_item 
{ 
	char flag;						// 标志 
	char pressed;					// 菜单项状态 
	float posx, posy;				// 菜单项开始位置 
	int what;						// 菜单项字符串 
	float width, height;			// 菜单项尺寸宽度和高度 
}; 
 
struct menu_item menu[TOTAL_MI]; 
float a=0; 
float cur_x, cur_y;				// 光标坐标位置 
 
int cur_model=0; 
 
// 菜单初始化 
void InitMenu() 
{ 
	int i; 
   
	// 初始化菜单项的位置 
	for (i=0; ipn; i++) 
	{ 
		v1 = p->p[i*6]; 
		v2 = p->p[i*6+1]; 
		v3 = p->p[i*6+2]; 
		n1 = p->p[i*6+3]; 
		n2 = p->p[i*6+4]; 
		n3 = p->p[i*6+5]; 
    //对以下三组语句的分别改动可以看到面片的绘制效果,如果对.m文件进行改动可以看到造型的变化 
		glNormal3f(p->n[n1*3], p->n[n1*3+1], p->n[n1*3+2]);   
		glVertex3f(p->v[v1*3], p->v[v1*3+1], p->v[v1*3+2]);   
 
		glNormal3f(p->n[n2*3], p->n[n2*3+1], p->n[n2*3+2]);   
		glVertex3f(p->v[v2*3], p->v[v2*3+1], p->v[v2*3+2]);   
 
		glNormal3f(p->n[n3*3], p->n[n3*3+1], p->n[n3*3+2]);   
		glVertex3f(p->v[v3*3], p->v[v3*3+1], p->v[v3*3+2]);   
	} 
	glEnd(); 
	glPopMatrix(); 
} 
 
//  绘制菜单模块 
void doRedraw(HDC *hDC) 
{ 
	int i; 
 
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
 
	glLoadIdentity(); 
 
	glDisable(GL_TEXTURE_2D); 
	glDisable(GL_BLEND); 
 
	// 绘制当前模型 
	glPushMatrix(); 
	glTranslatef(1, 0, -20); 
	glRotatef(a, 0, 1, 1);//旋转 
	a += 1; 
	glColor3f(1, 1, 1); 
	DrawModel(&models[cur_model]);  //(&models[4])-----cur_model选模型 
	glPopMatrix(); 
 
	glEnable(GL_TEXTURE_2D); 
	glDisable(GL_LIGHTING); 
	glDisable(GL_DEPTH_TEST); 
	// 绘制各菜单项 
	for (i=0; i=menu[i].posx) && (xt<=(menu[i].posx+menu[i].width)) && 
			(yt>=menu[i].posy) && (yt<=(menu[i].posy+menu[i].height))) 
		{ 
			if ((i != 0) && (i != 7))  
				menu[i].flag = 1;	// 如果光标停留 
			if (state)  
			{ 
				for (j=0; j 0) && (i < 7))  
					cur_model = i-1; 
			} 
			if ((state) && (i==8))  
				DestroyWindow(hWnd); // 按下Quit菜单项 
		} 
		else menu[i].flag = 0; 
	} 
}