Tip of the hat to you Gabriel, what a breakthrough. after all the videos of trying to host this thing through a server is somewhat hard being somewhat a technical idiot, just decided going blindside, with something no one talks about, skypack. This tutorial was the second most successful and easy to understand tutorials I've come across, simon devs videos are brilliant, a easy chill dev creating some really great projects, well done. [pat on back]
Hi. Thank you for your explanations. This is exactly what I was looking for. I'm a newbie in Javascript. I'm still able to understand all you said. I guess I will I to watch your video again and again and again....
Great video, clearly explained and it works. Thank you. Using Visual Studio Code on my PC I needed to install the Live Server extension to display the html webpage running the Java script. Adobe Dreamweaver running on my Mac seems to have live server functionality built in.
right at the end you type some weird sort of arrow. That symbol does not exist in ASCII so it would be useful to know how you managed to get half the special characters you magically paste in, leaving us to type it up wrong, and it won't work. I guess you aren't supposed to type it out, just copy paste from somewhere, which will remain a secret. Super.
If I understood what you meant, what you are talking about are legatured, those are basically more characters combined for a different look. You can enable them in VS in the options, for the arrow is just = and > combined that look like an arrow
Very awesome job with this video! The only thing is that I can only view the eyeball model. Do I need to create another webpage and change the code so that I can view the dinohead?
I probably wont get an answer but I was wondering what you'd do if you had a scene made in Blender and wanted one specific object within that scene react to mouse movement? To be specific, I want to make a campfire with sparks coming out, but want the sparks to interact with the mouse if it hovers over them and the fire interact differently if the mouse goes over it.
I don't know how complex your campfire is, but my best guess would be to have two separate 3D models on the same Three.JS scene (one for the environment and one for the campfire) and I'd have the mouse hover emit some particles or something like that.
i model high poly cars with high attention to detail, i would love to put my car in the middle with the wireframe so people can see the topo and can move in 360 degree around it. is that possible ? can it be high poly ? cause i also do engine bay which take my car vertices from around 2 million to nearly 20 million
Hello! Thank you very much for this, I've been watching for a tutorial for days and I wasn't able to find it until now! I have a problem and it's that I can see the preview of the webside with the extension 'Live Preview', but when I run it on browser the 3Dmodel doesn't appear. Could someone help me with that, please? 🙏
Hey, that's probably related to the import path of the model file. It should work if you add ./ before "models/" on the file path. If I remember well, I've given a slightly more detailed explanation in a previous comment here some days ago.
For React projects I'd use @react-three/fiber and maybe "useGLTF" from @react-three/drei to load the GLTF model. I might make a video on that in the near future.
Sorry, I tried to open your .html file with edge and crhome but the modeling doesn't work and the same thing happens with my files, I don't know if I use a program for local host or not
Hey, I missed that on the video, but I believe the issue you're having is related to how the model file path on the code is relative to the root of the project, but if you just open the .html file, without using some kind of localhost server, it will look for the root of your computer's file system, which won't work... Try running it with something like the "Live Server" extension for VSCode.
If you're using VS Code, try installing the Live Server extension. It's probable that your computer isn't serving the 3D model file in the path the code is looking for.
You might either need to change the path of the 3d models or run the index.html file using some king of server software, like VSCode's Live Server Extension
what does the scene.bin file do? replacing the scene.gtlf file doesnt just replace the model, so i'm assuming that's related? what does it do and how do i make/get one? thanks in advance.
As far as I understand it, the scene.bin file stores the data that's too big to fit the scene.gltf, but is still needed, in in binary format. Both files must match for the model to work properly. To make these files, export from a 3D software in glTF format. To get them, you can download from plenty of sites, including the one I showed in the video (just make sure to download in glTF format)
I'm fairly certain that if you just upload the models to wp-content/uploads, update the path to the file on the code and then place it all inside an HTML block, it should work. There's probably better ways, like using a custom page template file, etc... I'm going to be testing this in the future and I might make a video about it, as I've gotten that same question a few times now.
Yeah, that’s probably an issue with the file pathname, I wrongly assumed everyone would be running this in a server-like environment, with the project folder at the root. I’m pretty sure I’ve given detailed instructions on how to solve it in another comment here, but you basically have to change the 3d model file path and it will work
Yeah, just set your scroll event listener, save the scroll position into a variable and use that variable on the animation loop to make whatever animation you want
Yeah, I remember seeing something similar to that on the THREE.JS documentation, maybe take a look at the examples there and you can find a path to follow
Make sure the model file's extension and path are correct, then if that's still not working, try playing with the camera's X, Y and Z values, as the model might be somewhere else in the scene but not directly in front of the camera.
Thank you so much for this tutorial. I have a problem: my 3D model is so small and it is located so far from my current camera position, so i am confused. I repeated all code, which you have done, please, help me sir😇
Sounds like you should play around with the camera.position.z setting a bit. The values I used on the video worked for the models I used, but you'll have to tweak them to make them work with your models.
If you cloned the repo and the screen is black, it isn't because of lights. Most probably you need to either fix the file path or run it at the root of a server.
ive downloaded other models from sketchfab and included in project directory but when i link them and load they are not coming in the website what may be the reason, i think all model must work, its same format as u mentioned
They should all work, but the settings for each model can be wildly different. So make sure you play around with light sources, camera positions, object materials, etc. Once you get something to appear on the screen you can start tweaking the values and hopefully you'll be able to adjust it the way you want it.
If you're using VS Code, try installing the Live Server extension. It's probable that your computer isn't serving the 3D model file in the path the code is looking for.
If the background doesn't interact with the model you can just add it with CSS in element you want, like: body { background-image: url(path_to_your_img) }
I've heard some people are having the same issue. I believe it's related to how the model file path on the code is relative to the root of the project, but if you just open it without using some kind of localhost server, it will look for the root of your computer's file system, which won't work... Try running it with something like the "Live Server" extension for VSCode.
I sadly have the same problem. I cloned your GH Repository, but when I open the index.html file, I only see a black screen with the "A Simple Three.Js"-header, but no 3D Object in sight. I have tried it with "Live Server" and with just dragging the html file to my browser. Both don't work. What did I do wrong? @@GabrielMolterIO
I'd start by checking if there are any errors on the console. Also, is the model exported in the correct format? I'd also double check the camera position, it might have to be very different from what I'm using on the video, depending on the model you're using.
when i add the model its not perfectly centred. i even tried setting position and using different models but got same problem. when i add model its not on origin , its at +ive y-axis. anyone know about this problem ?
You know when we set camera.position.z on the video? Did you try changing the positions for camera.position.x and camera.position.y as well? I think that might work for you!
@@GabrielMolterIO yes i know , i had to set values of camera and of position in thousands. another way was to scale down my model. i was wondering if this happens every time for everyone. it would have been great if imported model were just originate from position 0,0,0. (they actually are but the appear at some other position away from origin 🥲).
@@ahmadshoukat-c8y I don’t actually know the reason for that, but in my experience it was rare to find a model that was nicely centralized at 0,0,0 by default. 🤷🏻♂️
Yep, this should work in any type of website! Thought, if you're using Shopify's Hydrogen (instead of Liquid), you should probably use the React Three Fiber lib instead, but the underlying logic will still be the same.
I use a little VSCode Extension called "Live Server", which I highly recommend. You could also simply open the index file with a browser. Keep in mind that, as it is, the code loads the 3D models using paths relative to the root, so to run it without starting a local web-server, you'd have to add a "./" before the file path, to make it relative to the current folder. `models/${objToRender}/scene.gltf` would have to be `./models/${objToRender}/scene.gltf` Again, if you use the extension that change isn't needed.
@@GabrielMolterIO Hi, I have the same problem, I changed "loader.load( `./models/${objToRender}/scene.gltf`," but I still get a black screen, when I inspect the page in Chrome, it shows the container3D div has a height of 0, but is the same width as the screen
There’s plenty of in-depth tutorials on Three.JS available. I made this one for people who are already familiar with JS, and wouldn’t mind exploring a bit on their own. As for it working only with the models I’ve used, that’s wrong. It should work with any model given that you change the magic numbers throughout the code to adapt to your model. Play a bit with these numbers and I’m sure you’ll be able to run it successfully.
this tutorial was great it's just not for beginners or people who don't know how to use Google, obviously different objects might require a different setup than his
Tip of the hat to you Gabriel, what a breakthrough. after all the videos of trying to host this thing through a server is somewhat hard being somewhat a technical idiot, just decided going blindside, with something no one talks about, skypack.
This tutorial was the second most successful and easy to understand tutorials I've come across, simon devs videos are brilliant, a easy chill dev creating some really great projects, well done. [pat on back]
Nice video, it will be great to see another video in which we can in example learn how to upload 3d objects to our scene from our local storage
Hi. Thank you for your explanations. This is exactly what I was looking for. I'm a newbie in Javascript. I'm still able to understand all you said. I guess I will I to watch your video again and again and again....
wee need more threejs stuff this is so cool!! short and on point!!
1:22 one of those CSS rules was not like the others. One was for aesthetics, and the other was for complete painting onto the screen control
I think this video is a great starting point for whoever wanna try to mess with models in three.js (such as myself), great job my guy!!!
Thanks, Gabriel, This is the best and simple video to learn three.js
haha exactly!
Great video, clearly explained and it works. Thank you.
Using Visual Studio Code on my PC I needed to install the Live Server extension to display the html webpage running the Java script. Adobe Dreamweaver running on my Mac seems to have live server functionality built in.
cooooooollllll, we need more of three.js , keep it up
clean and sharp! love this!
Great and quick breakdown! Thank you.
Amazing tutorial, keep up with these!
right at the end you type some weird sort of arrow. That symbol does not exist in ASCII so it would be useful to know how you managed to get half the special characters you magically paste in, leaving us to type it up wrong, and it won't work. I guess you aren't supposed to type it out, just copy paste from somewhere, which will remain a secret. Super.
If I understood what you meant, what you are talking about are legatured, those are basically more characters combined for a different look.
You can enable them in VS in the options, for the arrow is just = and > combined that look like an arrow
I think I finally found a way to give my ai home assistant a “face” . Thank you
Hahaha this sounds pretty cool
thanks for it. got lead for a jump start. thanks bud
somehow it doesnt work for me, i literally downloaded everything on github but the eye still doesnt show up, its just a black screen with the header
that means the compatibility related, bro.
Bro it's showing the same for me
@@adityapatki9494 are you sure you're pointing to the right file path?
Amazing tutorial, thanksss
I dont understand it now but in a few months it will all make sense 😅. thank you
Thank you! It’s very excellent!
Thats super cool !!!
awesome content bro
Amazing! thank you so much
Very awesome job with this video! The only thing is that I can only view the eyeball model. Do I need to create another webpage and change the code so that I can view the dinohead?
You should be able to switch to the dino by changing line 24:
let objToRender = 'eye';
becomes
let objToRender = 'dino';
Excellent! Thank you very much!
I probably wont get an answer but I was wondering what you'd do if you had a scene made in Blender and wanted one specific object within that scene react to mouse movement? To be specific, I want to make a campfire with sparks coming out, but want the sparks to interact with the mouse if it hovers over them and the fire interact differently if the mouse goes over it.
I don't know how complex your campfire is, but my best guess would be to have two separate 3D models on the same Three.JS scene (one for the environment and one for the campfire) and I'd have the mouse hover emit some particles or something like that.
Thanks for this video. It would be very helpful if you do this for 3D House model
No matter what's the model, the code should work as long as it's exported in glTF
Thank u, amazing tutorial bro, however, how can object only limit like a canva and not all the screen?
I mean, you can make the Canva take the whole viewport size with CSS, doesn’t that work?
i model high poly cars with high attention to detail, i would love to put my car in the middle with the wireframe so people can see the topo and can move in 360 degree around it. is that possible ? can it be high poly ? cause i also do engine bay which take my car vertices from around 2 million to nearly 20 million
Thanks, Keep going
thanks for the video
Hello!
Thank you very much for this, I've been watching for a tutorial for days and I wasn't able to find it until now!
I have a problem and it's that I can see the preview of the webside with the extension 'Live Preview', but when I run it on browser the 3Dmodel doesn't appear. Could someone help me with that, please? 🙏
Hey, that's probably related to the import path of the model file. It should work if you add ./ before "models/" on the file path.
If I remember well, I've given a slightly more detailed explanation in a previous comment here some days ago.
Good job!
Muito top mano, ajudou dms brasil no topo sempre
He is real developer
thank you!
if my project is in react js , how do i add this in my homepage?
For React projects I'd use @react-three/fiber and maybe "useGLTF" from @react-three/drei to load the GLTF model. I might make a video on that in the near future.
Sorry, I tried to open your .html file with edge and crhome but the modeling doesn't work and the same thing happens with my files, I don't know if I use a program for local host or not
Hey, I missed that on the video, but I believe the issue you're having is related to how the model file path on the code is relative to the root of the project, but if you just open the .html file, without using some kind of localhost server, it will look for the root of your computer's file system, which won't work...
Try running it with something like the "Live Server" extension for VSCode.
@@GabrielMolterIOok so we have to run it with node or python to create a http socket or else we can make a flask or react app of it ??
hi where did you get the background music
I believe that one is from UA-cam's free library, if I remember correctly
Thank you
I have copied the code straight from github but all I get is a black screen with 'A simple three.js app' at the top :(
If you're using VS Code, try installing the Live Server extension. It's probable that your computer isn't serving the 3D model file in the path the code is looking for.
video is so cool but the final index.html file in your repository didn't work once launched on google chrome from my side any idea why?
You might either need to change the path of the 3d models or run the index.html file using some king of server software, like VSCode's Live Server Extension
what does the scene.bin file do? replacing the scene.gtlf file doesnt just replace the model, so i'm assuming that's related? what does it do and how do i make/get one?
thanks in advance.
As far as I understand it, the scene.bin file stores the data that's too big to fit the scene.gltf, but is still needed, in in binary format. Both files must match for the model to work properly. To make these files, export from a 3D software in glTF format. To get them, you can download from plenty of sites, including the one I showed in the video (just make sure to download in glTF format)
perfect
Hi! Im curious how to get this working on my wordpress site😁
I'm fairly certain that if you just upload the models to wp-content/uploads, update the path to the file on the code and then place it all inside an HTML block, it should work. There's probably better ways, like using a custom page template file, etc...
I'm going to be testing this in the future and I might make a video about it, as I've gotten that same question a few times now.
Hi for some reason its only showing the eye model, I tried changing the 'Object to render' value to dino but it doesn’t work. Please help
Nevermind I got working, Great Video! Thanks!
somehow it doesnt work, i downloaded everything from guithub but it only renders a black screen with the header
Yeah, that’s probably an issue with the file pathname, I wrongly assumed everyone would be running this in a server-like environment, with the project folder at the root. I’m pretty sure I’ve given detailed instructions on how to solve it in another comment here, but you basically have to change the 3d model file path and it will work
May I know what's the purpose of "Dino"? The example unable to work properly without this "Dino" thing. Thanks.
It's the selector I'm using to choose which file to render, either "dino" or "eye". You may very well just hardcode that on a real project
Hello! Could you please tell me what format of the 3D model is needed to upload it to the site?
This video uses GLtf format, but you can use a bunch of others as well, just take a look at the documentation on loaders.
Can I create scroll trigger animations for this 3d model?? Please answer
Yeah, just set your scroll event listener, save the scroll position into a variable and use that variable on the animation loop to make whatever animation you want
Is it possible if i made a customization box changing color and rendering text. will it reflect on model also with changing color and text???
Yeah, I remember seeing something similar to that on the THREE.JS documentation, maybe take a look at the examples there and you can find a path to follow
What do you prefer? This, 3js, or spline library?
I haven't yet tried Spline... seems really cool tho!
if i download other models, they are not shown. though the dino and eye are working
Make sure the model file's extension and path are correct, then if that's still not working, try playing with the camera's X, Y and Z values, as the model might be somewhere else in the scene but not directly in front of the camera.
Do i have to install anything only my computer (Mac) to be able to run it locally via VS Code and debugging in Chrome?
Not really, just dragging the file to Chrome should open it without issues. I use a VSCode Plugin called "Live Server", which makes it a bit faster.
hey, how do you go about obj files? please help
You’d have to replace the glTF loader with the OBJ one, just take a look at the ThreeJS docs: threejs.org/docs/#examples/en/loaders/OBJLoader
Thank you so much for this tutorial. I have a problem: my 3D model is so small and it is located so far from my current camera position, so i am confused. I repeated all code, which you have done, please, help me sir😇
Sounds like you should play around with the camera.position.z setting a bit. The values I used on the video worked for the models I used, but you'll have to tweak them to make them work with your models.
How do i add more lights my screen is just black
If you cloned the repo and the screen is black, it isn't because of lights. Most probably you need to either fix the file path or run it at the root of a server.
ive downloaded other models from sketchfab and included in project directory but when i link them and load they are not coming in the website what may be the reason, i think all model must work, its same format as u mentioned
They should all work, but the settings for each model can be wildly different. So make sure you play around with light sources, camera positions, object materials, etc. Once you get something to appear on the screen you can start tweaking the values and hopefully you'll be able to adjust it the way you want it.
@@GabrielMolterIO yea man understood it thank you for the info
how do you run it\
You can use a plugin on your code editor. I use “Live Server” on my VSCode.
Or you can simply drag the html file to your browser.
Which font style do you use in your Vs code ?
I use Fira Code with ligatures activated
It doesn't show me anything
what could be the problem!!
If you're using VS Code, try installing the Live Server extension. It's probable that your computer isn't serving the 3D model file in the path the code is looking for.
hey um how can I add a background image, in my site I can change colors only
If the background doesn't interact with the model you can just add it with CSS in element you want, like:
body { background-image: url(path_to_your_img) }
@@GabrielMolterIO it isn't working I don't know why, in a few forums they said you have to add new scene and camera
I have downloaded everything and copied the exact folder names but it just shows a black screen with the title
I've heard some people are having the same issue. I believe it's related to how the model file path on the code is relative to the root of the project, but if you just open it without using some kind of localhost server, it will look for the root of your computer's file system, which won't work...
Try running it with something like the "Live Server" extension for VSCode.
i used live server extension but still not working
@@GabrielMolterIO
I clone your project but it only give me the text
Not entirely sure what you mean here... The project on GH has all the code AND the 3D models, so it's pretty much ready to run
I sadly have the same problem. I cloned your GH Repository, but when I open the index.html file, I only see a black screen with the "A Simple Three.Js"-header, but no 3D Object in sight. I have tried it with "Live Server" and with just dragging the html file to my browser. Both don't work. What did I do wrong? @@GabrielMolterIO
When i use my models in your project they did not show on website
I'd start by checking if there are any errors on the console. Also, is the model exported in the correct format? I'd also double check the camera position, it might have to be very different from what I'm using on the video, depending on the model you're using.
Can't workwith STEP file ?
Not as far as I know, I'd recommend you read this issue on GitHub: /mrdoob/three.js/issues/7125
when i add the model its not perfectly centred. i even tried setting position and using different models but got same problem. when i add model its not on origin , its at +ive y-axis.
anyone know about this problem ?
You know when we set camera.position.z on the video? Did you try changing the positions for camera.position.x and camera.position.y as well? I think that might work for you!
@@GabrielMolterIO yes i know , i had to set values of camera and of position in thousands. another way was to scale down my model. i was wondering if this happens every time for everyone. it would have been great if imported model were just originate from position 0,0,0. (they actually are but the appear at some other position away from origin 🥲).
@@ahmadshoukat-c8y I don’t actually know the reason for that, but in my experience it was rare to find a model that was nicely centralized at 0,0,0 by default. 🤷🏻♂️
@@GabrielMolterIO true , it means its the same case everyone. but there is too much hit and trail in threeJs 😮💨 beside knowing dimensions
Can this be done to a Shopify app?
Yep, this should work in any type of website!
Thought, if you're using Shopify's Hydrogen (instead of Liquid), you should probably use the React Three Fiber lib instead, but the underlying logic will still be the same.
how are running the project ?
I use a little VSCode Extension called "Live Server", which I highly recommend.
You could also simply open the index file with a browser. Keep in mind that, as it is, the code loads the 3D models using paths relative to the root, so to run it without starting a local web-server, you'd have to add a "./" before the file path, to make it relative to the current folder.
`models/${objToRender}/scene.gltf`
would have to be
`./models/${objToRender}/scene.gltf`
Again, if you use the extension that change isn't needed.
@@GabrielMolterIO Hi, I have the same problem, I changed "loader.load(
`./models/${objToRender}/scene.gltf`," but I still get a black screen, when I inspect the page in Chrome, it shows the container3D div has a height of 0, but is the same width as the screen
@@angelinepoissonneau do you get an error on the console or something?
I can't get it to work.
Do you get an error message on the console or something like that?
Very specific tutorial that doesn't explain anything and only works with the exact models you use. Disliked.
There’s plenty of in-depth tutorials on Three.JS available. I made this one for people who are already familiar with JS, and wouldn’t mind exploring a bit on their own.
As for it working only with the models I’ve used, that’s wrong. It should work with any model given that you change the magic numbers throughout the code to adapt to your model. Play a bit with these numbers and I’m sure you’ll be able to run it successfully.
this tutorial was great it's just not for beginners or people who don't know how to use Google, obviously different objects might require a different setup than his
@@franzruggiero8991 I figured it out a while ago, with an actual good tutorial.
i didnt get the pathing of the file, when you have to load the file.