本課題は、 テクスチャを使った課題 kadai10a.html を元にして、 自由曲線による立体を追加する方法で作成することを強く勧めます。 すなわち、kadai10a.html に、kadai6a.html 内のdrawShape関数と createMesh関数(名前を変更する必要あり)を追加する方が正解に たどりつきやすいと思われます。 kadai6a.html のrender()関数部分は若干面倒なことをしているので、 理解せずにテクスチャの表示を追加するとエラーを起こしやすいように思われます。
提出〆切は2025年6月17日(月) 16:00です。
提出ファイル | kadaiL.html, readme.txt, (必要ならば)pngファイル等 |
---|---|
readme.txt | どのようなシーンであるか説明を書きなさい。 |
提出先: | http://ynitta.com/class/cg2/local/handin/up.php?id=kadaiL |
Three.js の知識を駆使した作品を作りなさい。 ただし、以下の要素を全て必ず使うこと。
自由曲線で作成したジオメトリや、それを extrude (=押し出し) たジオメトリに テクスチャやバンプマッピングを適用するプログラム例を以下に示します。
下のコードは、テクスチャ画像がオリジナルではないので課題の仕様を満たしていません。 あくまでも、オリジナルからなるべく少ない変更で自由曲線を使う方法を示すためのものです。
chapter-10/02-bump-map.htmlで自由曲線に変更する |
*** chapter-10/02-bump-map.html Wed Jun 12 16:58:39 2024 --- nitta-10bezier/kadai10bezierAbbr.html Wed Jun 12 17:05:24 2024 *************** *** 44,55 **** webGLRenderer.setSize(window.innerWidth, window.innerHeight); webGLRenderer.shadowMapEnabled = true; ! var sphere1 = createMesh(new THREE.BoxGeometry(15, 15, 2), "stone.jpg"); sphere1.rotation.y = -0.5; sphere1.position.x = 12; scene.add(sphere1); ! var sphere2 = createMesh(new THREE.BoxGeometry(15, 15, 2), "stone.jpg", "stone-bump.jpg"); sphere2.rotation.y = 0.5; sphere2.position.x = -12; scene.add(sphere2); --- 44,55 ---- webGLRenderer.setSize(window.innerWidth, window.innerHeight); webGLRenderer.shadowMapEnabled = true; ! var sphere1 = createMesh(new THREE.ShapeGeometry(drawShape()), "stone.jpg"); sphere1.rotation.y = -0.5; sphere1.position.x = 12; scene.add(sphere1); ! var sphere2 = createMesh(new THREE.ShapeGeometry(drawShape()), "stone.jpg", "stone-bump.jpg"); sphere2.rotation.y = 0.5; sphere2.position.x = -12; scene.add(sphere2); *************** *** 66,74 **** // position and point the camera to the center of the scene camera.position.x = 00; ! camera.position.y = 12; ! camera.position.z = 28; ! camera.lookAt(new THREE.Vector3(0, 0, 0)); var ambiLight = new THREE.AmbientLight(0x242424); scene.add(ambiLight); --- 66,74 ---- // position and point the camera to the center of the scene camera.position.x = 00; ! camera.position.y = 32; ! camera.position.z = 58; ! camera.lookAt(new THREE.Vector3(0, 5, 0)); var ambiLight = new THREE.AmbientLight(0x242424); scene.add(ambiLight); *************** *** 94,103 **** --- 94,107 ---- this.changeTexture = function (e) { var texture = THREE.ImageUtils.loadTexture("../assets/textures/general/" + e + ".jpg"); + texture.wrapS = texture.wrapT = THREE.RepeatWrapping; + texture.repeat.set(0.1,0.1); sphere2.material.map = texture; sphere1.material.map = texture; var bump = THREE.ImageUtils.loadTexture("../assets/textures/general/" + e + "-bump.jpg"); + bump.wrapS = texture.wrapT = THREE.RepeatWrapping; + bump.repeat.set(0.1,0.1); sphere2.material.bumpMap = bump; }; *************** *** 116,129 **** --- 120,148 ---- render(); + function drawShape() { + + // create a basic shape + var shape = new THREE.Shape(); + + // 自分で自由曲線で形を定義すること + + // return the shape + return shape; + } + function createMesh(geom, imageFile, bump) { var texture = THREE.ImageUtils.loadTexture("../assets/textures/general/" + imageFile); + texture.wrapS = texture.wrapT = THREE.RepeatWrapping; + texture.repeat.set(0.1,0.1); geom.computeVertexNormals(); var mat = new THREE.MeshPhongMaterial(); mat.map = texture; if (bump) { var bump = THREE.ImageUtils.loadTexture("../assets/textures/general/" + bump); + bump.wrapS = bump.wrapT = THREE.RepeatWrapping; + bump.repeat.set(0.1,0.1); mat.bumpMap = bump; mat.bumpScale = 0.2; console.log('d'); |
さらに extrude する |
*** nitta-10bezier/kadai10bezierAbbr.html Wed Jun 12 17:05:24 2024 --- nitta-10extrude/kadai10extrudeAbbr.html Wed Jun 12 17:14:52 2024 *************** *** 44,55 **** webGLRenderer.setSize(window.innerWidth, window.innerHeight); webGLRenderer.shadowMapEnabled = true; ! var sphere1 = createMesh(new THREE.ShapeGeometry(drawShape()), "stone.jpg"); sphere1.rotation.y = -0.5; sphere1.position.x = 12; scene.add(sphere1); ! var sphere2 = createMesh(new THREE.ShapeGeometry(drawShape()), "stone.jpg", "stone-bump.jpg"); sphere2.rotation.y = 0.5; sphere2.position.x = -12; scene.add(sphere2); --- 44,63 ---- webGLRenderer.setSize(window.innerWidth, window.innerHeight); webGLRenderer.shadowMapEnabled = true; ! var options = { ! amount: 2, ! bevelThickness: 2, ! bevelSize: 0.5, ! bevelEnabled: true, ! curveSegments: 12, ! steps: 1, ! }; ! var sphere1 = createMesh(new THREE.ExtrudeGeometry(drawShape(), options), "stone.jpg"); sphere1.rotation.y = -0.5; sphere1.position.x = 12; scene.add(sphere1); ! var sphere2 = createMesh(new THREE.ExtrudeGeometry(drawShape(), options), "stone.jpg", "stone-bump.jpg"); sphere2.rotation.y = 0.5; sphere2.position.x = -12; scene.add(sphere2); |