void myDisplay(void) { // 清除。GL_COLOR_BUFFER_BIT表示清除颜色 /* 在RGB模式下,使用glClearColor来指定“空”的颜色,它需要四个参数,其参数的意义跟glColor4f相似。 在索引颜色模式下,使用glClearIndex来指定“空”的颜色所在的索引,它需要一个参数,其意义跟glIndexi相似。 */ glClearColor(0.5f, 0.5f, 0.5f, 0.5f); glClear(GL_COLOR_BUFFER_BIT); drawrect(); drawpoint(); drawline(); drawpolygon(); draw5star(); drawsin(); drawtriangle(); //保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。 glFlush(); }
int drawsprite(struct render_buffer *rb, struct sprite *s, struct sprite_trans * ts) { struct sprite_trans temp; struct matrix temp_matrix; struct sprite_trans *t = sprite_trans_mul(&s->t, ts, &temp, &temp_matrix); switch (s->type) { case TYPE_PICTURE: return drawquad(rb, s->s.pic, t); case TYPE_POLYGON: return drawpolygon(rb, s->s.poly, t); case TYPE_ANIMATION: { struct pack_animation *ani = s->s.ani; int frame = s->frame % s->total_frame; if (frame < 0) { frame += s->total_frame; } frame += s->start_frame; struct pack_frame * pf = OFFSET_TO_POINTER(struct pack_frame, s->pack, ani->frame); pf = &pf[frame]; int i; for (i=0; i<pf->n; i++) { struct pack_part *pp = OFFSET_TO_POINTER(struct pack_part, s->pack, pf->part); pp = &pp[i]; int index = pp->component_id; struct sprite * child = s->data.children[index]; if (child == NULL || (child->flags & SPRFLAG_INVISIBLE)) { continue; } struct sprite_trans temp2; struct matrix temp_matrix2; struct sprite_trans *ct = sprite_trans_mul2(s->pack, &pp->t, t, &temp2, &temp_matrix2); int r = drawsprite(rb, child, ct); if (r) return r; } return 0; } case TYPE_LABEL: if (s->data.rich_text) { // don't support draw label to renderbuffer return -1; } return 0; case TYPE_ANCHOR: if (s->data.anchor->ps) { return -1; } anchor_update(s, t); return 0; case TYPE_PANNEL: if (s->data.scissor) { return -1; } else { return 0; } } return -1; }
void TerosCam::drawobject (TerosObject obj) { for (int i = 0; i < obj.sidenum (); i++) { TerosPolygon * temp = obj.putside (i); drawpolygon(*temp, obj); } }