/* stick a 80x25 thedraw screen up */ put_ansi(unsigned char *bitmap) { int x,y,z; for (y=0;y<25;y++) { z=0; for (x=0;x<80;x++) { col_set(bitmap[(y*160)+x*2+1]); mvaddch(y,z++,bitmap[(y*160)+x*2]); } } }
Private void render(ACObject *ob) { int n, s, sr; int st; glPushMatrix(); glTranslated(ob->loc.x, ob->loc.y, ob->loc.z); if (ob->texture != -1) { static int lasttextureset = -1; //ACImage *i = ac_get_texture(ob->texture); ac_get_texture(ob->texture); glEnable(GL_TEXTURE_2D); if (ob->texture != lasttextureset) { glBindTexture(GL_TEXTURE_2D, ob->texture); lasttextureset = ob->texture; } } else glDisable(GL_TEXTURE_2D); for (s = 0; s < ob->num_surf; s++) { ACSurface *surf = &ob->surfaces[s]; glNormal3fv((GLfloat *)&surf->normal); if (surf->flags & SURFACE_TWOSIDED) glDisable(GL_CULL_FACE); else glEnable(GL_CULL_FACE); st = surf->flags & 0xf; if (st == SURFACE_TYPE_CLOSEDLINE) { glDisable(GL_LIGHTING); glBegin(GL_LINE_LOOP); col_set_simple(surf->mat); } else if (st == SURFACE_TYPE_LINE) { glDisable(GL_LIGHTING); glBegin(GL_LINE_STRIP); col_set_simple(surf->mat); } else { glEnable(GL_LIGHTING); col_set(surf->mat); if (surf->num_vertref == 3) glBegin(GL_TRIANGLE_STRIP); else glBegin(GL_POLYGON); } for (sr = 0; sr < surf->num_vertref; sr++) { ACVertex *v = &ob->vertices[surf->vertref[sr]]; if (ob->texture > -1) { float tu = surf->uvs[sr].u; float tv = surf->uvs[sr].v; float tx = ob->texture_offset_x + tu * ob->texture_repeat_x; float ty = ob->texture_offset_y + tv * ob->texture_repeat_y; glTexCoord2f(tx, ty); } if (surf->flags & SURFACE_SHADED) glNormal3fv((GLfloat *)&v->normal); glVertex3fv((GLfloat *)v); } glEnd(); } if (ob->num_kids) for (n = 0; n < ob->num_kids; n++) render(ob->kids[n]); glPopMatrix(); }