Articles of 模型加载器

C ++ DirectX FBX SDK导入器怪异网格问题

我在理解如何将fbx模型中的顶点数据渲染为directx时遇到了一些问题。 这是我的两个function,我已经对所有的网格节点进行了三角测量。 bool FBXLoader::CopyVertexData(Mesh* mesh) { FbxVector4 pos, nor; FbxNode* rootNode = mScene->GetRootNode(); if (rootNode) { int iChildNodeCount = rootNode->GetChildCount(); for (int i = 0; i < iChildNodeCount; i++) { // Child Node -> Object FbxNode* fbxChildNode = rootNode->GetChild(i); FbxMesh* fbxMesh = fbxChildNode->GetMesh(); if (!fbxMesh) continue; int iVertexCount = fbxMesh->GetControlPointsCount(); if (iVertexCount > 0) { […]

OpenGL quake 3着色器文件的对象(树)

我决定在我的游戏中添加几棵树,我已经把它的3个模型加载器(md3)的字符和纹理绘制方法存储在* .ini文件中。 我在MD3中发现了一个树的包,我没有单独加载模型的问题,但有一个* .shader文件,我不知道如何加载它来正确地绘制纹理。 树形包: http ://www.custommapmakers.org/wiki/index.php/Models: GR_Trees_set 我不必使用这种格式,我可以编写另一个加载器,但* .obj或.3ds中的树更难看

在XNA中导入FBX时应用骨骼转换

先决条件:我有一些模型,只包含一些网格和一个纹理。 模型中没有animation。 一个例子:一个表的模型。 我想用自定义效果来绘制模型,所以我必须在加载模型后交换效果。 为了正确绘制它们,我必须在每个网格的每个绘图上手动应用骨骼转换,效果可以在这里看到。 所以有两个问题: 在导入过程中是否有一个选项允许我在所有顶点上应用骨骼转换,这样在绘制调用期间,我不应该这样做? 在导入过程中是否有一个选项将所有顶点合并到一个Vertex-和IndexBuffer中,这使得我只用一个调用就可以绘制整个模型? 我很确定内置的“Autodesk FBX-XNA Framework”不支持这个function,但也许还有其他的导入function或者我错过的其他function。 目的是通过使用实例来加速渲染。 所以有一个VertexBuffer一次绘制将是非常好的。

试图抽象OpenGL模型加载但不能绘制三角形…(C ++)

最近,我一直在努力学习现代的OpenGL,并且我认为我已经掌握了它(或者至less是基础知识),但是我一直在尝试在屏幕上做三角形显示,但是看起来并不像工作,我找不到哪里或哪里出了问题。 控制台已经被certificate是徒劳无功的,我已经看了互联网上的例子来获取灵感,但是我找不到我在找的东西。 有些事情要注意: 我知道,着色器工作正常,因为我在程序开始时加载了它们,如果程序运行不正常,错误会出现在程序的控制台中。 我也检查了着色器程序ID 是否正确。 我之前在渲染循环中加载了一个三角形。 但是,我使用const数组而不是使用STL顶点列表,这正是我现在使用的。 没有空的列表。 (无论如何,就我和Visual Studio的检查员而言)。 我创建了一个自定义的结构来帮助加载glVertexAttribPointer,名为“VertexAttribPointerClass” 这可能是一个非常愚蠢的错误。 无论如何,这是代码: GraphicsModel.h #ifndef GRAPHICSMODEL_H #define GRAPHICSMODEL_H #include "ExternalLibraries.h" #include "Shader.h" namespace game { namespace model { namespace gfx { struct VertexAttribPointerClass { // glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0); int _shaderPosition, _vectorSize, _type, _normalised, _stride, _offset; VertexAttribPointerClass() {} VertexAttribPointerClass(int shaderPosition, […]

引擎中支持多种3D格式

添加从多种文件格式(.obj,.3ds …)加载模型的支持的最佳实践是什么? 我应该使用什么类层次(现在我有Mesh类(包含顶点,数据)和MeshLoader类(现在什么都不做))? 我不想写自己的装载机,所以比我必须复制加载的数据到我的结构。 可能你可以展示一些解释它的文章,特别是Mesh类的组织。 提前致谢。

加载Assimp网格时出错

在Assimp中加载网格时,我遇到了一些奇怪的问题。 有些模型完美呈现,而另一些则完全是三角形。 一些示例图片: 茶壶正确 – 茶壶实际 花正确 – 花实际 OBJ下载链接: Teapot.obj – Flower.obj 我已经search了很多,我似乎无法find这个原因。 我已经注意到,在debugging时, ai_mesh->mNumVertices的值与Assimp Viewer或Blender显示的值不同。 在茶壶例子中, ai_mesh->mNumVertices 小了156个顶点,在Flower例子中大了20个顶点。 我认为Assimp后期处理可能会造成这里的差异。 但是,我正在使用与Assimp Viewer中使用的相同的后处理标志,直接从源代码复制。 这是我的网状装载机: mesh::mesh(aiMesh *ai_mesh, model* parent_model) : mesh() { name_ = ai_mesh->mName.length != 0 ? ai_mesh->mName.C_Str() : ""; // Get Vertices if (ai_mesh->mNumVertices > 0) { for (int ii = 0; ii < […]

stream式3D模型 – >统一的android

我想在游戏中join一个function,允许我在服务器上放置原始的3D模型(.fbx / .obj / etc.,不是AssetBundles)。 游戏应该下载这些文件,将它们保存到设备中并将它们加载到场景中。 我想支持多种文件格式,所以编写我自己的parsing器不是一个选项! 第一个想法: 使用WWW类加载模型数据,将其保存为播放器首选项中的string,并根据请求加载它。 (最后一部分是问题) 第二个想法: 使用WWW类加载模型数据,将包含StreamingAssets文件夹的jar文件解压缩到SD卡。 将模型数据写入此目录中的新文件。 从文件夹中创建一个新的ZIP..ah … JAR存档并replace旧的.jar文件。 当然,我需要一个Android插件和一个存档Java库。 然后模型将从资源加载。 (这是一个非常奇怪的想法,不能是正确的方法) 你知道吗,如果有效的话? 有没有人做过这样的事情? 更新1: 我试图使用来自samed-tarık-Çetİn的评论的obj加载器 ,但我得到这个错误: ArgumentNullException: Argument cannot be null. Parameter name: key System.Collections.Generic.Dictionary`2[System.String,UnityEngine.Material].get_Item (System.String key) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:136) GeometryBuffer.PopulateMeshes (UnityEngine.GameObject[] gs, System.Collections.Generic.Dictionary`2 mats) (at Assets/OBJ/src/GeometryBuffer.cs:145) OBJ.Build () (at Assets/OBJ/src/OBJ.cs:236) OBJ+<Load>c__Iterator0.MoveNext () (at Assets/OBJ/src/OBJ.cs:63) 用GeometryBuffer.cssreplace第145行 gs[i].GetComponent<Renderer>().material = […]

ASSIMP OpenGL collada和骨骼animation

首先,我想说,我读了所有的东西,仍然没有弄清楚。 在我的项目中,我需要实现一个蒙皮技术,但在去那里之前,我需要得到标准的线性混合蒙皮工作。 我正在使用assimp来加载我的模型。 为了testing目的,我的模型是一个单一的网格和2个骨头的圆柱体。 没有animation,我的演示的目标是手动移动骨头。 我读了关于assimp和骨骼animation的每个教程/文章。 所以我认为我得到了正确的加载部分。 我从节点获得了mTransformation,并从具有相同名称的网格中获得了offsetMatrix(我用一个映射来存储骨骼/名称)。 我做了一些打印来validation我的结构,我正在加载正确的信息,我得到身份matrix无处不在(我认为是正常的,因为没有animation,它只是一个简单的网格)。 我仍然无法弄清楚的部分是我如何将这些转换应用到我的顶点。 这一点也会影响加载,当我在搅拌机上的网格上应用缩放/平移时,我无法在渲染器中获取它。 在我的骨头里我储存了2个matrix,而且我有第三个matrix代表了最终的变化。 我不明白我将如何计算这一个,我看到一些人使用和逆转换的根变换,我很难编码我不明白的东西。 struct Weights { uint vertexID; float weight; }; struct Bone { Bone():parent(nullptr){} ~Bone() { for(auto p: children) delete p; } std::string name; // bone name QMatrix4x4 nodeTransform; //Transformation of the node QMatrix4x4 offsetMatrix; // Going into the bone's space QMatrix4x4 finalTransfrom; // […]

在3D xna 4中添加一个数组的随机墙

我正在尝试将墙添加到我的3D游戏中。 我创建了一个墙体,并添加了模型数组 public Walls() { modelArray = new Model[10]; } public void Initialize(ContentManager contentManager) { for (int i = 0; i < modelArray.Length; i++) { rnd = new Random(); sidesWall = rnd.Next(-4, 4); forwardWall = rnd.Next(-8, 0); modelArray[i] = contentManager.Load<Model>("wall"); } } 绘制方法: public void Draw(Camera camera) { foreach (Model m in modelArray) { foreach […]

用不同着色器加载模型的问题

我从http://learnopengl.com学习opengl编程。而且我可以加载任何我想要的模型。但是如果我想用不同的着色器加载两个模型,就会出现问题。 例如:首先我绘制两个相同着色器的模型,没有问题。 Model1.Draw(shader); Model2.Draw(shader); 那么如果我这样做: Model1.Draw(shader); Model2.Draw(otherShader); 第一个模型没有被淹没,只有第二个模型被淹没。 这是我的Model.h代码和Mesh.h代码: Model.h: Model.h Mesh.h Mesh.h 如果你想,这些是我的顶点和片段着色器: 着色器:http://pastebin.com/d0v3Y4vU 谢谢你的帮助!