我希望这最终成为一个简单的问题。
我在 Netbeans 中使用 JOGL 来创建一个像素棋盘,您可以在其中指定每行/列中的图块数量,以及每个图块的颜色(用 0 alpha 绘制这个图块,用完整的 alpha 绘制那个图块)。速度不是问题,效率也不是问题。
这是我的问题:当我尝试使用 glDrawPixels() 时,我的 glCanvas 被稀疏填充而不是完全填充。正如你所看到的,我目前正在尝试制作一个简单的绘图案例,然后再进行更多涉及的内容。我正在用填充字节的值填充一维字节数组。接下来,我将其交给 glDrawPixels() 以写入颜色缓冲区。
我是否错误地处理了字节数组?在实践中(与我见过的几个教程相反),该方法只对实际数据采用 Buffer 的形式,所以这就是我包装字节数组的原因。
此外,该方法似乎期望的数据是您为其指定的维度的两倍。例如,您可以在此处看到,尽管我告诉它管理一个宽高的区域,但它会引发异常,除非字节数组实际上是宽度的两倍和高度的两倍。
我使用 glDrawPixels() 是因为我读到这是管理像素的正确方法。
byte[] src = new byte[(width*2)*(height*2)];
for(int a=0; a<height*2; a++){
for(int b=0; b<width*2; b++){
src[a*b+b]= 127;
}
}
gl.glDrawPixels(width, height,
GL.GL_RED, GL.GL_UNSIGNED_BYTE,
ByteBuffer.wrap(src));
注意宽度和高度是我画布的尺寸(256x256),所以这个操作应该占据整个画布的区域。
我真的很感激你能给我的任何帮助。我对涉及完全不同方法的解决方案很好(只要它们仍然意味着使用 JOGL)。话虽如此,我宁愿不在片段着色器中这样做。谢谢你的时间。