First commit, sphere with individually painted faces
This commit is contained in:
commit
ec037d219a
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
node_modules/
|
||||||
|
dist
|
||||||
|
package-lock.json
|
24
package.json
Normal file
24
package.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"name": "planet",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"start": "webpack-dev-server --mode development --watch-poll --progress --hot",
|
||||||
|
"build": "webpack"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"three": "^0.101.1",
|
||||||
|
"three-orbit-controls": "^82.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"file-loader": "^3.0.1",
|
||||||
|
"html-webpack-plugin": "^3.2.0",
|
||||||
|
"webpack": "^4.29.0",
|
||||||
|
"webpack-cli": "^3.2.1",
|
||||||
|
"webpack-dev-server": "^3.1.14"
|
||||||
|
}
|
||||||
|
}
|
13
src/index.html
Normal file
13
src/index.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset=utf-8 />
|
||||||
|
<title>My first three.js app</title>
|
||||||
|
<style>
|
||||||
|
html, body { margin: 0; padding: 0; overflow: hidden; }
|
||||||
|
canvas { width: 100%; height: 100%; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
51
src/index.js
Normal file
51
src/index.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import * as THREE from "three";
|
||||||
|
|
||||||
|
var OrbitControls = require("three-orbit-controls")(THREE);
|
||||||
|
|
||||||
|
const scene = new THREE.Scene();
|
||||||
|
var camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000);
|
||||||
|
|
||||||
|
var geometry = new THREE.IcosahedronBufferGeometry(5, 7);
|
||||||
|
|
||||||
|
var position = geometry.getAttribute("position");
|
||||||
|
var colors = [];
|
||||||
|
var color = new THREE.Color(Math.random(), Math.random(), Math.random());
|
||||||
|
for (var i = 0; i < position.count / 3; i += 1) {
|
||||||
|
color.setRGB(i / (position.count / 3), i / (position.count / 3), i / (position.count / 3));
|
||||||
|
colors.push(color.r, color.g, color.b);
|
||||||
|
colors.push(color.r, color.g, color.b);
|
||||||
|
colors.push(color.r, color.g, color.b);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disposeArray() {
|
||||||
|
this.array = null;
|
||||||
|
}
|
||||||
|
geometry.addAttribute("color", new THREE.Float32BufferAttribute(colors, 3).onUpload(disposeArray));
|
||||||
|
var material = new THREE.MeshBasicMaterial({ vertexColors: THREE.FaceColors });
|
||||||
|
var sphere = new THREE.Mesh(geometry, material);
|
||||||
|
scene.add(sphere);
|
||||||
|
|
||||||
|
var controls = new OrbitControls(camera);
|
||||||
|
|
||||||
|
camera.position.z = 15;
|
||||||
|
controls.update()
|
||||||
|
|
||||||
|
var renderer = new THREE.WebGLRenderer();
|
||||||
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
||||||
|
document.body.appendChild( renderer.domElement );
|
||||||
|
|
||||||
|
window.addEventListener('resize', onWindowResize, false);
|
||||||
|
|
||||||
|
function onWindowResize() {
|
||||||
|
camera.aspect = window.innerWidth / window.innerHeight;
|
||||||
|
camera.updateProjectionMatrix();
|
||||||
|
controls.update();
|
||||||
|
renderer.setSize(window.innerWidth, window.innerHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
function animate() {
|
||||||
|
renderer.render(scene, camera);
|
||||||
|
requestAnimationFrame(animate);
|
||||||
|
}
|
||||||
|
|
||||||
|
animate();
|
BIN
src/world.jpg
Normal file
BIN
src/world.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 129 KiB |
32
webpack.config.js
Normal file
32
webpack.config.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
entry: "./src/index.js",
|
||||||
|
output: {
|
||||||
|
filename: "main.js",
|
||||||
|
path: path.resolve(__dirname, "dist")
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(png|jpg|gif)$/,
|
||||||
|
use: [
|
||||||
|
{
|
||||||
|
loader: 'file-loader',
|
||||||
|
options: {},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new HtmlWebpackPlugin({ template: "src/index.html" })
|
||||||
|
],
|
||||||
|
devtool: "source-map",
|
||||||
|
devServer: {
|
||||||
|
watchOptions: {
|
||||||
|
ignored: /node_modules/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user