我正在通过 Nvidia Optix 样本拍摄 3D 模型的照片。我修改了 Optix SDKprogressivePhotonMap 以达到我的目标。我的progressovePhotonMap 代码和OpenGL 代码中具有相同的相机位置、相同的相机方向和相同的视野(FOV)。但是,相机的视图彼此有很大不同,如下所示。
输出图像:
左边是progressivePhotonMap的输出图片,另一边是OpenGL的输出。您可以看到左下电源点(由两条红线的交点表示)在两张图片中不在同一位置。
我知道 Optix 是基于 OpenGL 编写的,所以我很困惑为什么这两张图片(相机视图)在相同的相机参数中不一样。
这是我认为的原因:
1.可能是near和far参数的问题,因为在GlutDisplay.cpp中显示帧,gluPerspective()没用。我不能给出近和远参数。(即使在 ppm.cpp 中)那么我如何以及在哪里添加这两个参数?
2.也许optix投影平面不在近平面?在OpenGL中,我们可以将近平面视为投影平面,但在optix中却不行?
3.也许optix中3D模型的呈现方式与OpenGL不同???(我发现这两张图片有不同的失真)所以我不能避免这种情况吗?
我跟踪了整个项目并没有找到任何有用的信息,有人可以帮助我或就为什么会发生这种情况提供一些想法/建议吗?我将非常感谢任何回应。谢谢!
有一些简短的源代码,希望对您有所帮助。
在 OpenGL 中:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluPerspective(FOV,(GLdouble)windWidth / (GLdouble)windHeight , NEAR, FAR);
gluLookAt(camera_pos[0],camera_pos[1],camera_pos[2],
look_at_target[0],look_at_target[1],look_at_target[2],
up_vector[0], up_vector[1], up_vector[2]);
在 optix 中:
InitialCameraData init_camera;
init_camera = InitialCameraData( make_float3( camera_pos[0], camera_pos[1],camera_pos[2]),make_float3(look_at_target[0],look_at_target[1],look_at_target[2]),make_float3( 0.0f, 1.0f, 0.0f )/*up*/,FOV );
GLUTDisplay::setCamera(init_camera);
signalCameraChanged();
更新于 4/21 16:11 重新输出图像
我重新输出图片并发现 hfov(horizontal FOV) 可能是原因,在两张图片中,我的屏幕中窗口的高度似乎相同。据我所知,hfov 和 vfov 在 OpenGL 中的 gluPerspective 中是相同的。所以我认为 hfov 是我的 optix 代码中这两种相机视图不同的原因。
但是,我仍然不知道如何修改 ppm.cpp 中的 hfov。我一直认为我给 InitialCameraData 的 FOV 可以表示 hfov 和 vfov。如果这个想法是错误的,我应该在哪里修改 hfov?我只能调整 vfov 参数作为源代码显示。熟悉progressivePhotonMap示例的任何人都可以告诉我在哪里修改hfov吗?感谢任何回应!