root/samples/hajimete/sample17.php

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. display
  2. reshape
  3. keyboard
  4. otherInit
  5. LoadTexture

<?php

//画像ファイル

$texturefile = "sampleImage.png"; //256x256の画像


//テクスチャID


$texId = array(0, 0);
$filter = 0;//フィルタモード


//-------- 各種コールバック関数-----//

function display()
{
    global $texId, $filter;
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        gluLookAt(0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

        glBindTexture(GL_TEXTURE_2D,$texId[$filter]);//バインド

        glEnable(GL_TEXTURE_2D);
        glBegin(GL_QUADS);
        glTexCoord2f(0.0, 0.0); glVertex3f(-0.5,-0.5,0.0);
        glTexCoord2f(1.0, 0.0); glVertex3f(0.5,-0.5,0.0);
        glTexCoord2f(1.0, 1.0); glVertex3f(0.5,0.5,0.0);
        glTexCoord2f(0.0, 1.0); glVertex3f(-0.5,0.5,0.0);
        glEnd();
        glDisable(GL_TEXTURE_2D);
        
        glutSwapBuffers();
}

function reshape($w, $h)
{
        glViewport(0,0,$w,$h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        
        gluPerspective(30.0,double($w)/$h,0.1,200);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
}

function keyboard($key, $x, $y)
{
    global $filter;
        switch($key)
        {
        case 'l':
                $filter = 0;//GL_LINEAR

                break;

        case 'n':
                $filter = 1;//GL_NEAREST

                break;

        case 'q':
        case 'Q':
        case '\033'://ESCキー

                glDeleteTextures(2,$texId);//テクスチャの破棄

                exit(0);
                break;

        default:
                break;
        }

        glutPostRedisplay();//再描画

}

//-------- その他の初期設定------//

function otherInit()
{
        glClearColor(1.0, 1.0, 1.0, 1.0);
        glEnable(GL_DEPTH_TEST);
}
//---- テクスチャ読み込み ----//

function LoadTexture()
{
    global $texturefile, $texId;
        //画像読み込み

        $imgA = cvLoadImage($texturefile,1);
        if($imgA == NULL)
        {
                puts("Can't Load Image");
                exit(0);
        }

        //上下反転と色データの入れ替え

        cvFlip($imgA,$imgA,0);
        cvCvtColor($imgA,$imgA,CV_BGR2RGB);

        glGenTextures(2,$texId);//テクスチャ・オブジェクト2つぶん


        //1つ目のテクスチャ

        glBindTexture(GL_TEXTURE_2D,$texId[0]);//バインド

        glTexParameteri(GL_TEXTURE_2D,
                GL_TEXTURE_MAG_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,
                    GL_TEXTURE_MIN_FILTER,GL_LINEAR);
        glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,
                $imgA->width,$imgA->height,
                0,GL_RGB,GL_UNSIGNED_BYTE,$imgA->imageData);
        
        //2つ目のテクスチャ

        glBindTexture(GL_TEXTURE_2D,$texId[1]);//バインド

        glTexParameteri(GL_TEXTURE_2D,
                GL_TEXTURE_MAG_FILTER,GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D,
                GL_TEXTURE_MIN_FILTER,GL_NEAREST);
        
        glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,
                $imgA->width,$imgA->height,
                0,GL_RGB,GL_UNSIGNED_BYTE,$imgA->imageData);

        cvReleaseImage($imgA);//メモリ解放

}

//-------- メイン関数----------//


//GLUT初期設定

glutInit($argv);
glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE);
glutInitWindowSize(640,480);
glutCreateWindow("Texture Mapping");
        
//コールバック関数の登録

glutDisplayFunc('display');
glutReshapeFunc('reshape');
glutKeyboardFunc('keyboard');

otherInit();//その他の初期設定

LoadTexture();//テクスチャのロード

glutMainLoop();

exit (0);


/* [<][>][^][v][top][bottom][index][help] */