diff -urN wf-/eye.c wf/eye.c
--- wf-/eye.c	2015-12-12 00:00:00.000000000 +0900
+++ wf/eye.c	2015-12-13 00:00:00.000000000 +0900
@@ -63,15 +63,21 @@
 }
 
 void
-eye_move(eye_t *e, int mode, int h_v, int dir)
+eye_move(eye_t *e, int mode, int h_v, int v)
 {
 	line_t l;
 
-	if(mode == 2){ /* zoom */
-		double t = 1 - e->zoom_rate;
-
-		line_set(&l, &e->t, &e->p);
-		line_pos(&l, dir > 0 ? t : 1 / t, &e->p);
+	if(mode / 2 == 1){ /* zoom */
+		int abs_v = v < 0 ? -v : v;
+		double t = 1 - e->zoom_rate * abs_v;
+
+		if(mode == 2){
+			line_set(&l, &e->t, &e->p);
+			line_pos(&l, v > 0 ? t : 1 / t, &e->p);
+		}else{
+			line_set(&l, &e->p, &e->t);
+			line_pos(&l, v > 0 ? t : 1 / t, &e->t);
+		}
 		return;
 	}
 
@@ -81,5 +87,19 @@
 	if(h_v == 'v') d3_mul(&l.v, -1);
 
 	l.p = mode == 0 ? e->t : e->p;
-	pos_rot(mode == 0 ? &e->p : &e->t, &l, e->move_deg * dir);
+	pos_rot(mode == 0 ? &e->p : &e->t, &l, e->move_deg * v);
+}
+
+void
+eye_set_div4(eye_t *e, int x, int y)
+{
+	int w = e->w / 2;
+	int h = e->h / 2;
+
+	e->sx = w * x;
+	e->ey = h * y;
+	e->ex = e->sx + w - 1;
+	e->sy = e->ey + h - 1;
 }
+
+
diff -urN wf-/eye.h wf/eye.h
--- wf-/eye.h	2015-12-12 00:00:00.000000000 +0900
+++ wf/eye.h	2015-12-13 00:00:00.000000000 +0900
@@ -14,10 +14,13 @@
 	axis_t ax;
 } eye_t;
 
+#define EYE_MOVE_MODE_N		4
+
 void eye_init(eye_t *e, int w, int h);
 void eye_update(eye_t *e);
 int eye_conv(const eye_t *e, const pos_t *p, int *rx, int *ry);
 int eye_clip(const eye_t *e, pos_t *a, pos_t *b);
-void eye_move(eye_t *e, int mode, int h_v, int dir);
+void eye_move(eye_t *e, int mode, int h_v, int v);
+void eye_set_div4(eye_t *e, int x, int y);
 
 #endif
diff -urN wf-/wf_ex.c wf/wf_ex.c
--- wf-/wf_ex.c	2015-12-13 00:00:00.000000000 +0900
+++ wf/wf_ex.c	2015-12-13 00:00:00.000000000 +0900
@@ -11,7 +11,10 @@
 		return EOF;
 	case ' ':
 	case CUI_KEY_ENTER:
-		*mode = (*mode + 1) % 3;
+		*mode = (*mode + 1) % EYE_MOVE_MODE_N;
+		break;
+	case CUI_KEY_BS:
+		*mode = (*mode - 1 + EYE_MOVE_MODE_N) % EYE_MOVE_MODE_N;
 		break;
 	case CUI_KEY_UP:
 		eye_move(e, *mode, 'v', 1);
@@ -47,36 +50,6 @@
 	xline(x[0], y[0], x[1], y[1]);
 }
 
-void
-draw_pyramid_sample(const eye_t *e, int n, int mode)
-{
-	pos_t p[5], add;
-	int i;
-
-	d3_set(&p[0], -1, -1, 0);
-	d3_set(&p[1],  1, -1, 0);
-	d3_set(&p[2],  1,  1, 0);
-	d3_set(&p[3], -1,  1, 0);
-	d3_set(&p[4],  0,  0, 1 - mode);
-
-	n--;
-	d3_set(&add, n*0.5, n*0.5, n*0.2);
-	for(i=0; i<5; i++){
-		d3_mul(&p[i], n*0.2);
-		d3_add(&p[i], &add);
-	}
-	for(i=0; i<4; i++){
-		pos_t p2[2];
-
-		p2[0] = p[i];
-		p2[1] = p[(i+1)%4];
-		draw_line(e, p2);
-
-		p2[1] = p[4];
-		draw_line(e, p2);
-	}
-}
-
 struct grp{
 	int w, h;
 	pos_t *p;
@@ -132,13 +105,14 @@
 int
 main(int ac, char **av)
 {
-	int w, h, i, n = opt_int("-n", ac, av, 10);
+	int w, h;
 	eye_t eye;
 	int mode = 0;
 	char *fn = opt_str("-fn", ac, av, NULL);
 	char *zoom_s = opt_str("-zoom", ac, av, "1,1,1");
 	d3_t zoom;
 	struct grp grp;
+	double t;
 	
 	if(!fn) ERR("-fn filename");
 	sscanf(zoom_s, "%lf,%lf,%lf", &zoom.x, &zoom.y, &zoom.z);
@@ -152,15 +126,31 @@
 	if(opt_idx("-ximg", ac, av) > 0) ximg_curr = ximg_alloc();
 
 	eye_init(&eye, w, h);
-	d3_set(&eye.p, 0, -n, n);
-	d3_set(&eye.t, n/2, n/2, 0);
+	t = grp.h * zoom.y;
+	d3_set(&eye.p, 0, -t, t);
+	d3_set(&eye.t, t/2, t/2, 0);
 
 	while(key_work(&eye, &mode) != EOF){
 		eye_update(&eye);
 
 		xclear();
-		draw_pyramid_sample(&eye, n, mode);
-		draw_grp(&eye, &grp);
+
+		if(mode % 2 == 1){
+			int x, y;
+			for(y=0; y<2; y++){
+				for(x=0; x<2; x++){
+					eye_t e = eye;
+					eye_set_div4(&e, x, y);
+					if(y == 0) eye_move(&e, 0, 'v', 45 / e.move_deg);
+					if(x != 0) eye_move(&e, 0, 'h', 45 / e.move_deg);
+					eye_update(&e);
+					draw_grp(&e, &grp);
+				}
+			}
+		}else{
+			draw_grp(&eye, &grp);
+		}
+		if(mode / 2 == 1) xrect(1, 1, w-2, h-2);
 
 		xflush();
 		if(ximg_curr) ximg_put();
diff -urN wf-/x.c wf/x.c
--- wf-/x.c	2015-12-10 00:00:00.000000000 +0900
+++ wf/x.c	2015-12-13 00:00:00.000000000 +0900
@@ -122,6 +122,15 @@
 }
 
 void
+xrect(int sx, int sy, int ex, int ey)
+{
+	xline(sx, sy, ex, sy);
+	xline(sx, ey, ex, ey);
+	xline(sx, sy+1, sx, ey-1);
+	xline(ex, sy+1, ex, ey-1);
+}
+
+void
 xflush(void)
 {
 	if(ximg_curr) return;
diff -urN wf-/x.h wf/x.h
--- wf-/x.h	2015-12-10 00:00:00.000000000 +0900
+++ wf/x.h	2015-12-13 00:00:00.000000000 +0900
@@ -7,6 +7,7 @@
 void xfini(void);
 void xclear(void);
 void xline(int sx, int sy, int ex, int ey);
+void xrect(int sx, int sy, int ex, int ey);
 void xflush(void);
 
 extern void *ximg_curr;