텍스쳐가 있는 사이트에서 다운로드하기
3d texture 구글에 검색해 원하는 텍스쳐 다운로드 하기
기본 예제
/* 텍스쳐 이미지 로드 */
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load(
"./textures/watermelon/Watermelon_001_basecolor.jpg"
);
/* Messh 만들기 */
const geometry = new THREE.BoxGeometry(2, 2, 2);
const material = new THREE.MeshStandardMaterial({
// color: 'orangered',
map: texture
});
- MeshBasicMaterial로 설정해 줄 경우 그림자나 조명 등 효과가 없다.
- 텍스쳐를 적용할 때 어울리는 mesh를 설정해 주면 된다.
앞면과 뒷면에 다른 텍스처 적용
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
/* 주제: 텍스쳐 이미지 로드하기 */
const onLoad = () => {
console.log("로드 완료");
};
const onProgress = () => {
console.log("로드 중");
};
const onError = () => {
console.log("로드 에러");
};
export default function example() {
/* 텍스쳐 이미지 로드 */
// 주의 : webpack.config.js파일 CopyWebpackPlugin에서 textures의 경로 설정이 되었는지 체크하기
const textureLoader = new THREE.TextureLoader();
const frontTexture = textureLoader.load(
"/textures/watermelon/Watermelon_001_basecolor.jpg",
onLoad, // 로드 완료 시 호출
onProgress, // 로드 중일 때 호출
onError // 로드 에러 시 호출
);
const backTexture = textureLoader.load(
"/textures/watermelon/Watermelon_001_roughness.jpg",
onLoad, // 로드 완료 시 호출
onProgress, // 로드 중일 때 호출
onError // 로드 에러 시 호출
);
...
/* Messh 만들기 */
const geometry = new THREE.BoxGeometry(2, 2, 2);
// MeshBasicMaterial는 조명이나 그림자의 영향을 받지 않는다.
// material 배열 생성, 앞면과 뒷면에 다른 텍스처 적용
// 외부 면
const frontMaterial = new THREE.MeshStandardMaterial({ map: frontTexture });
const outsideMaterials = [
frontMaterial, // 오른쪽 면 (x+)
frontMaterial, // 왼쪽 면 (x-)
frontMaterial, // 위쪽 면 (y+)
frontMaterial, // 아래쪽 면 (y-)
frontMaterial, // 앞면 (z+)
frontMaterial // 뒷면 (z-)
];
// 내부 면
const backMaterial = new THREE.MeshStandardMaterial({
// map: backTexture,
color: "red",
side: THREE.BackSide
});
const insideMaterials = [
backMaterial, // 오른쪽 면 (x+)
backMaterial, // 왼쪽 면 (x-)
backMaterial, // 위쪽 면 (y+)
backMaterial, // 아래쪽 면 (y-)
backMaterial, // 앞면 (z+)
backMaterial // 뒷면 (z-)
];
// 두 개의 정육면체를 생성
const outsideMesh = new THREE.Mesh(geometry, outsideMaterials);
const insideMesh = new THREE.Mesh(geometry, insideMaterials);
// 두 정육면체를 씬에 추가
scene.add(outsideMesh);
scene.add(insideMesh);
/* 그리기 */
...
}
텍스쳐가 안보이는 경우
webpack을 사용하고 있기 때문에 경로 설정을 해주어야 한다.
// webpack.config.js
...
new CopyWebpackPlugin({
patterns: [
{ from: "./src/main.css", to: "./main.css" },
{ from: "./src/textures", to: "./textures" },
// { from: "./src/models", to: "./models" },
// { from: "./src/sounds", to: "./sounds" }
],
})
경로 설정 후 서버 재실행해주기
'Frontend > Three.js' 카테고리의 다른 글
재질, 텍스쳐 변환 (0) | 2024.10.22 |
---|---|
재질, 로딩 매니저(여러개의 텍스쳐 이미지) (0) | 2024.10.16 |
재질, side - Mesh의 앞 뒷면 (0) | 2024.10.16 |
재질, flatShading - 각지게 표현 (0) | 2024.10.16 |
재질, MeshStandardMaterial (MeshPhongMaterial과 비교) (0) | 2024.09.30 |