Articles of 3d meshes

大块不完全建设

我正在尝试构建一些体素地形,但是我有一些网格的一些面加载不正确的问题。 下面是一张图片: 我认为这与我是如何得到块来绘制或如何绘制它们有关。 因此,这可以是网格管理器中的createVisualMesh函数或网格管理器中的isTransparent函数。 下面是我认为相关的所有代码,如果你需要更多的问题。 网格管理器: using System.Collections; using System.Collections.Generic; using UnityEngine; public class MeshManager : MonoBehaviour { public static ChunkManager chunkManager; public static MeshObject CreateVisualMesh(int chunkSize, BlockType[,,] blocks, MeshObject meshOb, Vector3 chunkPos, Chunk chunk) { MeshManager.chunkManager = World.currentWorld.chunkManager; Mesh visualMesh = meshOb.Mesh; MeshFilter meshFilter = meshOb.MeshFilter; MeshCollider meshCollider = meshOb.MeshCollider; List<Vector3> verts = new […]

了解.obj文件

我下载了一辆汽车的3D模型。 通过可用的皮肤和图像判断模型将车轮和车身作为单独的节点。 我想访问它的子节点(轮子)来指定animation。 但是我不知道它的子节点的名字。 是否有可能通过查看文件内容来找出其子节点的名称。 我有一个3D模型的obj文件。 我正在使用JMonkey 2。 编辑 这里是链接thefree3dmodels 。 先谢谢你

DirectXMesh obj将cmo纹理坐标closures

我无法获得cmo的纹理坐标以匹配如何在搅拌器中展开网格。 我正在使用directxmesh将obj转换为cmo,使用directxtk加载cmo。 相关代码部分如下: std::unique_ptr<DirectX::CommonStates> m_states; std::unique_ptr<DirectX::IEffectFactory> m_fxFactory; std::unique_ptr<DirectX::Model> m_model; … m_states.reset(new CommonStates(d3d11DeviceInterface.Get())); m_fxFactory.reset(new EffectFactory(d3d11DeviceInterface.Get())); m_model = Model::CreateFromCMO(d3d11DeviceInterface.Get(), L"unit.cmo", *m_fxFactory); … m_model->Draw(d3d11DeviceContextInterface.Get(), *m_states, local, view, proj); 搅拌机中的模型和uv地图如下所示: 使用以下directxmesh命令:meshconvert unit.obj -cmo -y -nodds 该模型在程序中看起来像这样: 我认为这将是一个简单的问题翻转纹理坐标通过添加-fliptc开关到directxmesh meshconvert unit.obj -cmo -y -nodds-fliptc 但是这改变了缠绕顺序,导致背面剔除错误的一面。 随后,我试着用-cw开关将剔除的面改为顺时针。meshconvert unit.obj -cmo -y -nodds -fliptc -cw 现在背面剔除发生在正确的面上,但是纹理坐标仍然是错误的。 我对于我做错了什么而感到失望。 编辑:我似乎已经弄清楚是怎么回事。 图像似乎被翻转了V轴。 如果我手动翻转图像的坐标匹配到搅拌机中显示的内容。 这是一个耻辱,我似乎无法find一个在搅拌机的选项沿V轴翻转紫外线坐标。

可变形的地形

我目前正在研究一个3D沙盒,想知道什么是存储世界地形的最好方法。 我正在考虑制作某种网格,就像从一个obj文件中得到的那样,将会定义整个世界。 我会为每种types的地形都有一个(石灰层覆盖一层泥土,石层可能有矿石的“隧道”,每一个都有自己的网格来定义它的形状)。 然后,我将根据他们在世界上的位置将这个网格的一部分传递给玩家。 我想让玩家在一个持久的世界中变形地形,挖洞和洞穴(就像你在行星探索者或太空工程师那里看到的那样),所以不需要在飞行中产生它。 我在网上看过很多关于等值面的post,甚至我search得很远,我找不到明确的定义,或者是否适用于我的情况。 我只是想知道如果将地形存储为网格将是最好的方法。 如果是这样,最好是基于一个严格的x,y,z整数,还是有可能将它作为浮点数存储以获得更多的多样性? 我打算使用行军立方体或双轮廓的光滑地形。 你能给我你的想法吗?

如何在DirectX10中通过SlimDX从.X格式加载网格?

从DirectX10开始,以.X格式加载网格的通常function被标记为已弃用,并且它们仍然是DX9function。 如何使用SlimDX包装器将.X格式的网格加载到ID3DX10Mesh对象中?

为什么一些.obj文件没有换行符?

我正在开发一个游戏引擎,并开始使用网格加载。 我从格式.obj开始。 我遇到了这个问题: 我遵循的指南给了我几个.obj文件来尝试,他们都工作得很好。 然后,我问一个正在使用3Danimation的朋友给我几个.obj文件来尝试另外,但是他的文件在以txt格式打开时不包含任何新行来分隔信息。 (一切都在一条线上)。 我使用的加载函数取决于此来提取信息。 他以某种方式给我的档案不好? 我的function不好,因为它取决于在那里的换行符? (我看不到具有任何其他分隔符的.obj文件…) 我的朋友在Blender中制作并导出了3D模型。 这是我正在遵循的指南。

在Monogame中不绘制的3D对象

我对3D对象的工作还很陌生。 我目前正试图让一个加载在Monogame中。 该对象本身被导入到Blender中,并作为一个fbx文件导出(这是唯一可以获得新内容管道的文件types)。 加载模型的命令在这里: var _model = content.Load<Microsoft.Xna.Framework.Graphics.Model>("Ship"); 而绘制它的代码是: public override void Draw(IDrawParameters p) { // Copy any parent transforms. Matrix[] transforms = new Matrix[_model.Bones.Count]; _model.CopyAbsoluteBoneTransformsTo(transforms); // Draw the model. A model can have multiple meshes, so loop. foreach (ModelMesh mesh in _model.Meshes) { // This is where the mesh orientation is set, as well […]

体素面部爬行(网格简化,可能使用贪婪)

编辑:这只是为了我自己的学习经验,这不是因为性能的原因,我问这个问题。 这是关于一个类似Minecraft的地形引擎。 我将块存储在块(块中的16x256x16块)中。 当我生成一个块时,我使用多种过程技术来设置地形和地点对象。 在生成的时候,我保留了一个一维数组(固体或不固体)和一个单独的一维固体块arrays。 生成后,我遍历固体块检查其邻居,所以我只生成没有固体邻居的块面。 我存储哪些面在他们自己的列表中生成(这是6列表,每个可能的脸/正常)。 在渲染块时,我渲染相机当前块中的所有列表,以及所有其他块中仅列出面向相机的列表。 我通过将所有6个列表存储在一个缓冲区中,然后我只是改变我绘制的范围。 使用这个小着色器技巧的2D地图集Andrew Russell建议,我想将相似的面孔完全合并在一起。 也就是说,如果它们在同一个列表中(相同的正常),彼此相邻,具有相同的光照水平等等。我知道我仍然会以矩形结束,但它应该很容易将我的顶点数减less50%或更好,如果我的估计是正确的。 我的假设是将6个列表中的每一个按照它们所在的坐标轴sorting,然后是另外两个坐标轴(块顶部的列表将按照它的Y值sorting,然后是X,然后是Z)。 单凭这一点,我可以很容易地合并脸部的条纹,但是我希望在可能的情况下合并更多的条纹。 我已经阅读了这个贪婪的网格划分algorithm,但是我很难理解它。 所以,我的问题是: 要执行所描述的面部合并(忽略dynamic地形/照明是否是一个坏主意),是否可能有一个更简单的algorithm? 我也非常乐意接受一个以更简单的方式(链接或解释)来引导贪婪algorithm的答案。 如果实施起来比较容易,或者即使只是做一些小小的事情,我也不介意稍微降低性能。 我担心大多数algorithm都是关注于三角形,而不是四边形,并且以我的方式使用二维地图集,我不知道我可以根据当前的技能来实现三角形。 PS:我已经对每一块都进行了挫败感剔除,并且如上所述,我也在坚固的块之间剔除面孔。 我不闭塞剔除,可能永远不会。 *编辑:我已经实现了我自己的小技巧,可能有一个名字,但我只是通过我的6个列表,按照他们所在的轴sorting,然后是块types,然后是照明级别。 我遍历它们,创建新的矩形,并同时生长(对某个轴有很大偏差)。 这绝对不是最佳select,但速度确实相当快,平均降低了近50%的顶点数。 Byte56的评论是我认为是一个真正的答案,但我不能select答案/赏金。 这里是我处理这个问题后,快速和简单化的方式后,产生完整的初始地形没有任何优化。 假设给出的所有方块都是相同的图像,光照水平,正常等等。每种颜色都是我将要渲染的不同的四边形。 用我的列表按照它们的方式sorting,这是一个非常简单/快速的方法。