问题标签 [assimp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
317 浏览

c++ - 使用指针进行导入器清理

我正在尝试使用 Assimp 导入一些动画文件并将它们添加到现有动画列表中。但是我在使用 aiAnimation->mChannels(类型 aiNodeAnim**)时遇到问题,因为当我的函数返回时,我的新 aiAnimation 对象的 mChannels 指针无效。这是因为 Assimp 的 Importer 在销毁时会自行清理。我需要的是复制通道,以便在导入器超出范围时不会删除它们。

这是我的动画附加函数,它按照我的预期进行更新,但在从函数返回时会产生运行时异常“Engine.exe 已触发断点”。

0 投票
1 回答
1057 浏览

import - Assimp 与 MeshLab 波前对象 (.obj) 导入

我想知道为什么当我使用 Assimp 库导入 Wavefront 对象文件(.obj)时,它会使某些顶点加倍,我在 Assimp SourceForge 讨论中找到了以下答案(http://sourceforge.net/p/assimp/discussion/ 817654/thread/026e9640/?limit=25#ba6c):

想象一下:您将一系列顶点上传到显卡。然后,您通过索引缓冲区告诉 GPU,您希望第一个三角形由顶点 3、6 和 7 组成。第二个三角形是 1、2 和 6。会发生什么?GPU 会为您绘制一个立方体,但立方体的每个角都将共享相同的 UV 数据、法线向量、顶点颜色或您的网格所需的任何其他内容。

现在我们如何获得一个立体角,但在接触该角的所有侧面都获得不同的 UV 映射?我们不能告诉 GPU “使用顶点 3,但不要使用该顶点的 UV 坐标,而是请使用 UV 坐标”。GPU 无法做到这一点。这就是为什么有必要在那个角落复制顶点。现在您有两个顶点用于相同的位置,但具有不同的 UV 坐标。

这就是 Assimp 正在为您做的事情。如果您确实指定了 JoinIdenticalVertices,您将获得一个具有 24 个顶点的立方体。为什么?一个立方体有 8 个角,但每个角有 3 个立方体面相接触,每个立方体面都为该角设置了不同的 UV 坐标,因此您最终会得到每个角的 3 个版本。如果您不指定 JoinIdenticalVertices,您将获得一个没有任何重用的普通顶点数组。这意味着您需要 2 个三角形,每个立方体的每个边都有 3 个顶点,最终有 36 个顶点。

另一种方法是使用 3D uv 坐标和立方体贴图来纹理该立方体。这是一个仅适用于多维数据集的特殊情况,但在那里它会起作用。然后 GPU 在内部映射到 6 个纹理。上面的描述是一般情况,它适用于您可能遇到的每个网格。

这确实有道理。
假设我不知道 MeshLab 如何处理 .obj 导入操作,如果我找到的答案是正确的,那么当我导入这样的对象时,顶点计数器不会增加?仅仅是他们如何进行计数的问题,还是有办法导入 .obj 文件而不必在顶点有法线/切线/UV时拆分它们?

0 投票
0 回答
752 浏览

makefile - 使用 MinGW 构建 Assimp

所以,我现在花了几个小时试图用 mingw 构建 Assim。我重新安装了 mingw 并重新下载了 assimp,但我不断收到错误消息。

我从 CMake 开始,选择 MinGW Makefiles 作为项目的生成器和 Radio Box Use Default 本机编译器。2)之后我得到这个错误:

在此处输入图像描述

我设法通过将目录 C:/MinGW/mingw32 重命名为其他名称来完成这项工作。

更改名称后,我再次启动该过程:该过程没有给我任何错误,所以它似乎工作正常。问题是它在配置过程中给了我这个消息:

所以我不知道这是否有问题。我忽略了这一点并生成文件。

现在使用 windows Power Shell 我进入 Makefile 所在的文件夹 ....assimp-3.1.1/build,然后我给出命令:

它现在开始构建,一段时间后它显示以下错误消息:

在此处输入图像描述

我曾经使用 Visual Studio 进行 assimp,但我不得不更改为另一个 IDE,现在我完全迷失了。

0 投票
2 回答
684 浏览

opengl - OpenGL:3D 模型未正确渲染,仅渲染为 2D?

我正在尝试使用 Assimp 加载一个简单的八面体。这就是模型应该看起来的样子:

在此处输入图像描述

但是,这是我的代码呈现的内容:

在此处输入图像描述

显然,这是不正确的。我不确定我的代码哪里出了问题,尽管我怀疑是 OpenGL 而不是 Assimp 代码。

这是我的代码:

代码断断续续,可以大大改进,虽然我对 OpenGL 很陌生,所以我不确定到底如何。在这方面的任何建议将不胜感激!

以下是运行时产生的日志供参考:

0 投票
2 回答
786 浏览

opengl - 波前资源材料格式的简单好奇心

我已经集成了“Assimp”库来加载我的 OBJ/MTL 文件组件。

一切正常。

但让我们关注以下 MTL 文件示例:

让我们检查以下代码:

这是输出:

如您所见,所有功能都完美无缺,关键字“map_Ka、map_Kd、map_Ks 和 map_Bump”分别指的是环境、漫反射、镜面反射和凹凸(高度)贴图。所以这些关键词是正确的。

但是例如法线纹理(用于法线贴图)和置换纹理(用于置换贴图)呢?

我试图在我的 MTL 文件中添加以下行来测试:

使用代码:

和输出:

因此关键字“map_Normal”和“map_Disp”不正确,因此不是 Wavefront MTL 文档的一部分。

我无法尝试找到有关 WaveFront MTL 格式的正确和官方文档(只有 Wikipedia 或教程上的文档,没有任何官方和完整的文档)。

是否存在有关 Wavefront MTL 和 OBJ 格式的官方文档,其中解释了所有关键字?

如果不是这样,有人知道法线和置换纹理的关键字吗?

0 投票
1 回答
984 浏览

c++ - 使用 Assimp 编译和执行 Qt5 项目时程序崩溃

我想实现一个可以使用 Assimp(Assimp的链接)将 3D 模型加载到 OpenGL 中的程序。

我的 Qt 版本是 5.3.2。我使用 Qt Creator 并修改.pro文件以导入 Assimp 库:

然后我尝试box.obj在我的程序中阅读:

然后编译完成,没有错误。然后程序在启动后就崩溃了。

开始 G:\QtProject\QtTest\build-MyOpenGL-Desktop_Qt_5_3_MSVC2010_OpenGL_32bit-Debug\debug\MyOpenGL.exe ...

G:\QtProject\QtTest\build-MyOpenGL-Desktop_Qt_5_3_MSVC2010_OpenGL_32bit-Debug\debug\MyOpenGL.exe 崩溃

我尝试调试,但断点似乎不起作用。

我删除了一些代码并声明scene

程序可以再次运行!

我现在真的很困惑。谁能帮我?

0 投票
1 回答
775 浏览

c++ - 导入 .obj 时出现未处理的异常

在过去的两周里,我一直试图让 Assimp 正常工作,但无济于事,所以我决定在这里问是最好的办法。我按照 thecplusplusguy 的关于导入静态网格的教程进行了操作,并且我逐字逐句地复制了它以使其能够正常工作。

当我尝试导入一个 .obj(一个立方体,如果这很重要)它说我有一个“OpenGL.exe 中 0x00EF061B 处的未处理异常:0xC0000005:访问冲突读取位置 0xABABAFFB”,它停止程序并告诉我它在线我的 30 段代码(“for(int i=0;imNumMeshes;i++)”)。

当我添加 couts 对其进行调试时,“scene->mNumMeshes”返回 1(它应该返回 1,因为它是一个立方体),但“node->mNumMeshes”返回 0。

我知道当有一个空指针时会发生未处理的异常,并且这里的空指针是“node->mNumMeshes”,但为什么它是空的?我将如何解决这个问题?

0 投票
0 回答
2077 浏览

visual-studio-2013 - 使用 Cmake 和 VS2013 静态构建 Assimp:找不到 assimpd.pdb

我正在尝试在 Windows 上静态构建 Assimp,以便稍后制作独立的可执行文件。这是我所做的:

  1. 我下载了 3.1.1 版本并使用了 Cmake GUI。
  2. 我取消选中 BUILD_SHARED_LIBS 并检查了 ASSIMP_BUILD_STATIC_LIB
  3. 点击配置和生成
  4. 在管理员模式下使用 Visual Studio 2013 打开解决方案
  5. 右键单击 ALL_BUILD 并构建

此时一切正常。然后我尝试构建安装(右键单击>构建),但失败了:

我有两个问题:

  1. 我是否应该真正构建 INSTALL,因为我只想要一个静态构建?
  2. 如果是,我做错了什么/我应该怎么做才能解决这个问题?

非常感谢您的宝贵时间!

PS:我检查了目录Debug,只有一个assimpd.lib

0 投票
1 回答
4094 浏览

c++ - Dev IL 链接和编译错误 (0xc000007b)

我正在努力使这个项目工作Link to Lighthouse



首先是一堆信息:

我正在使用:Windows 7 Pro 64 位和 Visual Studio 2013 Ultimate
(我认为是 32 位的默认设置项目)

关于库:
DevIL:我下载并安装了这个适用于 32 位 Windows
Assimp 的 DevIL 1.7.8 SDK: assimp--3.0.1270-sdk

项目设置:
平台: Active(Win32)
配置:所有配置

库目录:
C:\assimp--3.0.1270-sdk\lib\assimp_release-dll_win32;C:\DevIL\lib

包含目录:
C:\assimp--3.0 .1270-sdk\include;C:\DevIL\include

库目录:
C:\assimp--3.0.1270-sdk\lib\assimp_release-dll_win32;C:\DevIL\lib

C/C++ -> 常规 -> 附加包含目录:
C:\assimp--3.0.1270-sdk\include;C:\DevIL\include

链接器 -> 输入 -> 附加依赖项:
%(AdditionalDependencies)



好的,现在当我编译我的项目时,我收到错误:


通过注释掉代码行(无法调试),我发现了错误发生的位置:

有谁知道这里发生了什么?我该如何解决这个问题?
我想使用这段代码的一部分在我的 OpenGL 3.3 项目中渲染 3D *.OBJ 模型。


如果需要,这是我的调试日志:

0 投票
1 回答
7651 浏览

c++ - 使用 assimp 加载 mtl 颜色

我一直在尝试使用ASSIMP加载Wavefront obj模型。但是,我无法让 mtl 材料颜色起作用。我知道如何加载,但是,我不知道如何为每个顶点获取相应的颜色。(Kd rgb)

例如,上面的 Wavefront obj 片段意味着这些顶点使用 material_11。

Q:那么如何获取每个顶点对应的材质呢?

错误

Wavefront obj材质不在正确的顶点中:

原始模型(使用 ASSIMP 模型查看器渲染): 在此处输入图像描述

用我的代码渲染的模型: 在此处输入图像描述

代码:

我用于加载 mtl 材料颜色的代码:

创建顶点的代码:

编辑

看起来模型顶点位置也没有正确加载。即使我禁用面部剔除并更改背景颜色。

在此处输入图像描述