break; case UP:
ey += amount; break;
case LOOKUP: cy += amount; break; }
if (update){
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
gluLookAt(ex, ey, ez, cx, cy, cz, 0.0f,1.0f,0.0f); } }
TEXTURE_2D **TextureList; OBJECT *ObjectList; /* ObjectList[0]:isolated surfaces*/
INT4S ObjectNum;
char gEnergyFile[30]; char sLookAtFN[100]; char ImageName[30];
void CRenderView::ReadData() {
int i,j,l; FILE *fp;
char stemp[100]; POINT3D *plist;
INT4U nAllVertexNum; INT4U *pchlist;
strcpy(gEnergyFile,\ fp = fopen( gEnergyFile, \ if ( fp == NULL ) {
21
printf( \ exit(0); }
fseek( fp, 0, SEEK_SET);
/****** read texture list ******/ fscanf( fp, \
while( strcmp( stemp,\ fscanf( fp, \ fscanf( fp, \
TextureList = (TEXTURE_2D **)malloc( sizeof(TEXTURE_2D)*(texnum+1)); for(i=1; i<=texnum; i++) { TextureList[i] = (TEXTURE_2D *)malloc( sizeof(TEXTURE_2D)); fscanf( fp, \ if ( strcmp( stemp,\T_TEXTURE\ TextureList[i]->type = 1; else if ( strcmp( stemp,\ TextureList[i]->type = 0; }
/****** Read object list ******/ fscanf( fp, \
while( strcmp( stemp,\ fscanf( fp, \
ObjectList = (OBJECT *)malloc( sizeof(OBJECT ) * ObjectNum); for(i = 0; i < ObjectNum; i ++ ) { fscanf( fp, \ while( strcmp( stemp,\ fscanf( fp, \ ObjectList[i].surflist = (SURFACE *)malloc( sizeof(SURFACE) * ObjectList[i].SurfNum); for(j = 0; j < ObjectList[i].SurfNum; j ++ ) {
22
/****** Read surface infor ******/ fscanf( fp, \ while( strcmp( stemp,\ fscanf( fp, \ fscanf( fp, \ while( strcmp( stemp,\ fscanf( fp, \ fscanf( fp, \ while( strcmp( stemp,\ fscanf( fp, \ fscanf( fp, \ while( strcmp( stemp,\ fscanf( fp, \ /****** Read point list ******/ ObjectList[i].surflist[j].pointlist = (POINT3D*)malloc(sizeof(POINT3D) * ObjectList[i].surflist[j].pointn); plist = ObjectList[i].surflist[j].pointlist; for( l = 0; l < ObjectList[i].surflist[j].pointn ; l ++ ) fscanf( fp, \ &(plist[l].r), &(plist[l].g), &(plist[l].b), &(plist[l].u), &(plist[l].v), &(plist[l].x), &(plist[l].y), &(plist[l].z) ); /****** Read patchlist ******/ nAllVertexNum = ObjectList[i].surflist[j].triangle * 3 + ObjectList[i].surflist[j].quadric *4 ; ObjectList[i].surflist[j].patchlist = (INT4U *)malloc( sizeof(INT4U) nAllVertexNum); pchlist = ObjectList[i].surflist[j].patchlist;
23
*
for( l = 0; l < nAllVertexNum; l ++ ) fscanf( fp, \ }
}
fclose(fp); }
void CRenderView::InitLookAt() {
FILE *fp;
strcpy(sLookAtFN,\ fp = fopen(sLookAtFN, \ if (fp == NULL) { ex = ey = ez =1.0f; cx = cy = cz =0.0f; Near = 0.1f; angle = 30.0f; }
else fscanf(fp, \ fclose(fp); }
void CRenderView::InitRenderWin() {
glShadeModel ( GL_SMOOTH ); glDepthFunc ( GL_LESS );
glEnable ( GL_DEPTH_TEST );
glMatrixMode ( GL_PROJECTION ); glLoadIdentity();
glMatrixMode ( GL_MODELVIEW ); glLoadIdentity();
gluPerspective ( angle, (float)WinWidth/(float)WinHeigth, Near, 1000000000.0); gluLookAt( ex, ey, ez, cx, cy, cz, 0.0, 1.0, 0.0); }
24
void CRenderView::Render(void) {
int i, j, k, l, m, TexIndex; POINT3D *plist; INT4U *pchlist;
glClear
(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT); for(i = 0; i < ObjectNum; i ++ ) for(j = 0; j < ObjectList[i].SurfNum; j ++ ) { TexIndex = ObjectList[i].surflist[j].texId; if( TexIndex > 0 ) InitTex( TexIndex ); plist = ObjectList[i].surflist[j].pointlist; pchlist = ObjectList[i].surflist[j].patchlist; l = 0; for ( k = 0; k < ObjectList[i].surflist[j].triangle; k ++) { glBegin( GL_TRIANGLES ); for( m = 0; m < 3; m ++ ) { glColor3f ( plist[pchlist[l]].r, plist[pchlist[l]].g, plist[pchlist[l]].b ); glTexCoord2f( plist[pchlist[l]].u, plist[pchlist[l]].v ); glVertex3f( plist[pchlist[l]].x, plist[pchlist[l]].y, plist[pchlist[l]].z ); l ++; }/* m */ glEnd(); }/* k */ for ( k = 0; k < ObjectList[i].surflist[j].quadric; k ++) {
25
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库研究生计算机图形学课程室内场景OpenGL--实验报告(5)在线全文阅读。
相关推荐: