Exemplo n.º 1
0
/* 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]);
		}
	}
}
Exemplo n.º 2
0
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();
}