小编Al5*_*678的帖子

使用 Nvidia Optix 和开放资产导入库 (assimp) 进行光线追踪 - 渲染多个网格

我尝试将开放资产导入库(读取各种 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++ mesh nvidia assimp optix

2
推荐指数
1
解决办法
830
查看次数

Malloc和免费多指针

我正在使用一个使用多个缓冲区的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)

然后免费两个?

c++ malloc

0
推荐指数
1
解决办法
4203
查看次数

标签 统计

c++ ×2

assimp ×1

malloc ×1

mesh ×1

nvidia ×1

optix ×1