gpt4 book ai didi

opengl - glDrawPixels 的像素位置错误

转载 作者:行者123 更新时间:2023-12-02 08:47:28 24 4
gpt4 key购买 nike

我一直在尝试使用 java 和 lwjgl 在 opengl 中绘制 320 x 240 全屏分辨率的图像。我将分辨率设置为 640 x 480,并将像素大小加倍以填充空间。经过大量的谷歌搜索后,我发现了一些关于使用 glDrawPixels 函数来加速绘制到屏幕的信息。我想通过为屏幕上的所有像素分配随机颜色来测试它,但它不会填满屏幕。我将宽度分成 4 个部分,每个部分 80 像素,并将它们涂成红色、绿色、蓝色和白色。我看到我正在交错颜色,但我不知道如何交错。

这是输出的图像:

img

这里是我运行 openGL 代码的地方:

// init OpenGL
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 640, 0, 480, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);

while (!Display.isCloseRequested()) {
pollInput();

// Clear the screen and depth buffer
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);



randomizePixels();
GL11.glRasterPos2i(0, 0);

GL11.glDrawPixels(320, 240,GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE,buff);

GL11.glPixelZoom(2, 2);


Display.update();
}
Display.destroy();
}

这里是我创建像素颜色数据的地方:

public void randomizePixels(){
for(int y = 0; y < 240; y++){
for(int x = 0; x < 320; x+=4){
/*
pixels[x * 320 + y] = (byte)(-128 + ran.nextInt(256));
pixels[x * 320 + y + 1] = (byte)(-128 + ran.nextInt(256));
pixels[x * 320 + y + 2] = (byte)(-128 + ran.nextInt(256));
pixels[x * 320 + y + 3] = (byte)(-128 + ran.nextInt(256));
*/

if(x >= 0 && x < 80){
pixels[y * 240 + x] = (byte)128;
pixels[y * 240 + x + 1] = (byte)0;
pixels[y * 240 + x + 2] = (byte)0;
pixels[y * 240 + x + 3] = (byte)128;
}else if(x >= 80 && x < 160){
pixels[y * 240 + x] = (byte)0;
pixels[y * 240 + x + 1] = (byte)128;
pixels[y * 240 + x + 2] = (byte)0;
pixels[y * 240 + x + 3] = (byte)128;
}else if(x >= 160 && x < 240){
pixels[y * 240 + x] = (byte)0;
pixels[y * 240 + x + 1] = (byte)0;
pixels[y * 240 + x + 2] = (byte)128;
pixels[y * 240 + x + 3] = (byte)128;
}else if(x >= 240 && x < 320){
pixels[y * 240 + x] = (byte)128;
pixels[y * 240 + x + 1] = (byte)128;
pixels[y * 240 + x + 2] = (byte)128;
pixels[y * 240 + x + 3] = (byte)128;
}

}
}
buff.put(pixels).flip();
}

如果您能弄清楚为什么我无法让像素与我希望它们对齐的 x 和 y 坐标对齐,那就太好了。我读到 glDrawPixels 可能不是将像素绘制到屏幕的最佳或最快的方法,但我想了解为什么在我必须继续使用其他方法之前会遇到这个特定问题。

最佳答案

只需将图像(未缩放)加载到纹理中并绘制带纹理的四边形。

不要使用 glDrawPixels。此功能在大多数驱动程序中从未得到适当优化,自 OpenGL-2 以来已被弃用,并从 OpenGL-3 核心及更高版本中删除。

关于opengl - glDrawPixels 的像素位置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11339273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com