Я относительный новичок в программировании игр. Я знаю, как рисовать пиксели до BufferedImage
, используя setPixel()
. Это ужасно медленно в больших форматах, поэтому я переехал и нашел VolatileImage
(занял у меня неделю или около того). Довольно легко рисовать линии, строки, прямоугольники и т. Д., Но я не могу рисовать отдельные пиксели. Я уже пробовал использовать drawLine(x,y,x,y)
, но я получаю 3-4 FPS на изображении 800x600. Тот факт, что java не включал setPixel()
или setRGB()
в VolatileImage
, делает меня довольно злым и смущенным.Почему у VolatileImage нет метода set/getPixel()
У меня 4 вопроса:
Есть ли способ, чтобы сделать отдельные пиксели на VolatileImage? (в форматах 1440x900 с FPS> 40)
Можно ли рисовать пиксели в 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.
Хороший рабочий чувак, ну, я не знаю, как вы собираетесь нарисовать изображение цели, но у меня нет проблем с временем обновления буферизованным изображением и живописью (точно с чистыми пикселями setRGB()), [это пример] (http://arashmd.blogspot.com/2013/07/java-thread-example.html#lc) может помочь, речь идет о чем-то вроде экранной заставки, и у меня есть более 60 FPS с только процессором, более 500 FPS с GPU –
Все еще не нашел ничего, что могло бы мне помочь –
, так вы рисуете изображение параллельно? как вы управляете целевым изображением/фальш-рисунком чуваком? –