작성
·
319
0
위의 사진처럼 강의보다 훨씬 밝게 나오는데 문제가 무엇일까요..?
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
// ----- 주제: 여러 이미지 텍스쳐가 적용된 큐브
export default function example() {
// 로딩 매니저
const loadingManager = new THREE.LoadingManager();
loadingManager.onStart = () => {
console.log("시작");
};
loadingManager.onLoad = () => {
console.log("로드 완료");
};
loadingManager.onProgress = (img) => {
console.log(img + "로드 중");
};
loadingManager.onError = () => {
console.log("로드 에러");
};
// 텍스쳐 이미지 로드
const textureLoader = new THREE.TextureLoader(loadingManager);
const rightTex = textureLoader.load("/textures/mcstyle/right.png");
const leftTex = textureLoader.load("/textures/mcstyle/left.png");
const topTex = textureLoader.load("/textures/mcstyle/top.png");
const bottomTex = textureLoader.load("/textures/mcstyle/bottom.png");
const frontTex = textureLoader.load("/textures/mcstyle/front.png");
const backTex = textureLoader.load("/textures/mcstyle/back.png");
const materials = [
new THREE.MeshBasicMaterial({ map: rightTex }),
new THREE.MeshBasicMaterial({ map: leftTex }),
new THREE.MeshBasicMaterial({ map: topTex }),
new THREE.MeshBasicMaterial({ map: bottomTex }),
new THREE.MeshBasicMaterial({ map: frontTex }),
new THREE.MeshBasicMaterial({ map: backTex }),
];
// 픽셀화
rightTex.magFilter = THREE.NearestFilter;
leftTex.magFilter = THREE.NearestFilter;
topTex.magFilter = THREE.NearestFilter;
bottomTex.magFilter = THREE.NearestFilter;
frontTex.magFilter = THREE.NearestFilter;
backTex.magFilter = THREE.NearestFilter;
// Renderer
const canvas = document.querySelector("#three-canvas");
const renderer = new THREE.WebGLRenderer({
canvas,
antialias: true,
});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setPixelRatio(window.devicePixelRatio > 1 ? 2 : 1);
// Scene
const scene = new THREE.Scene();
scene.background = new THREE.Color("white");
// Camera
const camera = new THREE.PerspectiveCamera(
75,
window.innerWidth / window.innerHeight,
0.1,
1000
);
camera.position.y = 1.5;
camera.position.z = 4;
scene.add(camera);
// Light
const ambientLight = new THREE.AmbientLight("white", 0.5);
scene.add(ambientLight);
const directionalLight = new THREE.DirectionalLight("white", 1);
directionalLight.position.set(1, 1, 2);
scene.add(directionalLight);
// Controls
const controls = new OrbitControls(camera, renderer.domElement);
// Mesh
const geometry = new THREE.BoxGeometry(2, 2, 2);
const mesh = new THREE.Mesh(geometry, materials);
scene.add(mesh);
// 그리기
const clock = new THREE.Clock();
function draw() {
const delta = clock.getDelta();
renderer.render(scene, camera);
renderer.setAnimationLoop(draw);
}
function setSize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.render(scene, camera);
}
// 이벤트
window.addEventListener("resize", setSize);
draw();
}
답변 2
0
일단 코드가 같다면 당연히 문제가 있는 것은 아니고요, 간혹 브라우저나 하드웨어에 따라 WebGL 구현이나 최적화 방식이 다를 수도 있다고 하네요. 다른 기기에서도 한번 확인해보시고, 프로젝트에 두루 적절한 조명 강도를 설정해주시면 될 것 같습니다!
0
안녕하세요, 인프런 AI 인턴이에요.
강의에서 보여주는 이미지와 실제로 보이는 이미지가 다른 문제일 가능성이 있어요. 이런 경우 대부분의 경우 이미지 파일 자체의 문제이거나 이미지를 불러올 때 설정에 문제가 있는 경우입니다.
먼저, 이미지 파일 자체의 문제인지 확인해보세요. 강의에서 사용하는 이미지 파일과 실제 사용하고 있는 이미지 파일을 비교해보세요. 강의에서 사용하는 이미지 파일이 정상적으로 다운로드되었는지 확인할 필요가 있습니다.
또한, 이미지를 불러올 때 설정에 문제가 있는지 확인해보세요. 코드에서 사용하는 TextureLoader
객체의 load
메서드를 호출할 때 이미지 파일의 경로를 제대로 지정했는지 확인해보세요. 오타나 잘못된 경로를 입력한 경우 이미지가 정상적으로 불러와지지 않을 수 있습니다.
이 외에도, 실제로 사용하고 있는 이미지의 밝기 조정이 필요할 수도 있습니다. 이미지 파일이 너무 밝은 경우 이미지 편집 프로그램을 사용하여 조정해보세요.
이미지가 정상적으로 불러와지지 않거나 밝기 조정 등의 작업으로 해결되지 않는다면, 추가 정보가 필요할 수 있으므로 좀 더 구체적으로 문제 상황을 설명해주시면 더 정확한 답변을 드릴 수 있어요.