楽勝だと思っていたが意外と苦労した。アラインメントや配列について学びなおすいい機会だったと思う。とりあえず、テクスチャを表示するだけコードを載せてみよう。
023 | const unsigned TEXSIZE = 64; |
026 | GLubyte texImage[TEXSIZE][TEXSIZE][4]; |
037 | glClear(GL_COLOR_BUFFER_BIT); |
038 | glEnable(GL_TEXTURE_2D); |
039 | glBindTexture(GL_TEXTURE_2D, hTextures[0]); |
044 | glVertex2fv(vertices[0]); glTexCoord2fv(uvs[0]); |
045 | glVertex2fv(vertices[1]); glTexCoord2fv(uvs[1]); |
046 | glVertex2fv(vertices[2]); glTexCoord2fv(uvs[2]); |
047 | glVertex2fv(vertices[3]); glTexCoord2fv(uvs[3]); |
051 | glBindTexture(GL_TEXTURE_2D, 0); |
053 | glDisable(GL_TEXTURE_2D); |
061 | glGenTextures(1, hTextures); |
064 | for (unsigned y=0; y<TEXSIZE; ++y) |
067 | for (unsigned x=0; x<TEXSIZE; ++x) |
070 | int col = ((yy+xx)&1)*255; |
072 | texImage[y][x][0] = col; |
073 | texImage[y][x][1] = 0; |
074 | texImage[y][x][2] = ~col; |
075 | texImage[y][x][3] = 0xff; |
079 | glPixelStorei(GL_UNPACK_ALIGNMENT, 4); |
082 | glBindTexture(GL_TEXTURE_2D, hTextures[0]); |
085 | glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TEXSIZE, TEXSIZE, 0, GL_RGBA, GL_UNSIGNED_BYTE, texImage); |
088 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); |
089 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); |
092 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
093 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
096 | glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); |
099 | glBindTexture(GL_TEXTURE_2D, 0); |
103 | int main( int argc, char **argv) |
106 | glutInit(&argc, argv); |
107 | glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGBA); |
108 | glutCreateWindow( "DrawTexture" ); |
109 | glutDisplayFunc(Display); |
112 | glClearColor(0,0,0,1); |
119 | glDeleteTextures(1, hTextures); |
テクスチャを表示するだけでこの面倒さ。実際にはBMPなどの画像を読み込む処理も要りますから、これからが大変ですな・・・。あと、3次元配列を最初から用意しておくのもどうかと思うので、こいつをクラス化したりもしました。この辺はまたあとで。
0 件のコメント:
コメントを投稿