私はフォント生成ソリューションに取り組んでおり、テクスチャの問題に直面しています。テクスチャ アトラスを動的に作成し、すべての文字をテクスチャ座標でマッピングしています。
「t」文字をマッピングした結果は次のとおりです: (生成されたテクスチャが上にあり、描画したものが下にあります)
問題は、プリミティブ領域とテクスチャ領域のサイズが一致していないことであると思われるため、openGL がサイズを変更しようとしています。テクスチャのロード/レンダリング時に Min と Mag の両方で GL_NEAREST を使用しています
レンダリング コードは次のとおりです。
glBegin(GL_TRIANGLE_STRIP);
float twidth = 7.f / 512.f;
float theight = 11.f / 512.f;
float width = 7.f;
float height = 11.f;
float w = width / 2.f;
float h = height / 2.f;
float x = 100;
float y = 100;
float tx = 135.f / 512.f;
float ty = 0;
glTexCoord2f(tx, ty);
glVertex2f(x - w, y-h);
glTexCoord2f(tx + twidth, ty);
glVertex2f(x + w, y-h);
glTexCoord2f(tx, ty + theight);
glVertex2f(x - w, y+h);
glTexCoord2f(tx + twidth, ty + theight);
glVertex2f(x + w, y+h);
glEnd();
初期化コードは次のとおりです。
glViewport(0,0,width,height);
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
// Set up the GL state.
glClearColor(1, 1, 1, 1);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
//glDisable(GL_BLEND);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, height, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
テクスチャ読み込みコード:
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 512, 512,
0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, &texBinary[0]);