Merge pull request #21171 from kaktus40/THREEBufferAttribute

[three] add setArray to BufferAttribute
This commit is contained in:
Ron Buckton
2017-11-03 21:38:45 -07:00
committed by GitHub
4 changed files with 59 additions and 55 deletions
+36 -36
View File
@@ -11,30 +11,30 @@ initScene = function() {
projector = new THREE.Projector;
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMapEnabled = true;
// // renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
// // renderer.shadowMapSoft = true;
document.getElementById('viewport').appendChild(renderer.domElement);
render_stats = new Stats();
render_stats.dom.style.position = 'absolute';
render_stats.dom.style.top = '1px';
render_stats.dom.style.zIndex = '100';
document.getElementById( 'viewport' ).appendChild( render_stats.dom );
document.getElementById('viewport').appendChild(render_stats.dom);
physics_stats = new Stats();
physics_stats.dom.style.position = 'absolute';
physics_stats.dom.style.top = '50px';
physics_stats.dom.style.zIndex = '100';
document.getElementById( 'viewport' ).appendChild( physics_stats.dom );
document.getElementById('viewport').appendChild(physics_stats.dom);
scene = new Physijs.Scene();
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.setGravity(new THREE.Vector3(0, -30, 0));
scene.addEventListener(
'update',
function() {
applyForce();
scene.simulate( undefined, 1 );
scene.simulate(undefined, 1);
physics_stats.update();
}
);
@@ -45,14 +45,14 @@ initScene = function() {
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
camera.position.set(60, 50, 60);
camera.lookAt(scene.position);
scene.add(camera);
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light = new THREE.DirectionalLight(0xFFFFFF);
light.position.set(20, 40, -15);
light.target.position.copy(scene.position);
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
@@ -63,11 +63,11 @@ initScene = function() {
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
//// light.shadowDarkness = .7;
scene.add( light );
scene.add(light);
// Materials
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture('images/rocks.jpg') }),
.8, // high friction
.4 // low restitution
);
@@ -75,7 +75,7 @@ initScene = function() {
// ground_material.map.repeat.set( 3, 3 );
box_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/plywood.jpg' ) }),
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture('images/plywood.jpg') }),
.4, // low friction
.6 // high restitution
);
@@ -89,11 +89,11 @@ initScene = function() {
0 // mass
);
ground.receiveShadow = true;
scene.add( ground );
scene.add(ground);
for ( var i = 0; i < 10; i++ ) {
for (var i = 0; i < 10; i++) {
box = new Physijs.BoxMesh(
new THREE.BoxGeometry( 4, 4, 4 ),
new THREE.BoxGeometry(4, 4, 4),
box_material
);
box.position.set(
@@ -112,46 +112,46 @@ initScene = function() {
Math.random() * 1 + .5
);
box.castShadow = true;
scene.add( box );
boxes.push( box );
scene.add(box);
boxes.push(box);
}
renderer.domElement.addEventListener( 'mousemove', setMousePosition );
renderer.domElement.addEventListener('mousemove', setMousePosition);
requestAnimationFrame( render );
requestAnimationFrame(render);
scene.simulate();
};
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
requestAnimationFrame(render);
renderer.render(scene, camera);
render_stats.update();
};
setMousePosition = function( evt ) {
setMousePosition = function(evt) {
// Find where mouse cursor intersects the ground plane
var vector = new THREE.Vector3(
( evt.clientX / renderer.dom.clientWidth ) * 2 - 1,
-( ( evt.clientY / renderer.dom.clientHeight ) * 2 - 1 ),
(evt.clientX / renderer.dom.clientWidth) * 2 - 1,
-((evt.clientY / renderer.dom.clientHeight) * 2 - 1),
.5
);
projector.unprojectVector( vector, camera );
vector.sub( camera.position ).normalize();
projector.unprojectVector(vector, camera);
vector.sub(camera.position).normalize();
var coefficient = (box.position.y - camera.position.y) / vector.y
mouse_position = camera.position.clone().add( vector.multiplyScalar( coefficient ) );
mouse_position = camera.position.clone().add(vector.multiplyScalar(coefficient));
};
applyForce = function() {
if (!mouse_position) return;
var strength = 35, distance, effect, offset, box;
for ( var i = 0; i < boxes.length; i++ ) {
for (var i = 0; i < boxes.length; i++) {
box = boxes[i];
distance = mouse_position.distanceTo( box.position ),
effect = mouse_position.clone().sub( box.position ).normalize().multiplyScalar( strength / distance ).negate(),
offset = mouse_position.clone().sub( box.position );
box.applyImpulse( effect, offset );
distance = mouse_position.distanceTo(box.position);
effect = mouse_position.clone().sub(box.position).normalize().multiplyScalar(strength / distance).negate();
offset = mouse_position.clone().sub(box.position);
box.applyImpulse(effect, offset);
}
};
+10 -9
View File
@@ -24,14 +24,14 @@
scene = new THREE.Scene();
var image = document.createElement('img');
image.addEventListener('load', function (event: Event) {
image.addEventListener('load', function(event: Event) {
for (var i = 0; i < particlesTotal; i++) {
var object = new THREE.CSS3DSprite(image.cloneNode());
object.position.x = Math.random() * 4000 - 2000,
object.position.y = Math.random() * 4000 - 2000,
object.position.z = Math.random() * 4000 - 2000
object.position.x = Math.random() * 4000 - 2000;
object.position.y = Math.random() * 4000 - 2000;
object.position.z = Math.random() * 4000 - 2000;
scene.add(object);
objects.push(object);
@@ -85,7 +85,7 @@
Math.random() * 4000 - 2000,
Math.random() * 4000 - 2000,
Math.random() * 4000 - 2000
);
);
}
@@ -102,7 +102,7 @@
radius * Math.cos(theta) * Math.sin(phi),
radius * Math.sin(theta) * Math.sin(phi),
radius * Math.cos(phi)
);
);
}
@@ -138,7 +138,7 @@
var offset = current * particlesTotal * 3;
var duration = 2000;
for (var i = 0, j = offset; i < particlesTotal; i++, j += 3) {
for (var i = 0, j = offset; i < particlesTotal;) {
var object = objects[i];
@@ -150,7 +150,8 @@
}, Math.random() * duration + duration)
.easing(TWEEN.Easing.Exponential.InOut)
.start();
i++ ;
j += 3;
}
new TWEEN.Tween(this)
@@ -182,4 +183,4 @@
renderer.render(scene, camera);
}
}
}
+11 -9
View File
@@ -10,12 +10,12 @@
var camera: THREE.PerspectiveCamera, scene: THREE.Scene, renderer: THREE.WebGLRenderer, objects: THREE.Mesh[];
var particleLight: THREE.Mesh;
var materials: ( THREE.MeshBasicMaterial |
THREE.MeshPhongMaterial |
THREE.MeshNormalMaterial |
THREE.MeshLambertMaterial |
THREE.MeshFaceMaterial |
THREE.MeshDepthMaterial ) [] = [];
var materials: (THREE.MeshBasicMaterial |
THREE.MeshPhongMaterial |
THREE.MeshNormalMaterial |
THREE.MeshLambertMaterial |
THREE.MeshFaceMaterial |
THREE.MeshDepthMaterial)[] = [];
init();
animate();
@@ -100,7 +100,7 @@
let material = materials[i];
geometry = material instanceof THREE.MeshFaceMaterial ? geometry_pieces :
(material.shading == THREE.FlatShading ? geometry_flat : geometry_smooth);
(material.shading == THREE.FlatShading ? geometry_flat : geometry_smooth);
sphere = new THREE.Mesh(geometry, material);
@@ -178,7 +178,7 @@
var x = 0, y = 0;
for (var i = 0, j = 0, l = image.data.length; i < l; i += 4, j++) {
for (var i = 0, j = 0, l = image.data.length; i < l;) {
x = j % 256;
y = x == 0 ? y + 1 : y;
@@ -187,6 +187,8 @@
image.data[i + 1] = 255;
image.data[i + 2] = 255;
image.data[i + 3] = Math.floor(x ^ y);
i += 4;
j++;
}
@@ -235,4 +237,4 @@
renderer.render(scene, camera);
}
}
}
+2 -1
View File
@@ -672,6 +672,7 @@ export class BufferAttribute {
needsUpdate: boolean;
count: number;
setArray(array?: ArrayBufferView): void;
setDynamic(dynamic: boolean): BufferAttribute;
clone(): this;
copy(source: this): this;
@@ -682,7 +683,7 @@ export class BufferAttribute {
copyVector2sArray(vectors: {x: number, y: number}[]): BufferAttribute;
copyVector3sArray(vectors: {x: number, y: number, z: number}[]): BufferAttribute;
copyVector4sArray(vectors: {x: number, y: number, z: number, w: number}[]): BufferAttribute;
set(value: ArrayLike<number>, offset?: number): BufferAttribute;
set(value: ArrayLike<number>|ArrayBufferView, offset?: number): BufferAttribute;
getX(index: number): number;
setX(index: number, x: number): BufferAttribute;
getY(index: number): number;