私は Power Of Two (POT) テクスチャを必要とする幸運な人々の 1 人であり、NPOT を使用できないように見えるという問題があります。
通常、使用する必要のあるテクスチャがすべて POT であることを確認するだけなので、これはあまり気にしません。しかし、カーソルの X 位置と Y 位置を画面にレンダリングしようとして問題が発生しました。
public int LoadHudTextures(int xPos, int yPos, Color color, GLControl context)
{
context.MakeCurrent();
int Text_Texture;
text_bmp1 = new Bitmap(50, 24);
Text_Texture = GL.GenTexture();
GL.BindTexture(TextureTarget.Texture2D, Text_Texture);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
//GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, text_bmp1.Width, text_bmp1.Height, 0,
//OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, 1024, 1024, 0,
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
Graphics gfx = Graphics.FromImage(text_bmp1);
gfx.Clear(Color.Transparent);
FontFamily fontfamily = new FontFamily("Arial");
Font font = new Font(fontfamily, 16, FontStyle.Regular,GraphicsUnit.Pixel);
gfx.DrawString("X:" + xPos.ToString() + "\n"
+ "Y:" + yPos.ToString(), font, new SolidBrush(color), new PointF(1.5f, 1.5f));
// Upload the Bitmap to OpenGL.
// Do this only when text changes.
System.Drawing.Imaging.BitmapData data = text_bmp1.LockBits(new Rectangle(0, 0, text_bmp1.Width, text_bmp1.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, 50, 24, 0,
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
text_bmp1.UnlockBits(data);
return Text_Texture;
}
これが問題です。「text_bmp1.Width」と「text_bmp1.Height」を使用すると、白いボックスが表示されます。(テクスチャリングされるオブジェクト)。これは私の POT の問題によるものだと思います。POT の幅と高さ (512、1024 など) を使用すると、テクスチャがレンダリングされますが、A) 表示したい文字列ではありません。B) 数回のレンダリング後に破損し、最終的に空白になります。 C) レンダリングされるテクスチャがトリミングされておらず、非常に奇妙に引き伸ばされています。
C) TexCoord2(,) X と Y の値を変更するだけで修正できます。テキストの画像を次の POT まで動的にパディングし、余分な部分を切り取る方法があるかどうか疑問に思っています。
明確にするために、HP/GL2 PCL ソース コード ファイルのアイテムを画面に表示してから、Dynamic pharmacy ラベル用のプリンターにアイテムを送信する環境をプログラミングしています。
誰かがもっと明確にする必要がある場合は、私に知らせてください。ありがとうございました