OpenGL ES での画像サイズの取得について

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

OpenGL ES での画像サイズの取得について

#1

投稿記事 by » 15年前

下記のURLで質問させていただいたものです。
http://www.play21.jp/board/formz.cgi?ac ... &rln=57585

質問ばかりで申し訳ないのですが
もう一度アドバイスを頂けますと助かります。

現在iPhoneアプリをOpenGL ESにて開発しております。
UV座標系が複雑なのでスクリーン座標でも開発できるライブラリを作ろうとしております。

そこで描画の関数を作っておりどうしても読み込んだテクスチャの画像を取得する必要が出てきました。
色々と調べてみたのですがObjective-cで書かれたものは
見つけたのですがCよりで書かれたものを見つけることができませんでした。

下記のソースは引数の座標の中心に描画するというものです。
ソースでは画像を512と仮定しておりますが
ここをGLuint textureから取得して読み込むような仕様にしたいです。
どのようにすればよいのか教えては頂けないでしょうか。
void DrawTexture( int x, int y, GLuint texture, int red, int green, int blue, int alpha ){

    int width = 512;
    int height = 512;
    
    int w = width / 2;
    int h = height / 2;

    //長方形を構成する四つの頂点の座標を決定します
    const GLfloat squareVertices[/url] = {
        x-w,    y-h,
        x+w,    y-h,
        x-w,    y+h,
        x+w,    y+h,
    };
    
    //長方形を構成する四つの頂点の色を指定します
    //ここではすべての頂点を同じ色にしています
    const GLubyte squareColors[/url] = {
        red, green, blue ,alpha,
        red, green, blue ,alpha,
        red, green, blue ,alpha,
        red, green, blue ,alpha,
    };
    
    //元画像のどの範囲を描画に使うかを決定します
    const GLfloat texCoords[/url] = {
        0.0f,            0.0f,
        0.0f+1.0f,        0.0f,
        0.0f,            0.0f+1.0f,
        0.0f+1.0f,        0.0f+1.0f,
    };

    //テクスチャ機能を有効にし、描画に使用するテクスチャを指定します
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, texture);


    //頂点座標と色、およびテクスチャの範囲を指定し、描画します
    glVertexPointer(2, GL_FLOAT, 0, squareVertices);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
    glEnableClientState(GL_COLOR_ARRAY);
    glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

    //テクスチャ機能を無効にします
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisable(GL_TEXTURE_2D);
}

Justy

Re:OpenGL ES での画像サイズの取得について

#2

投稿記事 by Justy » 15年前

 読み込み時にサイズは判っているはずなのでそれを利用するじゃダメなのですか?

Re:OpenGL ES での画像サイズの取得について

#3

投稿記事 by » 15年前

度々、ご回答ありがとうございます。
下記のように読み込んでしまっております。
その為、どんどん値が書き変わってしまっております。

CGSize imageSize, textureSize;
NSString *imagePath;

// テクスチャの生成
imagePath = [[NSBundle mainBundle] pathForResource:@"back_ground" ofType:@"png"];
texBackGround = SZGLLoadTexture(imagePath, &imageSize, &textureSize);

imagePath = [[NSBundle mainBundle] pathForResource:@"mato" ofType:@"png"];
texTarget = SZGLLoadTexture(imagePath, &imageSize, &textureSize);

できれば他の箇所でも使い回したいので
int width = 512;
int height = 512;
の所に読み込みたいです。
こういうことは難しいのでしょうか・・・?

Justy

Re:OpenGL ES での画像サイズの取得について

#4

投稿記事 by Justy » 15年前

>どんどん値が書き変わってしまっております
 テクスチャ名と対になる imageSizeらを用意してそれを使えば書き換わることはなくなりますよ。
 面倒なら SZGLTextureクラスを使ってみる(或いは参考にして C/C++に書き直してみる)のも手かもしれません。


>こういうことは難しいのでしょうか
 OpenGLなら glGetTexLevelParameteriv / glGetTexLevelParameterfvで取得できますが、
OpenGL ESには無かったと思います。

Re:OpenGL ES での画像サイズの取得について

#5

投稿記事 by » 15年前

やはり管理するクラスを作った方がいいですか・・・。
素直にあるものを使います。

ご指摘頂いた通りにクラスを作って管理することにしました。
こんな感じに・・・
class Texture{
public:
GLuint texture;
CGSize imageSize, textureSize;
NSString *imagePath;
};

>>或いは参考にして C/C++に書き直してみる
というのはBitmap型を使うなりしてやるってことですよね?
多分、私程度では無理ですww

探してみたのですがESにはないのですね><
勉強になりました。

Justyさん、かじった程度のレベルではない気がします><
聞きたいことが一杯あるのですが悪いので
本当にわからなくなりましたら再びお尋ねさせて頂くかもしれません。
その際はまた助けて頂けますと幸いです。

今回もありがとうございました。

Re:OpenGL ES での画像サイズの取得について

#6

投稿記事 by » 15年前

すみません。
解決マークつけ忘れてました。

閉鎖

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