急ぎです。テクスチャマッピングの機能追加を希望します

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
でごいち

急ぎです。テクスチャマッピングの機能追加を希望します

#1

投稿記事 by でごいち » 16年前

でごいちです。添付ファイルのCGを実装するプログラムですが、残りの希望としてはテクスチャマッピングの機能を追加したいと思ってます。少々急いでおりますので、早めの内にご指導宜しくお願いします。

指導例:
この関数とこの関数の間に~というプログラムを追加すると良い・・・・など。

box

Re:急ぎです。テクスチャマッピングの機能追加を希望します

#2

投稿記事 by box » 16年前

> 少々急いでおりますので、早めの内に

俺(または私)は急いでるんだから、早く答えをよこせ、ということですか?

でごいち

Re:急ぎです。テクスチャマッピングの機能追加を希望します

#3

投稿記事 by でごいち » 16年前

いいえ、そのつもりはありませんが・・・・誤解を招く表現であったとすれば申し訳ありません。早急に解決方法のアドバイスを頂き(勿論自分でもいくらかの案を練るようにはしてますが)、作業のペースを上げたいと思っています。

Justy

Re:急ぎです。テクスチャマッピングの機能追加を希望します

#4

投稿記事 by Justy » 16年前

 検索はしてみましたか?

テクスチャ
ttp://wisdom.sakura.ne.jp/system/opengl/gl23.html

OpenGL勉強会用 資料のページ
ttp://www.is.oit.ac.jp/~whashimo/server/~whashimo/Article/OpenGL/Chapter7/index.html

OpenGL::テクスチャのはりかた - OpenGL de プログラミング - livedoor Wiki(ウィキ)
ttp://wiki.livedoor.jp/mikk_ni3_92/d/OpenGL::%A5%C6%A5%AF%A5%B9%A5%C1%A5%E3%A4%CE%A4%CF%A4%EA%A4%AB%A4%BF

OpenGL FAQ 21. テクスチャ・マッピング
ttp://opengl.jp/oglfaq/texture.htm

OpenGLでテクスチャーの扱い方 - a geek
ttp://d.hatena.ne.jp/hiratara/20080810/1218379797


 これらを読めば直ぐに使い方はわかると思います。

でごいち

Re:急ぎです。テクスチャマッピングの機能追加を希望します

#5

投稿記事 by でごいち » 16年前

Justyさんありがとうございます。添付のリンクは、分かる範囲で参考にさせて頂きます。

決して答を教えろとかいう類のつもりでは全くないですが(誤解を招くことがあれば申し訳ありません)出来れば、私のプログラムに何とかという関数を追加するとこのような動作を行う、という具体例を示していただけるとリンクの内容理解を深める上でありがたいので、他の閲覧者の方もどうか宜しくお願い致します。

Justy

Re:急ぎです。テクスチャマッピングの機能追加を希望します

#6

投稿記事 by Justy » 16年前

 では、細かい説明は Webに譲るとして、簡単に。

1 グローバル変数に GLuint gTexture; を追加します。
 
2 初期化の関数の最後の方にでも
[color=#d0d0ff" face="monospace]
   {
        int x, y;
        unsigned char *p;
        GLubyte data[64][64][3];
        
        glGenTextures(1, &gTexture);
        glBindTexture(GL_TEXTURE_2D, gTexture);
        
        p = (unsigned char *)data;
        for(y = 0; y < 64; y++)
        {
            int r = (y * 0xff) / 64;
            for (x = 0; x < 64; x++)
            {
                *p++ = x%2? 255: (unsigned char)r;
                *p++ = (unsigned char)(x%2? 255-(y * 0xff / 64): (x * 0xff / 64));
                *p++ = (unsigned char)(y%2? r: (0xff-r));
            }
        }
        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 , 3 , 64 , 64 ,
            0 , GL_RGB , GL_UNSIGNED_BYTE , data);
    }[/color]
 を追加します。

3 既存のコードに以下の関数を追加し、描画のどこかでコールして下さい。
[color=#d0d0ff" face="monospace]
void display2()
{
    glBindTexture(GL_TEXTURE_2D, gTexture);
    glEnable(GL_TEXTURE_2D);
    glBegin(GL_TRIANGLE_STRIP);
    
    glTexCoord2f(0, 0);
    glVertex3f(5, 0, 5);
    glTexCoord2f(1, 0);
    glVertex3f(-5, 0, 5);
    glTexCoord2f(0, 1);
    glVertex3f(5, 0, -5);
    glTexCoord2f(1, 1);
    glVertex3f(-5, 0, -5);
    
    glEnd();
    glDisable(GL_TEXTURE_2D);
}[/color]
4 終了時(main関数を抜けるところ)で glDeleteTextures(1, &gTexture);
コールして下さい。


 これで、座標[0, 0, 0]あたりに四角のポリゴンがグリッドっぽい変なテクスチャが
張られた状態で表示されます。

閉鎖

“C言語何でも質問掲示板” へ戻る