我正在制作一种射线追踪器,它可以工作,但还没有照明。对于那些不知道的人,射线追踪器的工作方式是通过屏幕的每个像素从摄像机(观看者)发出光线,测试物体在3D空间中的碰撞,如果光线击中物体,则给像素着色。
你必须运行每个像素的计算,这是很多的计算。所以我对每一列像素都有一个线程。目前,我正在实现Runnable。这提高了程序的速度,并且对外部进程的总体处理速度没有明显的影响(这是很好的)。
对于照明,我将采取在三维空间的一点,相机的光线与物体相交,并确保这一点应该被点燃(计算所有的光源,它有足够的潜力,足以保证多线程)。
我可以想象,让线程创建更多的线程(2D线程)是一种糟糕的实践,但是是否有一些库或方法来实现这一点,从而提高效率呢?我知道这不会导致无限递归,但我也不想让我的CPU超载。本质上,我如何处理一个需要"2D线程“安全的过程?
发布于 2016-04-11 21:31:34
您只需使用ExecutorService来管理线程。也许可以尝试使用Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())。
Runnable实现可以创建更多的Runnable实例并将它们提交给同一个ExecutorService。如果您确信它不会创建无限递归,那么它应该运行到完成,并且不会使用比硬件可用的线程更多的线程。唯一需要注意的是,您没有创建那么多Runnable实例,以致于内存不足。您还需要跟踪所有Runnable实例何时完成,但是服务提供了这样做的机制(参见Java中的Future )。
发布于 2016-04-12 17:32:47
如果你在每一个线程做一列,你就失去了平铺射线一致性的优势之一。虽然,老实说,我从来没有发现它特别有优势,但话说回来,我不使用阿诺德或精神射线.我试着从一条射线开始,把你的质量提高到尽可能高的水平,然后把你的图像中的正方形移到不同的线上.
https://stackoverflow.com/questions/36559529
复制相似问题