在两个渲染之间调整渲染器的大小

时间:2013-06-05 16:47:54

标签: javascript three.js raytracing

我正在构建一个依赖于three.js的webGL光线跟踪器。 为了加速计算并使其成为实时,而不是光线跟踪屏幕的所有像素,我只考虑它们的一个子集(我考虑像素块而不是每个像素独立)。

因此我使用的是不同的阴影,即:

  1. 将光线跟踪器应用于像素子集,并将生成的图像存储在纹理中 (纹理的大小为screenWidth / blockSize,screenHeight / blockSize)。
  2. 在全屏四边形上渲染纹理
  3. 以下是它的three.js代码:

    // first rendering: render the scene in a low resolution texture
    rayTracingRenderer.setSize(window.innerWidth/blockSize,window.innerHeight/blockSize);
    rayTracingRenderer.render(scene, camera, texture, true);
    
    // second rendering: render the texture on a full screen quad
    rayTracingRenderer.setSize(window.innerWidth,window.innerHeight);
    rayTracingRenderer.render(scenePostProcess, cameraRTT);
    

    为了计算第一次渲染的较低像素数,我只是减小了渲染器的大小。我之后调整大小以计算适当数量的像素。

    但是这段代码不起作用:它打印出一个带有白噪声的黑屏。 显然问题来自于 我在两个render()调用 之间调整渲染器的大小。实际上,无论价值如何,我都会为所有人设置一次分辨率。

    例如,当我将分辨率设置为screenWidth / blockSize时,screenHeight / blockSize我在屏幕上得到一个小图像,当我将其设置为screenWidth时,screenHeight我得到了一个全屏模糊图像。 (全屏模糊图像是预期的结果,纹理大小为低分辨率,但处理的像素数是屏幕的像素数,因此我根本没有加速任何东西。)

    你能否发现我本可以犯的任何错误,或者这是一个错误,我应该继续解决?

0 个答案:

没有答案