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; i pn; 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; } }