我正在研究Renderscript功能并坚持使用A3D(Android 3d)文件格式.我找不到一种简单的方法将Collada文件转换为A3D格式来存储我的搅拌机模型.
我想知道你们是否有想法我可以尝试一下?
有没有人有一个工作代码示例,这样可以看到我做错了什么?
更多信息:http://developer.android.com/reference/android/renderscript/FileA3D.html
编辑:不要误认为Asci3d文件扩展(也是*.a3d)
似乎大多数3D创作应用程序使用Z作为"向上"轴.而SceneKit使用Y作为'向上'轴.SceneKit允许您将场景加载为Collada .DAE文件.通过以下任一方式加载场景时:
SCNScene(named: String?, inDirectory: String?, options: [NSObject : AnyObject]?)
Run Code Online (Sandbox Code Playgroud)
要么
SCNSceneSource(URL url: NSURL!, options: [NSObject : AnyObject]!)
Run Code Online (Sandbox Code Playgroud)
您可以指定选项,包括SCNSceneSourceConvertToYUpKey和SCNSceneSourceConvertUnitsToMetersKey.
相应地设置这些,我期望当我将它们添加到从加载的场景中的节点构造的我自己的场景中时,各个节点被变换和缩放.但这些选项似乎没有效果.
let myScene = SCNScene(named: "Scene.dae", inDirectory: nil, options: [SCNSceneSourceConvertToYUpKey:true, SCNSceneSourceConvertUnitsToMetersKey:25.4])
Run Code Online (Sandbox Code Playgroud)
我误解了这些选项参数的含义吗?
可能重复:
xPath只发现*
我试图使用xml来解析.COLLADA文件.问题是,xpath()
如果根标签具有xmlns属性,我似乎无法使用它来访问元素.
例如,这有效:
$string = <<<TEST
<?xml version="1.0" encoding="utf-8"?>
<COLLADA version="1.4.1">
<library_materials>
<material id="Material" name="Material">
<instance_effect url="#Material-effect"/>
</material>
<material id="Material2" name="Material">
<instance_effect url="#Material-effect2"/>
</material>
</library_materials>
</COLLADA>
TEST;
$lol = new SimpleXMLElement($string);
print_r($lol->library_materials->xpath("material[@id='Material2']"));
Run Code Online (Sandbox Code Playgroud)
但这不是:
$string = <<<TEST
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<library_materials>
<material id="Material" name="Material">
<instance_effect url="#Material-effect"/>
</material>
<material id="Material2" name="Material">
<instance_effect url="#Material-effect2"/>
</material>
</library_materials>
</COLLADA>
TEST;
$lol = new SimpleXMLElement($string);
print_r($lol->library_materials->xpath("material[@id='Material2']"));
Run Code Online (Sandbox Code Playgroud)
xmlns如何突然使xml树无法使用?我认为它只是定义了命名空间,因此您可以将其与其他命名空间中的其他相同标记区分开来.我错过了什么?
我尝试使用WebGL和Three.js显示一些Collada文件.我试过THREE.ColladaLoader()
但它返回一些材料错误.
我看到可以将文件转换为JSON,然后将其导入WebGL.
我环顾四周,但没有任何解决办法......
任何线索?
这是我目前的结果:
正如您所看到的,模型中存在许多空白.我的猜测,为什么会发生这种情况,我不知何故需要<vcount>
在<polylist>
元素中包含数据,这应该确定每个平面的顶点数(?).由于WebGL只能绘制三边形多边形,因此这似乎无法工作.如果到目前为止我的假设是正确的,我需要将所有四边形切成两个三角形.
我已经用WebGL对collada解析做了很多研究,但几乎每个站点都将我重定向到几个已经实现了这些功能的WebGL库(所以请不要这样做).我总是首先编写所有核心功能,以便更好地掌握内部工作方式.
这是我的解析函数:
function load_collada(gl, program, path) {
var request = new XMLHttpRequest(),
buffers = {
vbo: gl.createBuffer(),
nbo: gl.createBuffer(),
ibo: gl.createBuffer(),
aVertex: gl.getAttribLocation(program, "aVertex"),
aNormal: gl.getAttribLocation(program, "aNormal")
},
mesh,
vertices,
indicesList,
normals = [],
indices = [];
request.open("GET", path, false);
request.overrideMimeType("text/xml");
request.send();
mesh = request.responseXML.querySelector("mesh");
vertices = mesh.querySelectorAll("float_array")[0].textContent.split(" ");
normals = mesh.querySelectorAll("float_array")[1].textContent.split(" ");
indicesList = mesh.querySelectorAll("polylist p")[0].textContent.split(" ");
for (i=0 ; i < indicesList.length; i+=2) { indices.push(indicesList[i]); }
buffers.vbo.count = parseInt(mesh.querySelectorAll("float_array")[0].getAttribute("count"), 10);
buffers.nbo.count = …
Run Code Online (Sandbox Code Playgroud) 这有效
let scene = SCNScene(named: "house.dae")
Run Code Online (Sandbox Code Playgroud)
是否有节点的等价物?
let node = SCNNode(geometry: SCNGeometry( ..??.. "house.dae" ..??.. ))
Run Code Online (Sandbox Code Playgroud)
我已经搜索了高低,找不到任何将整个dae文件加载到SCNNode中的内容.(不只是一个ID)
我想从服务器下载3D Object-dae(collada)文件,并希望动态显示在表面上,所以请分享如何通过SceneKit在ARKit中实现这个目标?
我想将纹理图像文件包含在我的collada文件中.现在我有很多文件:.dae本身和.png纹理文件.
但是我只想要一个文件:.dae,但包含了纹理.
我可以以某种方式将.png图像存储在.dae文件中吗?可能吗?先感谢您!
首先,我对 3D 建模的经验很少,所以这可能是一个措辞不好的问题。如果是这样的话,那么我深表歉意。
本质上,我有一个 COLLADA 格式 3d 模型的大型数据库,需要在网站的图库中显示。模型的数量约为数千个,因此最好将任何类型的显示格式自动化。
我最初的想法是使用 WebGL 以 3D 方式显示这些文件。然而,不幸的是,Internet Explorer 缺乏支持是一个大问题。
此外,任何其他用于 3D 模型显示的 Javascript API 就加载时间而言可能都是不可行的,因为它们不涉及任何类型的硬件加速。
我的下一个最佳选择是从不同角度拍摄模型的多个二维图像。然而,考虑到该数据库中模型的数量,手动输出每个模型的二维图像几乎是不可能的。
那么,我的问题是:是否有任何工具可用于从大量 3D 模型自动生成图像?或者,更好的是,是否有一种方法可以直接从模型渲染这些图像并在浏览器中显示,而无需过多的加载时间?
太感谢了!
将 SceneKit 场景的内容导出到 Collada (.dae) 文件时,我得到了意外的结果。这是我到目前为止所拥有的。
我创建了一个沿 x 轴有 5 个球体的简单场景
var x:CGFloat = 0
for i in 0...4 {
let sphere = SCNNode(geometry: SCNSphere(radius: 1))
sphere.name = "sphere\(i+1)"
sphere.position = SCNVector3(x: x, y: 0, z: 0)
exportScene.rootNode.addChildNode(sphere)
x += 2
}
Run Code Online (Sandbox Code Playgroud)
并导出内容
let url = URL(fileURLWithPath: pathName)
exportScene.write(to: url, options: nil, delegate: nil) { totalProgress, error, stop in
print("Export progress: \(totalProgress * 100.0)%")
}
Run Code Online (Sandbox Code Playgroud)
当我将 .dae 文件加载到 3D 程序 (Cheetah 3D) 中时,我期望沿 x 轴有 5 个相同的球体,但出现以下内容。我在导出到 .obj 文件时遇到了类似的问题。
下面的答案是“请记住,DAE …