#!/usr/bin/perl -w
use strict;
use OpenGL qw/ :all /;
use Math::Trig;

use constant N_SHAPES => 7;

#表示ウィンドウの位置、サイズ
glutInitWindowPosition(100, 100);
glutInitWindowSize(320, 240);
#glut初期化
#glutInit(&argc, &argv); # mainの引数をそのまま渡すと、引数の処理をしてくれる
glutInit();
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow('test');
glutDisplayFunc(\&display);
glutReshapeFunc(\&resize);
init();
#glut実行
glutMainLoop();

sub resize
{
	my ($w, $h) = @_;
# $w, $h: 表示ウインドウのサイズが入ってくる

#表示するサイズ
	glViewport(0, 0, $w, $h);
	glLoadIdentity();
#ここで設定される(x0, x1, y0, y1, z0, z1)がViewportの範囲へ投影される
#ウィンドウサイズにかかわらず表示図形が一定の大きさになるようにする
#表示範囲
	glOrtho(-$w/200.0, $w/200.0, -$h/200.0, $h/200.0, -1.0, 1.0);
}

sub display
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
#POLYGON全体の塗りつぶし色
  glColor3d(1.0, 0.0, 0.0);
#GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_QUADS 
#GL_TRIANGLE_STRIP GL_QUAD_STRIP GL_TRIANGLE_FAN GL_POLYGON
  glBegin(GL_POLYGON);
#各頂点の塗りつぶし色
    glColor3d(1.0, 0.0, 0.0);
    glVertex2d(-0.9, -0.9);
    glColor3d(0.0, 1.0, 0.0);
    glVertex2d( 0.9, -0.9);
    glColor3d(0.0, 0.0, 1.0);
    glVertex2d( 0.9,  0.9);
    glColor3d(0.0, 1.0, 1.0);
    glVertex2d(-0.9,  0.9);
  glEnd();
  glFlush();
}

sub init
{
	glClearColor(1.0, 1.0, 1.0, 1.0);
}
