从数据库中加载3D模型并在Three.js中使用它。

5
现在我的任务是从MySQL数据库中加载一个3D模型,并在Three.js中使用它。
这是我所做的:
我创建了一个像这样的数据库:
models{model_id int(4), model mediumblob};

我可以成功地将以JSON格式存储的3D模型从数据库中加载和导出。

我知道如何从数据库检索数据。

但我的问题是 -“如何使从数据库加载的JSON文件可被Three.js使用?”

我按照常规方式加载Json文件,如下所示:

// instantiate a loader
var loader = new THREE.JSONLoader();

    // load a resource
    loader.load(
    // resource URL
    'models/animated/monster/monster.js',
    // Function when resource is loaded
    function ( geometry, materials ) {
        var material = new THREE.MultiMaterial( materials );
        var object = new THREE.Mesh( geometry, material );
        scene.add( object );
    }
);

这是来自Three.js文档的示例代码。

资源URL似乎是物理上位于根目录中的文件。 但我无法想象如何将从数据库获取的模型加载到Three.js中?

我不需要任何代码。

只需指导我如何在Three.js中加载文件。

我熟悉加载简单图像。但那是基于HTML的。而这个问题是针对Three.js的。


我不使用路径来加载图像,而是从数据库中获取。实际上,我会查询图像数据。但是你能给我一个使用JSONLoader加载JSON的例子吗? - Yashwanth CB
我希望我没有滥用评论区。 - Yashwanth CB
你没有理解我的问题。模型的链接不是问题。我已经将模型保存在数据库中。如何从数据库中检索该模型并在THREE.js中使用它? - Yashwanth CB
如果你将 $row['pname'] 输出到一个 js 变量中,然后替换变量中的模型路径变量,它应该可以工作。注释不适合这个。我会尽快发布代码建议。 - Sam0
我不知道你的设置,但js不能直接查询php。我在WordPress php中使用三个js加载器,因此一切都通过html页面进行调节。我的方法很简单,只需通过html将文件路径回显到js脚本中,当js加载时,它会看到路径,然后将其输入到加载器中。 - Sam0
显示剩余7条评论
2个回答

1

看了我需要我的PHP页面显示来自mysql数据库的BLOB图像,我会尝试采用以下方式: 将<img src="image.php?id=<?php echo $image_id; ?>" />行中的src属性用于js加载器,因此在js中(假设它通过html在网页上工作时)可以这样写:

js:

// set up a path variable
var filed = 'model.php?id=<?php echo $sql_id; ?>'

// instantiate a loader

var loader = new THREE.JSONLoader();
// load a resource
loader.load(
// resource URL location
filed,
// Function when resource is loaded
function ( geometry, materials ) {
    var material = new THREE.MultiMaterial( materials );
    var object = new THREE.Mesh( geometry, material );
    scene.add( object );
}
);

然后是 PHP:

<?php
function load() { $sql = "SELECT model FROM ovf_items_cycles"; if(!$res = $_ENV['db']->query($sql)) { echo ' failed to operate'; } while($row = $res->fetch_assoc() ) { echo $row['pid'] . ' ' . $row['modeldata']; } } 
?>

这只是我 PHP 水平不太好的草图。但如果您还能在 SQL 中存储 blob 文件的路径并访问该路径以获取加载器变量,那么最终会更容易。


我想我明白了,让我动手试试。我明天会发布我的进展,所以请和我一起吧,伙计。谢谢。 - Yashwanth CB
文件 ID 是否应该包含 JSON 对象? - Yashwanth CB
我的 PHP 不是很好,但也许你可以将 file_id 更改为你的 modeldata,但实际上你应该查找模型的路径位置。否则,我认为你会在页面空间中重复模型数据(一次在页面空间中,另一次在 Three 加载时),这将导致问题。使用 filed 变量向 Three 显示文件的位置,而不是保存文件内容。 - Sam0

0

查看一下Three.js的加载器是否有一个解析函数,你可以使用它来替代加载函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接