我用Java编写了一个简单的光线追踪器,并使用Swing显示单个像素,但Swing降低了应用程序的速度。我试图将其转换为LWJGL(OpenGL for Java),但我不知道是否有效。我读到一个Stack Overflow帖子,说OpenGL没有针对单个像素进行优化,那么我应该使用什么呢?
目前,我有如下内容:
public void render() {
glBegin(GL_POINTS);
for (int x = 0; x < width; x ++) {
for (int y = 0; y < height; y++) {
Color c = getPixel(x, y);
glColor3d(c.getR() / 255.0, c.getG() / 255.0, c.getB() / 255.0);
glVertex2f(x, y);
}
}
glEnd();
}
我只知道OpenGL的基础知识,因为这个用例非常有限。我不确定这是否是最好的方法,或者我是否可以使用像光栅这样的东西来使它更快(性能很关键,因为这至少渲染了一百万像素)。
1条答案
按热度按时间cl25kdpy1#
使用纹理并将数据流传输到纹理并渲染该纹理。尝试一次将尽可能多的像素值传输到纹理(System.arraycopy等)
此外,如果你真的是认真的性能,你需要使用现代OpenGL至少OpenGL版本3.问题是,你的代码不再工作,学习曲线是相当陡峭。