Esempio n. 1
0
void
tmain(void)
{
	size_t start, stop, t;
	char c;

	start = stop = 0;
	if (field(in.v, 1, &start, &stop))
		tdraw(in.v, in.pmemb, start, stop);
	else
		twrite(in.v, in.pmemb);
	for (;;) {
		if (read(tty.in, &c, 1) < 0)
			perror("read");
		switch (c) {
		case '\n':
			sel.nmemb = stop - start + 1;
			sel.v = in.v + start;
			/* FALLTHROUGH */
		case CONTROL('C'):
		case CONTROL('D'):
			return;
		case CONTROL('A'):
			t = 0;
			/* FALLTHROUGH */
		if (0) {
		case CONTROL('N'):
			t = stop + rune(in.v, stop, 1);
		}
			if (!field(in.v, 1, &t, &stop))
				continue;
			start = t;
			break;
		case CONTROL('E'):
			t = in.pmemb - 1;
			/* FALLTHROUGH */
		if (0) {
		case CONTROL('P'):
			t = start + rune(in.v, start, -1);
		}
			if (!field(in.v, -1, &t, &start))
				continue;
			stop = t;
			break;
		default:
			continue;
		}
		if (in.nlines)
			tprintf(T_CURSOR_UP, in.nlines);
		tprintf(T_COLUMN_ADDRESS, 1);
		tdraw(in.v, in.pmemb, start, stop);
	}
}
Esempio n. 2
0
int main(int argc, char* argv[])
{
    puts("args: path/to/obj path/to/bmp");
    FILE* const fobj =
        oload(argc == 3 ? argv[1] : "model/salesman.obj");
    SDL_Surface* const fdif =
        sload(argc == 3 ? argv[2] : "model/salesman.bmp");
    const Obj obj = oparse(fobj);
    const Triangles tv = tvgen(obj); // Triangle Vertices.
    const Triangles tt = ttgen(obj); // Triangle Textures.
    const Triangles tn = tngen(obj); // Triangle Normals.
    const Sdl sdl = ssetup(800, 600);
    float* const zbuff = (float*) malloc(sizeof(float) * sdl.xres * sdl.yres);
    for(Input input = iinit(); !input.done; input = ipump(input))
    {
        uint32_t* const pixel = slock(sdl);
        reset(zbuff, pixel, sdl.xres * sdl.yres);
        const Vertex center = { 0.0f, 0.0f, 0.0f };
        const Vertex upward = { 0.0f, 1.0f, 0.0f };
        const Vertex eye = { sinf(input.xt), sinf(input.yt), cosf(input.xt) };
        const Vertex z = vunit(vsub(eye, center));
        const Vertex x = vunit(vcross(upward, z));
        const Vertex y = vcross(z, x);
        for(int i = 0; i < tv.count; i++)
        {
            const Triangle nrm = tviewnrm(tn.triangle[i], x, y, z);
            const Triangle tex = tt.triangle[i];
            const Triangle tri = tviewtri(tv.triangle[i], x, y, z, eye);
            const Triangle per = tperspective(tri);
            const Triangle vew = tviewport(per, sdl);
            const Target target = { vew, nrm, tex, fdif };
            tdraw(sdl.yres, pixel, zbuff, target);
        }
        sunlock(sdl);
        schurn(sdl);
        spresent(sdl);
    }
    // Let the OS free hoisted memory for a quick exit.
    return 0;
}