Hi, prisoner, I’ve tried on a few online rendering sites to upload my model but they don’t accept other files in the system.
But this is the full code using your tempplate:
var camera, scene, renderer;
var cameraOrtho, sceneOrtho;
var spriteTL, spriteTR, spriteBL, spriteBR, spriteC;
var mapC;
var group;
var line;
var raycaster = new THREE.Raycaster();
var topRightPos = new THREE.Vector2();
var point1 = new THREE.Vector3();
var point2 = new THREE.Vector3();
init();
animate();
function init() {
var width = window.innerWidth;
var height = window.innerHeight;
camera = new THREE.PerspectiveCamera(60, width / height, 1, 2100);
camera.position.z = 115;
cameraOrtho = new THREE.OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, 1, 10);
cameraOrtho.position.z = 10;
scene = new THREE.Scene();
scene.background = new THREE.Color(“gray”);
//scene.fog = new THREE.Fog(0x000000, 1500, 2100);
sceneOrtho = new THREE.Scene();
var light = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(light);
line = new THREE.Line(new THREE.BufferGeometry().setFromPoints([new THREE.Vector3(), new THREE.Vector3()]), new THREE.LineBasicMaterial({ color: "white" }));
scene.add(line);
var textureLoader = new THREE.TextureLoader();
textureLoader.load("https://threejs.org/examples/textures/sprite0.png", createHUDSprites);
var mapB = textureLoader.load("https://threejs.org/examples/textures/sprite1.png");
mapC = textureLoader.load("https://threejs.org/examples/textures/sprite2.png");
var geoms = [
new THREE.SphereBufferGeometry(1, 18, 9),
new THREE.BoxBufferGeometry(2, 2, 2)
];
// for (let i = 0; i < 10; i++) {
// let geom = geoms[i % 2];
// let mat = new THREE.MeshBasicMaterial({
// color: Math.random() * 0x888888 + 0x888888
// });
// let mesh = new THREE.Mesh(geom, mat);
// mesh.scale.setScalar(100);
// mesh.position.set(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5).normalize().multiplyScalar(2 * 250);
// mesh.rotation.set(Math.random() * Math.PI, Math.random() * Math.PI, Math.random() * Math.PI);
// group.add(mesh);
// }
var mtlLoader = new THREE.MTLLoader();
mtlLoader.load('basic.mtl', function (materials) {
materials.preload();
renderer.render(scene, camera);
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials(materials);
objLoader.load('basic.obj', function (object) {
group = object.clone();
scene.add(group);
console.log("obj", group);
})
})
scene.add(group);
// renderer
renderer = new THREE.WebGLRenderer();
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.autoClear = false; // To allow render overlay on top of sprited sphere
document.body.appendChild(renderer.domElement);
var controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;
controls.campingFactor = 0.25;
controls.enableZoom = true;
//
window.addEventListener('resize', onWindowResize, false);
}
function createHUDSprites(texture) {
var material = new THREE.SpriteMaterial({
map: texture
});
var width = material.map.image.width;
var height = material.map.image.height;
spriteTL = new THREE.Sprite(material);
spriteTL.center.set(0.0, 1.0);
spriteTL.scale.set(width, height, 1);
sceneOrtho.add(spriteTL);
spriteTR = new THREE.Sprite(material);
spriteTR.center.set(1.0, 1.0);
spriteTR.scale.set(width, height, 1);
sceneOrtho.add(spriteTR);
spriteBL = new THREE.Sprite(material);
spriteBL.center.set(0.0, 0.0);
spriteBL.scale.set(width, height, 1);
sceneOrtho.add(spriteBL);
spriteBR = new THREE.Sprite(material);
spriteBR.center.set(1.0, 0.0);
spriteBR.scale.set(width, height, 1);
sceneOrtho.add(spriteBR);
updateHUDSprites();
}
function updateHUDSprites() {
var width = window.innerWidth / 2;
var height = window.innerHeight / 2;
spriteTL.position.set(-width, height, 1); // top left
spriteTR.position.set(width, height, 1); // top right
spriteBL.position.set(-width, -height, 1); // bottom left
spriteBR.position.set(width, -height, 1); // bottom right
var sWidth = spriteTR.material.map.image.width / 2;
var sHeight = spriteTR.material.map.image.height / 2;
topRightPos.set(
(width - sWidth) / width,
(height - sHeight) / height
)
}
function onWindowResize() {
var width = window.innerWidth;
var height = window.innerHeight;
camera.aspect = width / height;
camera.updateProjectionMatrix();
cameraOrtho.left = -width / 2;
cameraOrtho.right = width / 2;
cameraOrtho.top = height / 2;
cameraOrtho.bottom = -height / 2;
cameraOrtho.updateProjectionMatrix();
updateHUDSprites();
renderer.setSize(window.innerWidth, window.innerHeight);
}
function animate() {
requestAnimationFrame(animate);
render();
}
function render() {
// find point at the sprite
raycaster.setFromCamera(topRightPos, camera);
raycaster.ray.at(2, point1);
line.geometry.attributes.position.setXYZ(0, point1.x, point1.y, point1.z);
// find point at the object
group.children[2].localToWorld(point2);
console.log(group, group.children[2], point2);
line.geometry.attributes.position.setXYZ(1, point2.x, point2.y, point2.z);
line.geometry.attributes.position.needsUpdate = true;
renderer.clear();
renderer.render(scene, camera);
renderer.clearDepth();
renderer.render(sceneOrtho, cameraOrtho);
}
And the beldner object:
basic.mtl
Blender MTL File: ‘basic.blend’
Material Count: 9
newmtl 1
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.031637 0.639282 0.091548
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl 1.001
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.014530 0.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl 101
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.008818 0.032027 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl 2
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.031637 0.639282 0.091548
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl 201
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.015540 0.000000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl 202
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.000000 0.033600 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl 3
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.031637 0.639282 0.091548
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl 4
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.076122 0.640000 0.119792
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2
basic.obj
Blender v2.79 (sub 0) OBJ File: ‘basic.blend’
mtllib basic.mtl
o Cube.004_Cube
v 3.478498 0.678071 -1.530011
v 3.478498 1.571983 -1.530011
v 3.478498 0.678071 -2.585751
v 3.478498 1.571983 -2.585751
v 4.525196 0.678071 -1.530011
v 4.525196 1.571983 -1.530011
v 4.525196 0.678071 -2.585751
v 4.525196 1.571983 -2.585751
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 1//1 2//1 4//1 3//1
f 3//2 4//2 8//2 7//2
f 7//3 8//3 6//3 5//3
f 5//4 6//4 2//4 1//4
f 3//5 7//5 5//5 1//5
f 8//6 4//6 2//6 6//6
o Cube_wall
v -7.869982 0.023798 0.237665
v -7.869982 3.936242 0.237665
v -7.869982 0.023798 -0.354652
v -7.869982 3.936242 -0.354652
v -2.225870 0.023798 0.237665
v -2.225870 3.936242 0.237665
v -2.225870 0.023798 -0.354652
v -2.225870 3.936242 -0.354652
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl 1.001
s off
f 9//7 10//7 12//7 11//7
f 11//8 12//8 16//8 15//8
f 15//9 16//9 14//9 13//9
f 13//10 14//10 10//10 9//10
f 11//11 15//11 13//11 9//11
f 16//12 12//12 10//12 14//12
o 2
v -7.823242 0.006386 7.811970
v -2.226626 0.006386 7.811970
v -7.823242 0.006386 0.290693
v -2.226626 0.006386 0.290693
vn 0.0000 1.0000 0.0000
usemtl 2
s off
f 17//13 18//13 20//13 19//13
o 4
v -7.829771 0.013267 -0.362602
v -2.233155 0.013267 -0.362602
v -7.829771 0.013267 -7.883879
v -2.233155 0.013267 -7.883879
vn 0.0000 1.0000 0.0000
usemtl 4
s off
f 21//14 22//14 24//14 23//14
o 1
v 2.237090 0.064851 7.664445
v 7.833707 0.064851 7.664445
v 2.237090 0.064851 0.143168
v 7.833707 0.064851 0.143168
vn 0.0000 1.0000 0.0000
usemtl 1
s off
f 25//15 26//15 28//15 27//15
o 3
v 2.294181 0.013267 -0.362602
v 7.890798 0.013267 -0.362602
v 2.294181 0.013267 -7.883879
v 7.890798 0.013267 -7.883879
vn 0.0000 1.0000 0.0000
usemtl 3
s off
f 29//16 30//16 32//16 31//16
o Cube.001_Cube.002
v 2.313826 0.023775 0.237665
v 2.313826 3.954771 0.237665
v 2.313826 0.023775 -0.354652
v 2.313826 3.954771 -0.354652
v 7.957938 0.023775 0.237665
v 7.957938 3.954771 0.237665
v 7.957938 0.023775 -0.354652
v 7.957938 3.954771 -0.354652
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 33//17 34//17 36//17 35//17
f 35//18 36//18 40//18 39//18
f 39//19 40//19 38//19 37//19
f 37//20 38//20 34//20 33//20
f 35//21 39//21 37//21 33//21
f 40//22 36//22 34//22 38//22
o Cube.002_Cube.003
v -2.236832 -0.116833 -7.936278
v -2.236832 3.795611 -7.936278
v -1.644511 -0.116833 -7.935033
v -1.644511 3.795611 -7.935033
v -2.270053 -0.116833 7.877797
v -2.270053 3.795611 7.877797
v -1.677732 -0.116833 7.879041
v -1.677732 3.795611 7.879041
vn 0.0021 0.0000 -1.0000
vn 1.0000 0.0000 0.0021
vn -0.0021 0.0000 1.0000
vn -1.0000 0.0000 -0.0021
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 41//23 42//23 44//23 43//23
f 43//24 44//24 48//24 47//24
f 47//25 48//25 46//25 45//25
f 45//26 46//26 42//26 41//26
f 43//27 47//27 45//27 41//27
f 48//28 44//28 42//28 46//28
o Cube.003_Cube.004
v 1.732537 -0.116833 -7.936278
v 1.732537 3.795611 -7.936278
v 2.324858 -0.116833 -7.935033
v 2.324858 3.795611 -7.935033
v 1.699315 -0.116833 7.877797
v 1.699315 3.795611 7.877797
v 2.291636 -0.116833 7.879041
v 2.291636 3.795611 7.879041
vn 0.0021 0.0000 -1.0000
vn 1.0000 0.0000 0.0021
vn -0.0021 0.0000 1.0000
vn -1.0000 0.0000 -0.0021
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 49//29 50//29 52//29 51//29
f 51//30 52//30 56//30 55//30
f 55//31 56//31 54//31 53//31
f 53//32 54//32 50//32 49//32
f 51//33 55//33 53//33 49//33
f 56//34 52//34 50//34 54//34
o 201
v -4.670515 0.793187 -5.187165
v -4.670515 1.962853 -5.187165
v -4.670515 0.793187 -7.187165
v -4.670515 1.962853 -7.187165
v -3.623817 0.793187 -5.187165
v -3.623817 1.962853 -5.187165
v -3.623817 0.793187 -7.187165
v -3.623817 1.962853 -7.187165
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl 201
s off
f 57//35 58//35 60//35 59//35
f 59//36 60//36 64//36 63//36
f 63//37 64//37 62//37 61//37
f 61//38 62//38 58//38 57//38
f 59//39 63//39 61//39 57//39
f 64//40 60//40 58//40 62//40
o 301_Cube.005
v -4.670515 0.793187 -1.643110
v -4.670515 1.962853 -1.643110
v -4.670515 0.793187 -3.643110
v -4.670515 1.962853 -3.643110
v -3.623817 0.793187 -1.643110
v -3.623817 1.962853 -1.643110
v -3.623817 0.793187 -3.643110
v -3.623817 1.962853 -3.643110
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 65//41 66//41 68//41 67//41
f 67//42 68//42 72//42 71//42
f 71//43 72//43 70//43 69//43
f 69//44 70//44 66//44 65//44
f 67//45 71//45 69//45 65//45
f 72//46 68//46 66//46 70//46
o 101
v -7.190013 0.793187 -0.724297
v -7.190013 1.962853 -0.724297
v -7.190013 0.793187 -0.904204
v -7.190013 1.962853 -0.904204
v -6.143315 0.793187 -0.724297
v -6.143315 1.962853 -0.724297
v -6.143315 0.793187 -0.904204
v -6.143315 1.962853 -0.904204
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl 101
s off
f 73//47 74//47 76//47 75//47
f 75//48 76//48 80//48 79//48
f 79//49 80//49 78//49 77//49
f 77//50 78//50 74//50 73//50
f 75//51 79//51 77//51 73//51
f 80//52 76//52 74//52 78//52
o 202
v -4.670515 0.793187 6.758336
v -4.670515 1.962853 6.758336
v -4.670515 0.793187 4.758336
v -4.670515 1.962853 4.758336
v -3.623817 0.793187 6.758336
v -3.623817 1.962853 6.758336
v -3.623817 0.793187 4.758336
v -3.623817 1.962853 4.758336
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl 202
s off
f 81//53 82//53 84//53 83//53
f 83//54 84//54 88//54 87//54
f 87//55 88//55 86//55 85//55
f 85//56 86//56 82//56 81//56
f 83//57 87//57 85//57 81//57
f 88//58 84//58 82//58 86//58
o 203_Cube.008
v 4.056071 0.793187 6.758336
v 4.056071 1.962853 6.758336
v 4.056071 0.793187 4.758336
v 4.056071 1.962853 4.758336
v 5.102769 0.793187 6.758336
v 5.102769 1.962853 6.758336
v 5.102769 0.793187 4.758336
v 5.102769 1.962853 4.758336
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 89//59 90//59 92//59 91//59
f 91//60 92//60 96//60 95//60
f 95//61 96//61 94//61 93//61
f 93//62 94//62 90//62 89//62
f 91//63 95//63 93//63 89//63
f 96//64 92//64 90//64 94//64
And the line still points at the center of the object like so:
Thanks Unsul for your help but I’m not sure what you mean by bounding box, would you mind giving an example?
Thanks again