blobt
4 years ago
8 changed files with 279 additions and 0 deletions
-
80.gitignore
-
0README.md
-
29package.json
-
30src/index.html
-
9src/main.ts
-
94src/scene.ts
-
7tsconfig.json
-
30webpack.config.js
@ -0,0 +1,80 @@ |
|||||
|
# ---> Node |
||||
|
# Logs |
||||
|
logs |
||||
|
*.log |
||||
|
npm-debug.log* |
||||
|
yarn-debug.log* |
||||
|
yarn-error.log* |
||||
|
|
||||
|
# Runtime data |
||||
|
pids |
||||
|
*.pid |
||||
|
*.seed |
||||
|
*.pid.lock |
||||
|
|
||||
|
# Directory for instrumented libs generated by jscoverage/JSCover |
||||
|
lib-cov |
||||
|
|
||||
|
# Coverage directory used by tools like istanbul |
||||
|
coverage |
||||
|
|
||||
|
# nyc test coverage |
||||
|
.nyc_output |
||||
|
|
||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) |
||||
|
.grunt |
||||
|
|
||||
|
# Bower dependency directory (https://bower.io/) |
||||
|
bower_components |
||||
|
|
||||
|
# node-waf configuration |
||||
|
.lock-wscript |
||||
|
|
||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html) |
||||
|
build/Release |
||||
|
|
||||
|
# Dependency directories |
||||
|
node_modules/ |
||||
|
jspm_packages/ |
||||
|
|
||||
|
# TypeScript v1 declaration files |
||||
|
typings/ |
||||
|
|
||||
|
# Optional npm cache directory |
||||
|
.npm |
||||
|
|
||||
|
# Optional eslint cache |
||||
|
.eslintcache |
||||
|
|
||||
|
# Optional REPL history |
||||
|
.node_repl_history |
||||
|
|
||||
|
# Output of 'npm pack' |
||||
|
*.tgz |
||||
|
|
||||
|
# Yarn Integrity file |
||||
|
.yarn-integrity |
||||
|
|
||||
|
# dotenv environment variables file |
||||
|
.env |
||||
|
|
||||
|
# parcel-bundler cache (https://parceljs.org/) |
||||
|
.cache |
||||
|
|
||||
|
# next.js build output |
||||
|
.next |
||||
|
|
||||
|
# nuxt.js build output |
||||
|
.nuxt |
||||
|
|
||||
|
# vuepress build output |
||||
|
.vuepress/dist |
||||
|
|
||||
|
# Serverless directories |
||||
|
.serverless |
||||
|
|
||||
|
# FuseBox cache |
||||
|
.fusebox/ |
||||
|
|
||||
|
package-lock.json |
||||
|
dist/ |
@ -0,0 +1,29 @@ |
|||||
|
{ |
||||
|
"name": "study_babylon", |
||||
|
"version": "1.0.0", |
||||
|
"description": "", |
||||
|
"main": "index.html", |
||||
|
"scripts": { |
||||
|
"dev": "webpack-dev-server", |
||||
|
"build": "webpack", |
||||
|
"watch": "webpack --watch", |
||||
|
"test": "echo \"Error: no test specified\" && exit 1" |
||||
|
}, |
||||
|
"repository": { |
||||
|
"type": "git", |
||||
|
"url": "http://dev.deeploving.cn/blobt/study_babylon.git" |
||||
|
}, |
||||
|
"keywords": [], |
||||
|
"author": "", |
||||
|
"license": "ISC", |
||||
|
"devDependencies": { |
||||
|
"ts-loader": "^7.0.5", |
||||
|
"typescript": "^3.9.3", |
||||
|
"webpack": "^4.43.0", |
||||
|
"webpack-cli": "^3.3.11", |
||||
|
"webpack-dev-server": "^3.11.0" |
||||
|
}, |
||||
|
"dependencies": { |
||||
|
"babylonjs": "^4.1.0" |
||||
|
} |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
|
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
<title>Study BabylonJs</title> |
||||
|
<style> |
||||
|
html, |
||||
|
body { |
||||
|
overflow: hidden; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
margin: 0; |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
#renderCanvas { |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<canvas id="renderCanvas" touch-action="none"></canvas> |
||||
|
<script src="./bundle.js" type="text/javascript"></script> |
||||
|
</body> |
||||
|
|
||||
|
</html> |
@ -0,0 +1,9 @@ |
|||||
|
import BasicScene from "./scene"; |
||||
|
|
||||
|
|
||||
|
|
||||
|
var canvas: HTMLCanvasElement = <HTMLCanvasElement>document.getElementById("renderCanvas"); |
||||
|
|
||||
|
|
||||
|
var scene: BasicScene = new BasicScene(canvas); |
||||
|
scene.renderLoop(); |
@ -0,0 +1,94 @@ |
|||||
|
import { |
||||
|
Engine, |
||||
|
Scene, |
||||
|
Camera, |
||||
|
HemisphericLight, |
||||
|
DynamicTexture, |
||||
|
Mesh, |
||||
|
StandardMaterial, |
||||
|
Color3, |
||||
|
Vector3, |
||||
|
ArcRotateCamera, |
||||
|
MeshBuilder |
||||
|
} from 'babylonjs'; |
||||
|
|
||||
|
|
||||
|
export default class BasicScene { |
||||
|
public canvas: HTMLCanvasElement; |
||||
|
public engine: Engine; |
||||
|
public scene: Scene; |
||||
|
public camera: Camera; |
||||
|
|
||||
|
public constructor(canvas: HTMLCanvasElement) { |
||||
|
this.canvas = canvas; |
||||
|
this.engine = new Engine(this.canvas, true); |
||||
|
this.scene = new Scene(this.engine); |
||||
|
this.camera = new ArcRotateCamera("camera", -Math.PI / 2, Math.PI / 2.5, 8, new Vector3(0, 0, 0), this.scene); |
||||
|
this.camera.attachControl(this.canvas, true); |
||||
|
} |
||||
|
|
||||
|
private _decorate(): void { |
||||
|
this.showWorldAxis(3); |
||||
|
const light = new HemisphericLight("light", new Vector3(0, 1, 0), this.scene); |
||||
|
//const box = MeshBuilder.CreateBox("box", {}, this.scene);
|
||||
|
|
||||
|
var origin: Vector3 = new Vector3(0, 0, 0); |
||||
|
var v1: Vector3 = new Vector3(1, 0.5, 0); |
||||
|
var v2: Vector3 = new Vector3(-0.5, 1, 0); |
||||
|
|
||||
|
this.makeLine(origin,v1); |
||||
|
this.makeLine(origin,v2); |
||||
|
//this.makeLine(new Vector3(1, 1, 0),new Vector3(1, 1, 1));
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
private makeLine(start: Vector3, end: Vector3): void { |
||||
|
var axisX = Mesh.CreateLines("lines", [start, end], this.scene); |
||||
|
axisX.color = new Color3(1, 1, 1); |
||||
|
} |
||||
|
|
||||
|
public renderLoop(): void { |
||||
|
this._decorate(); |
||||
|
this.engine.runRenderLoop(() => { |
||||
|
this.scene.render(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private makeTextPlane(text: string, color: string, size: number): Mesh { |
||||
|
var dynamicTexture = new DynamicTexture("DynamicTexture", 50, this.scene, true); |
||||
|
dynamicTexture.hasAlpha = true; |
||||
|
dynamicTexture.drawText(text, 5, 40, "bold 36px Arial", color, "transparent", true); |
||||
|
var plane = Mesh.CreatePlane("TextPlane", size, this.scene, true); |
||||
|
var material: StandardMaterial = new StandardMaterial("TextPlaneMaterial", this.scene); |
||||
|
material.backFaceCulling = false; |
||||
|
material.specularColor = new Color3(0, 0, 0); |
||||
|
material.diffuseTexture = dynamicTexture; |
||||
|
plane.material = material; |
||||
|
return plane; |
||||
|
}; |
||||
|
|
||||
|
private showWorldAxis(size: number): void { |
||||
|
var axisX = Mesh.CreateLines("axisX", [ |
||||
|
Vector3.Zero(), new Vector3(size, 0, 0), new Vector3(size * 0.95, 0.05 * size, 0), |
||||
|
new Vector3(size, 0, 0), new Vector3(size * 0.95, -0.05 * size, 0) |
||||
|
], this.scene); |
||||
|
axisX.color = new Color3(1, 0, 0); |
||||
|
var xChar = this.makeTextPlane("X", "red", size / 10); |
||||
|
xChar.position = new Vector3(0.9 * size, -0.05 * size, 0); |
||||
|
var axisY = Mesh.CreateLines("axisY", [ |
||||
|
Vector3.Zero(), new Vector3(0, size, 0), new Vector3(-0.05 * size, size * 0.95, 0), |
||||
|
new Vector3(0, size, 0), new Vector3(0.05 * size, size * 0.95, 0) |
||||
|
], this.scene); |
||||
|
axisY.color = new Color3(0, 1, 0); |
||||
|
var yChar = this.makeTextPlane("Y", "green", size / 10); |
||||
|
yChar.position = new Vector3(0, 0.9 * size, -0.05 * size); |
||||
|
var axisZ = Mesh.CreateLines("axisZ", [ |
||||
|
Vector3.Zero(), new Vector3(0, 0, size), new Vector3(0, -0.05 * size, size * 0.95), |
||||
|
new Vector3(0, 0, size), new Vector3(0, 0.05 * size, size * 0.95) |
||||
|
], this.scene); |
||||
|
axisZ.color = new Color3(0, 0, 1); |
||||
|
var zChar = this.makeTextPlane("Z", "blue", size / 10); |
||||
|
zChar.position = new Vector3(0, 0.05 * size, 0.9 * size); |
||||
|
}; |
||||
|
}; |
@ -0,0 +1,7 @@ |
|||||
|
{ |
||||
|
"compilerOptions": { |
||||
|
"target": "es6", |
||||
|
"module": "commonjs", |
||||
|
"moduleResolution": "node" |
||||
|
} |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
const path = require("path"); |
||||
|
module.exports = { |
||||
|
entry: "./src/main.ts", // 入口ts文件,名字可以任取,但是一定要注意路径设置是否正确
|
||||
|
output: { |
||||
|
filename: "./bundle.js" // 自动会产生dist目录,所以可以去掉dist/目录
|
||||
|
}, |
||||
|
mode: 'development', // 本书中,设置为开发模式
|
||||
|
devtool: "inline-source-map", // 如果要调试TypeScript源码,需要设置成这样
|
||||
|
resolve: { |
||||
|
extensions: [".ts", ".js"] // 添加ts和js作为可解析的扩展
|
||||
|
}, |
||||
|
plugins: [ |
||||
|
], |
||||
|
module: { |
||||
|
rules: [ |
||||
|
{ |
||||
|
test: /\.ts$/, // 正则表达式,如果是TypeScript源码的话
|
||||
|
loader: ["ts-loader"] // 则使用ts-loader来加载TypeScript源码,并进行转译
|
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
devServer: { // 就是配置我们npm install webpack-dev-server --save-dev安装的那个服务器
|
||||
|
contentBase: path.join(__dirname, "./dist/"), // 设置url的根目录,如果不设置,则默认是指向项目根目录(和设置./效果一样)
|
||||
|
compress: true, //如果为 true ,开启虚拟服务器时,为你的代码进行压缩。加快开发流程和优化的作用
|
||||
|
host: '0.0.0.0', // 设置主机名,默认为"localhost"
|
||||
|
port: 3000, // 设置端口号,默认端口号为8080
|
||||
|
historyApiFallback: true, //让所有404错误的页面定位到index.html
|
||||
|
open: true //启动服务器时,自动打开浏览器,默认为false
|
||||
|
} |
||||
|
}; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue