Я создаю raycaster, используя java, LWJGL и Slick2D. Проблема в том, что я не могу понять, как правильно рисовать из этого байтового массива.рисунок из массива байтов в java LWJGL
Вот как я поместил свою текстуру в colorbuffer. Это работает. Все значения RGB совпадают с значениями в текстуре.
public java.awt.Color[] colorBuffer;
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
c = new java.awt.Color(image.getRGB(x, y));
colorBuffer[y * Width + x] = c;}}
теперь вот как я создаю мой screenbuffer и назначить пикселей на него:
static byte[] buffer;
static int screenTexture;
public static void main() {
buffer = new byte[Display.Height * Display.Width];
screenTexture = GL11.glGenTextures();
texture = new Sprite(new Vector2f(0, 0), "src/Content/Textures/tex1.bmp");
}
// in the raycasting algorithm:
buffer[y * Display.Width + x] = (byte) texture.colorBuffer[texY * texture.Width + texX].getRed();
buffer[y * Display.Width + x + 1] = (byte) texture.colorBuffer[texY * texture.Width + texX].getGreen();
buffer[y * Display.Width + x + 2] = (byte) texture.colorBuffer[texY * texture.Width + texX].getBlue();
buffer[y * Display.Width + x + 3] = (byte) texture.colorBuffer[texY * texture.Width + texX].getAlpha();
и вот как я рисую буфер:
org.newdawn.slick.Color.white.bind();
ByteBuffer b = BufferUtils.createByteBuffer(buffer.length * 4); // times four due to every pixel having RGBA.
for (int a = 0; a < buffer.length; a++) {
b.put(a, buffer[a]);
}
GL11.glBindTexture(GL11.GL_TEXTURE_2D, 2);
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, Display.Width/4, Display.Height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, b);
GL11.glBegin(GL11.GL_QUADS);
{
GL11.glTexCoord2f(0, 0);
GL11.glVertex2f(0, 0);
GL11.glTexCoord2f(1, 0);
GL11.glVertex2f(Display.Width, 0);
GL11.glTexCoord2f(1, 1);
GL11.glVertex2f(Display.Width, Display.Height);
GL11.glTexCoord2f(0, 1);
GL11.glVertex2f(0, Display.Height);
}
GL11.glEnd();
Теперь, скажем, если я создаю текстура, которая представляет собой 3 вертикальные линии: красный, зеленый и синий. Это сделает красное одно белое, а другие - черным, а также добавит несколько цветов к текстуре, дальше вдалеке.
Вот изображение того, как оно выглядит. Файл краски - это оригинальная текстура, а правое - это raycaster.
Кто-нибудь знает, как решить эту проблему?
полностью связанно между собой, что эта точка зрения в вашем нижнем левом углу, который позволяет перемещаться classmembers? – arynaq