Exemple #1
0
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();

}
Exemple #2
0
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);
	}
}