我尝试将开放资产导入库(读取各种 3D 模型文件类型)的多功能性与 NVidia Optix 光线追踪相结合来渲染模型。
到目前为止,只要我渲染的模型由单个网格组成,它就可以工作。当我尝试渲染具有多个网格的文件时,我只得到部分结果。我无法缩小问题所在,寻找一些见解。相关代码在这里:
使用 assimp 导入器加载文件并创建 optix 缓冲区:
int loadAsset(const char* path)
{
Assimp::Importer importer;
scene = importer.ReadFile(
path,
aiProcess_Triangulate
//| aiProcess_JoinIdenticalVertices
| aiProcess_SortByPType
| aiProcess_ValidateDataStructure
| aiProcess_SplitLargeMeshes
| aiProcess_FixInfacingNormals
);
if (scene) {
getBoundingBox(&scene_min, &scene_max);
scene_center.x = (scene_min.x + scene_max.x) / 2.0f;
scene_center.y = (scene_min.y + scene_max.y) / 2.0f;
scene_center.z = (scene_min.z + scene_max.z) / 2.0f;
float3 optixMin = { scene_min.x, scene_min.y, scene_min.z };
float3 optixMax = { scene_max.x, scene_max.y, scene_max.z };
aabb.set(optixMin, optixMax);
unsigned …Run Code Online (Sandbox Code Playgroud) 我正在使用一个使用多个缓冲区的c ++程序,并且在运行程序的几分钟内我遇到了一个seg错误.我不确定正确的方法.我认为给我错误的代码目前是这样的:
int *myBuf1, *myBuf2;
myBuf1 = (int*)malloc(sizeof(int) * maxPacketSize);
myBuf2 = myBuf1;
// do work
if(myBuf1) {
free(myBuf1);
}
myBuf1 = NULL;
myBuf2 = NULL;
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是:使用赋值'myBuf2 = myBuf1',myBuf2是否使用sizeof(int)*maxPacketSize分配不同的内存块,还是只是指向myBuf1分配的同一内存块的指针?
其次,我应该释放myBuf2以及myBuf1,然后将它们都设置为NULL吗?上面我只是释放myBuf1.或者,最好是这样做:
myBuf1 = (int*)malloc(sizeof(int) * maxPacketSize);
myBuf2 = (int*)malloc(sizeof(int) * maxPacketSize);
Run Code Online (Sandbox Code Playgroud)
然后免费两个?