I created navigation mesh for my map (.obj). But now I want to create .js. Please tell me how he creates .js file. See image.
First, why do you want to convert the .obj
to a .js
file? For a navigation mesh, .obj
is just fine.
If you’re determined to convert it, though, you can use the three.js Blender exporter to do that. This blog post explains how to use the exporter. It will give you a .json
file, which is (in this case) the same as those .js
files in your screenshot.
Side note: It would be a good idea to include much more detail in your question, to make it easier for others to help you. For example, mention that you are using PatrolJS, and link to the code rather than just giving a screenshot. It’s hard for people to guess that kind of thing. Good questions that include demos in Codepen, JSFiddle, Neocities, etc. will often get answered faster.
I tried for obj but following error is coming in console.
You probably have a version of three.js in that demo that doesn’t match the version of OBJLoader. Try commenting that line out in OBJLoader, or changing the version of three.js in demo.html
line 37 to something more recent, like:
<script src="https://cdn.rawgit.com/mrdoob/three.js/r88/build/three.js"></script>
Thank You for replying but another error is coming
Now my JS files in project are
<script src="https://cdn.rawgit.com/mrdoob/three.js/r88/build/three.js"></script>
<script src="OrbitControls.js"></script>
<script src="../patrol.js"></script>
<script src="./OBJLoader.js"></script>
@donmccurdy see my files
Make sure that you use files that are all from the same version of three.js. The problem here comes mostly from mixing and matching older and newer versions, I think.
I would use the following scripts:
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.2/underscore-min.js"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/r71/build/three.js"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/r71/examples/js/loaders/OBJLoader.js"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/r71/examples/js/controls/OrbitControls.js"></script>
<script src="./patrol.js"></script>
Moreover, OBJLoader needs to be used differently. Per the docs, it returns an object, unlike JSONLoader. More like this:
var objLoader = new THREE.OBJLoader();
objLoader.load( 'meshes/level.obj', function( object ) {
object.traverse(function (node) {
if (node.type === 'Mesh') level = node;
});
scene.add(level);
});
objLoader.load( 'meshes/navmesh.obj', function( object ) {
var navmesh;
object.traverse(function (node) {
if (node.type === 'Mesh') navmesh = node;
});
var geometry = new THREE.Geometry();
geometry.fromBufferGeometry(navmesh.geometry);
var zoneNodes = patrol.buildNodes(geometry);
patrol.setZoneData('level', zoneNodes);
Object.assign(navmesh.material, {
color: 0xd79fd4,
opacity: 0.5,
transparent: true
});
scene.add(navmesh);
// Set the player's navigation mesh group
playerNavMeshGroup = patrol.getGroup('level', player.position);
});
Demo and source code: https://objpatroljs-zzcpndkpct.now.sh/
@donmccurdy thank You Very Much, Dear Sir… its working fine… U saved me u saved my time. Thank you so much