前提・実現したいこと
DDSファイルからテクスチャを読み込みたいです。何が原因か絞りきれないです。
解凍作業してみたので、内容を変えました。シェーダの習得より、早くテクスチャができそうなので内容を変える要因になりました。
問題:課題:コピーしたのにddsファイルから正しく出力されない
opengl
1 2typedef struct _DDPixelFormat 3{ 4 GLuint size; 5 GLuint flgas; 6 GLuint fourCC; 7 GLuint bpp; 8 GLuint redMask; 9 GLuint greenMask; 10 GLuint blueMask; 11 GLuint alphaMask; 12} 13DDPixelFormat; 14 15typedef struct _DDSCaps 16{ 17 GLuint caps; 18 GLuint caps2; 19 GLuint caps3; 20 GLuint caps4; 21} 22 23DDSCaps; 24 25typedef struct _DDColorKey 26{ 27 GLuint lowVal; 28 GLuint highVal; 29} 30DDColorKey; 31 32typedef struct _DDSurfaceDesc 33{ 34 GLuint size; 35 GLuint flags; 36 GLuint height; 37 GLuint width; 38 GLuint pitch; 39 GLuint depth; 40 GLuint mipMapLevels; 41 GLuint alphaBitDepth; 42 GLuint reserved; 43 GLuint surface; 44 DDColorKey ckDestOverlay; 45 DDColorKey ckDestBlt; 46 DDColorKey ckSrcOverlay; 47 DDColorKey ckSrcBlt; 48 DDPixelFormat format; 49 DDSCaps caps; 50 GLuint textureStage; 51} 52DDSurfaceDesc; 53 54void DdsLoader(const char* filename){ 55//ReadDDS 56 FILE *fa=fopen(filename,"r"); 57 58 char magic[4]; 59 60 DDSurfaceDesc ddsd; 61 62 fread(&magic, sizeof(char), 4, fa); //修正したが2サイトとも&magicなので元に戻した 63 64 fread(&ddsd, sizeof(ddsd), 1, fa); 65 66 67 //3TXD 68 GLenum format =GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; 69 70 GLuint internalFormat=4; 71 72 int mipmapFacter=4; 73 74 unsigned long current = ftell(fa); 75 76 77 78 fseek(fa, 0L, SEEK_END); 79 80 unsigned long end= ftell(fa); 81 82 unsigned long imagesize=end-current; 83 84 GLubyte *imagedata = new GLubyte[imagesize]; 85 86 fread(imagedata,sizeof(GLubyte),imagesize,fa); 87//ReadDDS 終わり 88// GLuint ID; 89//glGenTextures (1,&ID); 90 91//glBindTexture (GL_TEXTURE_2D,ID); //コメントアウトはmain側に書いている 92 93glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 94 95 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); 96 97 glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE); 98 99//DXT3解凍作業 100 int offset=0; 101 102 103 104 GLsizei mWidth=ddsd.width; 105 106 GLsizei mHeight=ddsd.height; 107 108 GLsizei mSize=0; 109 110 int blockSize=16; 111 112 for(int i=0; i<(int)ddsd.mipMapLevels;i++) 113 { 114 mSize=((mWidth+3)/4)*((mHeight+3)/4)*blockSize; 115 116 glCompressedTexImage2D(GL_TEXTURE_2D,i,format,mWidth,mHeight,0,mSize,offset+imagedata); 117 118 if(mWidth>>1){mWidth=(mWidth>>1);} 119 120 else {mWidth=1;} 121 122 if(mHeight>>1){mHeight=(mHeight>>1);} 123 124 else {mHeight=1;} 125 126 offset +=mSize; 127 }//解凍作業終わり 128 fclose(fa); 129 130 delete [] imagedata; 131 132 imagedata=NULL; 133 134}
ただコピーしたのですが上手くいきませんでした。画像はちらつきました。
インデントはpcに任せました。
間違えてる箇所を教えてください。
引用サイト https://w.atwiki.jp/opengl/pages/59.htmlを新たに見ました。
最終更新:2015年01月03日 22:04だそうです。
追記 printf を削除しました。
参照しているページに「Microsoft Visual Studio 2005 Professional Editionを用いています」と書かれていますが、15年前のソフトが今でも正常に機能するのですか?
すいません。気がつきませんでした。Microsoft VisualStudio 2005 Professional Editionは使ってないのですが描画はでき、反映するので一応意見もらってしばらくしたら、ソースコードごと消します。正常に機能するのかはわかりません。とりあえず、描画結果は上と大体同じになります。後netに記載されているcurrがよくわかりませんでした。あと、ファイルはwidth=256 height=256 DXT3のものを使用してますがDXT3は影響あるのでしょうか。
解凍作業してませんでした。
ループのnumMipmapsnumMipmaps 取得できた。構造体の構造体いれてるのがよくわからないけど freadにそのままsizeof(構造体),1か。
いちおうアプリケーションインストーラーででてくるエディタ使っています。(実際に使われてるとかは知らないです)。ファイルは圧縮されてました。なんかー評価ついてすいません。質問に関して言うと結構困ってはいます。
三角形1つのポリゴンに、最初から丸々コピーしたのにうまくいかない。(最初からうまくいかないやつなのかな。)
回答1件
あなたの回答
tips
プレビュー