three-base 2.0.9 → 2.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FPScontrol.d.ts +1 -0
- package/FPScontrol.js +3 -2
- package/FPScontrol.ts +3 -3
- package/ThreeBase.js +1 -1
- package/ThreeBase.ts +1 -1
- package/package.json +1 -1
- package/pass/glow_pass.js +6 -4
- package/pass/glow_pass.ts +12 -10
package/FPScontrol.d.ts
CHANGED
package/FPScontrol.js
CHANGED
|
@@ -28,7 +28,8 @@ export default class FPScontrol extends EventDispatcher {
|
|
|
28
28
|
// 是否启用
|
|
29
29
|
enable = false;
|
|
30
30
|
GRAVITY = 30; // 重力
|
|
31
|
-
STEPS_PER_FRAME = 5; //
|
|
31
|
+
STEPS_PER_FRAME = 5; // 每帧碰撞计算的次数
|
|
32
|
+
speed = 1; // 速度
|
|
32
33
|
camera;
|
|
33
34
|
// 世界八叉树对象
|
|
34
35
|
worldOctree = new Octree();
|
|
@@ -91,7 +92,7 @@ export default class FPScontrol extends EventDispatcher {
|
|
|
91
92
|
};
|
|
92
93
|
// 玩家移动控制器
|
|
93
94
|
controls = (deltaTime) => {
|
|
94
|
-
const speedDelta = deltaTime * (this.playerOnFloor ? 25 : 8);
|
|
95
|
+
const speedDelta = deltaTime * (this.playerOnFloor ? 25 : 8) * this.speed;
|
|
95
96
|
if (this.keyStates['KeyW']) {
|
|
96
97
|
this.playerVelocity.add(this.getForwardVector().multiplyScalar(speedDelta));
|
|
97
98
|
}
|
package/FPScontrol.ts
CHANGED
|
@@ -39,8 +39,8 @@ export default class FPScontrol extends EventDispatcher {
|
|
|
39
39
|
enable = false;
|
|
40
40
|
|
|
41
41
|
GRAVITY = 30; // 重力
|
|
42
|
-
STEPS_PER_FRAME = 5; //
|
|
43
|
-
|
|
42
|
+
STEPS_PER_FRAME = 5; // 每帧碰撞计算的次数
|
|
43
|
+
speed = 1; // 速度
|
|
44
44
|
camera!: Camera;
|
|
45
45
|
|
|
46
46
|
// 世界八叉树对象
|
|
@@ -121,7 +121,7 @@ export default class FPScontrol extends EventDispatcher {
|
|
|
121
121
|
|
|
122
122
|
// 玩家移动控制器
|
|
123
123
|
controls = (deltaTime: number) => {
|
|
124
|
-
const speedDelta = deltaTime * (this.playerOnFloor ? 25 : 8);
|
|
124
|
+
const speedDelta = deltaTime * (this.playerOnFloor ? 25 : 8) * this.speed;
|
|
125
125
|
if (this.keyStates['KeyW']) {
|
|
126
126
|
this.playerVelocity.add(this.getForwardVector().multiplyScalar(speedDelta));
|
|
127
127
|
}
|
package/ThreeBase.js
CHANGED
|
@@ -240,7 +240,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
240
240
|
// 渲染场景
|
|
241
241
|
render() {
|
|
242
242
|
// 控制器在移动时鼠标不能操作
|
|
243
|
-
this.controls.enabled = (this.controlsPosition.isDone() || this.controlsCenter.isDone());
|
|
243
|
+
// this.controls.enabled = (this.controlsPosition.isDone() || this.controlsCenter.isDone());
|
|
244
244
|
// canvas 没有在页面上面的话 就跳过渲染
|
|
245
245
|
if (!threeUtils.inDocument(this.renderer.domElement)) {
|
|
246
246
|
this.stopRender();
|
package/ThreeBase.ts
CHANGED
|
@@ -287,7 +287,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
287
287
|
render() {
|
|
288
288
|
|
|
289
289
|
// 控制器在移动时鼠标不能操作
|
|
290
|
-
this.controls.enabled = (this.controlsPosition.isDone() || this.controlsCenter.isDone());
|
|
290
|
+
// this.controls.enabled = (this.controlsPosition.isDone() || this.controlsCenter.isDone());
|
|
291
291
|
|
|
292
292
|
// canvas 没有在页面上面的话 就跳过渲染
|
|
293
293
|
if (!threeUtils.inDocument(this.renderer.domElement)) {
|
package/package.json
CHANGED
package/pass/glow_pass.js
CHANGED
|
@@ -342,7 +342,8 @@ const blurShader = new RawShaderMaterial({
|
|
|
342
342
|
const filterSelectShader = new RawShaderMaterial({
|
|
343
343
|
uniforms: {
|
|
344
344
|
selectTexture: { value: null },
|
|
345
|
-
blurTexture: { value: null }
|
|
345
|
+
blurTexture: { value: null },
|
|
346
|
+
opacity: { value: 1 },
|
|
346
347
|
},
|
|
347
348
|
vertexShader: `
|
|
348
349
|
attribute vec3 position;
|
|
@@ -359,11 +360,13 @@ const filterSelectShader = new RawShaderMaterial({
|
|
|
359
360
|
#endif
|
|
360
361
|
uniform sampler2D selectTexture;
|
|
361
362
|
uniform sampler2D blurTexture;
|
|
363
|
+
uniform float opacity;
|
|
362
364
|
varying vec2 vUv;
|
|
363
365
|
|
|
364
366
|
void main() {
|
|
365
367
|
gl_FragColor = texture2D(blurTexture, vUv);
|
|
366
368
|
gl_FragColor.a -= (texture2D(selectTexture, vUv).a);
|
|
369
|
+
gl_FragColor.a *= opacity;
|
|
367
370
|
}
|
|
368
371
|
`,
|
|
369
372
|
blending: NoBlending,
|
|
@@ -375,7 +378,7 @@ const filterSelectShader = new RawShaderMaterial({
|
|
|
375
378
|
const scene = new Scene();
|
|
376
379
|
// 对象发光
|
|
377
380
|
export default function glow_pass(renderer, camera, object3d) {
|
|
378
|
-
const { glow_enable = false, glow_color = "#04fa12", glow_width = 1 } = object3d.userData;
|
|
381
|
+
const { glow_enable = false, glow_color = "#04fa12", glow_width = 1, glow_opacity = 1 } = object3d.userData;
|
|
379
382
|
if (!glow_enable || glow_width === 0) {
|
|
380
383
|
return;
|
|
381
384
|
}
|
|
@@ -399,13 +402,11 @@ export default function glow_pass(renderer, camera, object3d) {
|
|
|
399
402
|
blurShader.uniforms.width.value = glow_width / 10;
|
|
400
403
|
//一次描边
|
|
401
404
|
renderer.setRenderTarget(blur1TextureTarget);
|
|
402
|
-
blurShader.uniforms.width.value = 1;
|
|
403
405
|
blurShader.uniforms.tDiffuse.value = selectTextureTarget.texture;
|
|
404
406
|
blurShader.uniforms.opacity.value = 1.0;
|
|
405
407
|
fsQuad.render(renderer, blurShader);
|
|
406
408
|
//二次描边
|
|
407
409
|
renderer.setRenderTarget(blur2TextureTarget);
|
|
408
|
-
blurShader.uniforms.width.value = glow_width / 10;
|
|
409
410
|
blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
|
|
410
411
|
blurShader.uniforms.opacity.value = 0.9;
|
|
411
412
|
fsQuad.render(renderer, blurShader);
|
|
@@ -457,6 +458,7 @@ export default function glow_pass(renderer, camera, object3d) {
|
|
|
457
458
|
renderer.setRenderTarget(originRenderTarget);
|
|
458
459
|
filterSelectShader.uniforms.selectTexture.value = selectTextureTarget.texture;
|
|
459
460
|
filterSelectShader.uniforms.blurTexture.value = blur1TextureTarget.texture;
|
|
461
|
+
filterSelectShader.uniforms.opacity.value = glow_opacity;
|
|
460
462
|
filterSelectShader.blending = NormalBlending; // 与有的纹理融合计算 保留前面通道传递下来的纹理
|
|
461
463
|
fsQuad.render(renderer, filterSelectShader);
|
|
462
464
|
// 调试代码
|
package/pass/glow_pass.ts
CHANGED
|
@@ -351,7 +351,8 @@ const blurShader = new RawShaderMaterial({
|
|
|
351
351
|
const filterSelectShader = new RawShaderMaterial({
|
|
352
352
|
uniforms: {
|
|
353
353
|
selectTexture: { value: null },
|
|
354
|
-
blurTexture: { value: null }
|
|
354
|
+
blurTexture: { value: null },
|
|
355
|
+
opacity: { value: 1 },
|
|
355
356
|
},
|
|
356
357
|
vertexShader: `
|
|
357
358
|
attribute vec3 position;
|
|
@@ -368,11 +369,13 @@ const filterSelectShader = new RawShaderMaterial({
|
|
|
368
369
|
#endif
|
|
369
370
|
uniform sampler2D selectTexture;
|
|
370
371
|
uniform sampler2D blurTexture;
|
|
372
|
+
uniform float opacity;
|
|
371
373
|
varying vec2 vUv;
|
|
372
374
|
|
|
373
375
|
void main() {
|
|
374
376
|
gl_FragColor = texture2D(blurTexture, vUv);
|
|
375
377
|
gl_FragColor.a -= (texture2D(selectTexture, vUv).a);
|
|
378
|
+
gl_FragColor.a *= opacity;
|
|
376
379
|
}
|
|
377
380
|
`,
|
|
378
381
|
blending: NoBlending, // 渲染时不与背景融合计算 直接替换
|
|
@@ -387,7 +390,7 @@ const scene = new Scene();
|
|
|
387
390
|
// 对象发光
|
|
388
391
|
export default function glow_pass(renderer: WebGLRenderer, camera: Camera, object3d: Object3D) {
|
|
389
392
|
|
|
390
|
-
const { glow_enable = false, glow_color = "#04fa12", glow_width = 1 } = object3d.userData;
|
|
393
|
+
const { glow_enable = false, glow_color = "#04fa12", glow_width = 1, glow_opacity = 1 } = object3d.userData;
|
|
391
394
|
|
|
392
395
|
if (!glow_enable || glow_width === 0) {
|
|
393
396
|
return;
|
|
@@ -414,39 +417,37 @@ export default function glow_pass(renderer: WebGLRenderer, camera: Camera, objec
|
|
|
414
417
|
//描边颜色
|
|
415
418
|
blurShader.uniforms.color.value.set(glow_color);
|
|
416
419
|
blurShader.uniforms.width.value = glow_width / 10;
|
|
417
|
-
|
|
420
|
+
|
|
418
421
|
//一次描边
|
|
419
422
|
renderer.setRenderTarget(blur1TextureTarget);
|
|
420
|
-
blurShader.uniforms.width.value = 1;
|
|
421
423
|
blurShader.uniforms.tDiffuse.value = selectTextureTarget.texture;
|
|
422
424
|
blurShader.uniforms.opacity.value = 1.0;
|
|
423
425
|
fsQuad.render(renderer, blurShader);
|
|
424
|
-
|
|
426
|
+
|
|
425
427
|
//二次描边
|
|
426
428
|
renderer.setRenderTarget(blur2TextureTarget);
|
|
427
|
-
blurShader.uniforms.width.value = glow_width / 10;
|
|
428
429
|
blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
|
|
429
430
|
blurShader.uniforms.opacity.value = 0.9;
|
|
430
431
|
fsQuad.render(renderer, blurShader);
|
|
431
|
-
|
|
432
|
+
|
|
432
433
|
//三次描边
|
|
433
434
|
renderer.setRenderTarget(blur1TextureTarget);
|
|
434
435
|
blurShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
|
|
435
436
|
blurShader.uniforms.opacity.value = 0.8;
|
|
436
437
|
fsQuad.render(renderer, blurShader);
|
|
437
|
-
|
|
438
|
+
|
|
438
439
|
//四次描边
|
|
439
440
|
renderer.setRenderTarget(blur2TextureTarget);
|
|
440
441
|
blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
|
|
441
442
|
blurShader.uniforms.opacity.value = 0.7;
|
|
442
443
|
fsQuad.render(renderer, blurShader);
|
|
443
|
-
|
|
444
|
+
|
|
444
445
|
//五次描边
|
|
445
446
|
renderer.setRenderTarget(blur1TextureTarget);
|
|
446
447
|
blurShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
|
|
447
448
|
blurShader.uniforms.opacity.value = 0.6;
|
|
448
449
|
fsQuad.render(renderer, blurShader);
|
|
449
|
-
|
|
450
|
+
|
|
450
451
|
//六次描边
|
|
451
452
|
renderer.setRenderTarget(blur2TextureTarget);
|
|
452
453
|
blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
|
|
@@ -486,6 +487,7 @@ export default function glow_pass(renderer: WebGLRenderer, camera: Camera, objec
|
|
|
486
487
|
renderer.setRenderTarget(originRenderTarget);
|
|
487
488
|
filterSelectShader.uniforms.selectTexture.value = selectTextureTarget.texture;
|
|
488
489
|
filterSelectShader.uniforms.blurTexture.value = blur1TextureTarget.texture;
|
|
490
|
+
filterSelectShader.uniforms.opacity.value = glow_opacity;
|
|
489
491
|
filterSelectShader.blending = NormalBlending; // 与有的纹理融合计算 保留前面通道传递下来的纹理
|
|
490
492
|
fsQuad.render(renderer, filterSelectShader);
|
|
491
493
|
|