So I’m creating something together with my friend ChatGPT
But we can’t figure out why the lightsource keeps thinking and behaving like my objects are in the middle of the screen.
See the screenshot for the example. You can see the sphere that is a bit lower then the center. We’ve made something so the lightsource is always on my mouse. As you can see I got the light source in the center of the screen, if you look at the sphere the light has to come from above it, but it’s exactly in the middle of it. So the lightsource thinks and behaves like the sphere is in the middle of the scren.
Anybody who please can help me?
This is my code:
// Basis Three.js setup
// Scene maken
const scene = new THREE.Scene();
// Stel de achtergrondkleur in op transparant
scene.background = null;
// Camera maken (perspective camera)
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 7;
// Renderer maken en toevoegen aan de DOM
const renderer = new THREE.WebGLRenderer({ alpha: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Kubus maken met één kleur
const cubeParams = {
size: 1, // Grootte van de kubus
scrollSpeedFactor: -0.005,
rotationSpeed: 0.01,
xPos: -2, // X positie van de kubus
yPos: 0, // Y positie van de kubus
};
// Kubus geometrie en materiaal
const cubeGeometry = new THREE.BoxGeometry(cubeParams.size, cubeParams.size, cubeParams.size);
const cubeMaterial = new THREE.MeshStandardMaterial({ color: 0x00ff00 }); // Groen
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
scene.add(cube);
// Piramide maken
const pyramidParams = {
size: 1, // Grootte van de piramide
scrollSpeedFactor: -0.003,
rotationSpeed: 0.02,
xPos: 2, // X positie van de piramide
yPos: 0, // Y positie van de piramide
};
// Piramide geometrie en materiaal
const pyramidGeometry = new THREE.TetrahedronGeometry(pyramidParams.size, 0);
const pyramidMaterial = new THREE.MeshStandardMaterial({ color: 0xff6600 }); // Oranje
const pyramid = new THREE.Mesh(pyramidGeometry, pyramidMaterial);
scene.add(pyramid);
// Sphere maken
const sphereParams = {
size: 0.7, // Grootte van de sphere
scrollSpeedFactor: -0.004,
rotationSpeed: 0.015,
xPos: 0, // X positie van de sphere
yPos: 2, // Y positie van de sphere
};
// Sphere geometrie en materiaal
const sphereGeometry = new THREE.SphereGeometry(sphereParams.size, 16, 16);
const sphereMaterial = new THREE.MeshStandardMaterial({ color: 0x0000ff }); // Blauw
const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
scene.add(sphere);
// Functie om objectposities opnieuw in te stellen
function updatePositions() {
cube.position.set(cubeParams.xPos, -cubeParams.yPos, 0); // Negatieve yPos voor kubus
pyramid.position.set(pyramidParams.xPos, -pyramidParams.yPos, 0); // Negatieve yPos voor piramide
sphere.position.set(sphereParams.xPos, -sphereParams.yPos, 0); // Negatieve yPos voor sphere
}
// Startposities instellen
updatePositions();
// Variabele om de scrollpositie te tracken
let scrollY = 0;
// Luister naar het scroll-evenement
window.addEventListener(‘scroll’, () => {
scrollY = window.scrollY;
});
// Directional Light toevoegen
const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
scene.add(directionalLight);
// Variabelen voor muispositie
let mouse = { x: 0, y: 0 };
// Luister naar muisbewegingen
window.addEventListener(‘mousemove’, (event) => {
// Normaleer muispositie naar een waarde tussen -1 en 1
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
});
// Event listener voor venster grootte wijziging
window.addEventListener(‘resize’, () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
updatePositions(); // Bijwerken van de objectposities
});
// Animatielus
function animate() {
requestAnimationFrame(animate);
// Rotatie en positie aanpassen op basis van scrollpositie
// Kubus rotatie en beweging
cube.rotation.x = scrollY * cubeParams.rotationSpeed;
cube.rotation.y = scrollY * cubeParams.rotationSpeed;
// Piramide rotatie en beweging
pyramid.rotation.x = scrollY * pyramidParams.rotationSpeed;
pyramid.rotation.y = scrollY * pyramidParams.rotationSpeed;
// Sphere rotatie en beweging
sphere.rotation.x = scrollY * sphereParams.rotationSpeed;
sphere.rotation.y = scrollY * sphereParams.rotationSpeed;
// Update de positie van de Directional Light naar de muispositie
directionalLight.position.set(mouse.x * 5, mouse.y * 5, 5); // Pas de waarde aan voor betere verlichting
// Render de scene met de camera
renderer.render(scene, camera);
}
// Start de animatie
animate();