描画している 2D シーンにテキストをオーバーレイしようとするときに、LWJGL を使用して小さなプログラムを作成して、グラフィックスを少し学習しようとしています (これは、テキストのすべての側面から継続的に跳ね返るボックスです)。ウィンドウ) テキストがぼやけ、ボックスが繰り返しちらつきます - http://imgur.com/UDelj1dまだ見知らぬ人です。ちらつきはありますが、まだぼやけています - http://imgur.com/3VkTSXH。
なぜこれが起こっているのか、どうすれば修正できるのか、誰かが私を助けることができますか? 私はJavaにかなり精通していますが、グラフィック指向のものを試したのはこれが初めてです。
import java.nio.FloatBuffer;
import java.text.DecimalFormat;
import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;
import org.lwjgl.BufferUtils;
import static org.lwjgl.opengl.GL11.*;
public class TimerDemo
{
//time in ms since the last frame was rendered
private static long lastFrame;
//current time in ms
private static long getTime()
{
return (Sys.getTime() * 1000) / Sys.getTimerResolution();
}
//gets the difference between the current time and lastFrame, then updates lastFrame
private static double getDelta()
{
long currentTime = getTime();
double delta = (double) (currentTime - lastFrame);
lastFrame = getTime();
return delta;
}
private static UnicodeFont font;
private static void setUpFonts()
{
java.awt.Font awtFont = new java.awt.Font("Arial", java.awt.Font.PLAIN, 12);
font = new UnicodeFont(awtFont);
font.getEffects().add(new ColorEffect(java.awt.Color.white));
font.addAsciiGlyphs();
try
{
font.loadGlyphs();
}
catch (SlickException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
try
{
Display.setDisplayMode(new DisplayMode(680, 480));
Display.setTitle("Timer Demo");
Display.create();
}
catch (LWJGLException e)
{
e.printStackTrace();
Display.destroy();
System.exit(1);
}
setUpFonts();
//position
int x = 100;
int y = 100;
//velocity
int dx = 1;
int dy = 1;
//ensure lastframe is updated
lastFrame = getTime();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 680, 480, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
while (!Display.isCloseRequested())
{
// Render
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
//change in position
double delta = getDelta();
if(x + 30 >= 680)
dx = -1;
else if (x <= 0)
dx = 1;
if(y + 30 >= 480)
dy = -1;
else if (y <= 0)
dy = 1;
x += delta * dx * 0.1;
y += delta * dy * 0.1;
glRecti(x, y, x + 30, y + 30);
font.drawString(100, 10, "x is " + x + " y is " + y);
Display.update();
Display.sync(60);
}
Display.destroy();
System.exit(0);
}
}