私はゲームプログラミングの比較的初心者です。BufferedImage
を使用してピクセルを描画する方法を知っていますsetPixel()
。大きなフォーマットでは恐ろしく遅いので、先に進んで見つけましVolatileImage
た(1週間ほどかかりました)。線、文字列、四角形などを描くのはかなり簡単ですが、個々のピクセルを描くことはできません。すでに使用してみdrawLine(x,y,x,y)
ましたが、800x600 の画像で 3 ~ 4 FPS が得られます。setPixel()
Java にまたはsetRGB()
が含まれていなかったという事実はVolatileImage
、私をかなり怒らせ、混乱させます。
4 つの質問があります。
VolatileImage に個々のピクセルを描画する方法はありますか? (FPS > 40 の 1440x900 フォーマット)
より高速な方法で BufferedImage にピクセルを描画できますか? (同じ 1440x900、FPS > 40)
3D ゲームに十分な速度でピクセルを描画する他の方法はありますか?
BufferedImage ハードウェアを高速化できますか (使用しようとし
setAccelerationPriority(1F)
ましたが、動作しません)
何かアイデアがあれば教えてください。この情報がなければゲームを作り続けることはできません。3D レンダリング アルゴリズムは既に作成しましたが、高速なピクセルを描画できるようにする必要があります。私はこのゲームについて良い感触を持っています。
あなたが私を助けるのを助けることができるならば、これはコードです:
public static void drawImageRendered (int x, int y, int w, int h) { // This is just a method to test the performance
int a[] = new int[3]; // The array containing R, G and B value for each pixel
bImg = Launcher.contObj.getGraphicsConfiguration().createCompatibleImage(800, 600); // Creates a compatible image for the JPanel object i am working with (800x600)
bImg.setAccelerationPriority(1F); // I am trying to get this image accelerated
WritableRaster wr = bImg.getRaster(); // The image's writable raster
for (int i = 0; i < bImg.getWidth(); i++) {
for (int j = 0; j < bImg.getHeight(); j++) {
a[0] = i % 256;
a[2] = j % 256;
a[1] = (j * i) % 256;
wr.setPixel(i, j, a); // Sets the pixels (You get a nice pattern)
}
}
g.drawImage(bImg, x, y, w, h, null);
}
私は、 OpenGLやその他の外部ライブラリを使用せず、単純な Java だけを使用したいと考えています。