mirror of
https://github.com/wahyd4/three.js.git
synced 2026-08-24 04:15:56 +10:00
- Added Camera3D.autoUpdateMatrix
- Added Object3D.autoUpdateMatrix
This commit is contained in:
+11
-10
@@ -5,29 +5,30 @@
|
||||
THREE.Camera = function (x, y, z) {
|
||||
|
||||
this.position = new THREE.Vector3(x, y, z);
|
||||
this.target = {
|
||||
position: new THREE.Vector3(0, 0, 0)
|
||||
}
|
||||
this.target = { position: new THREE.Vector3(0, 0, 0) }
|
||||
|
||||
this.matrix = new THREE.Matrix4();
|
||||
this.projectionMatrix = THREE.Matrix4.makePerspective(45, 1 /*SCREEN_WIDTH/SCREEN_HEIGHT*/, 0.001, 1000);
|
||||
|
||||
|
||||
this.up = new THREE.Vector3(0, 1, 0);
|
||||
this.roll = 0;
|
||||
|
||||
// TODO: Need to remove this
|
||||
|
||||
// TODO: Need to remove this
|
||||
this.zoom = 3;
|
||||
this.focus = 500;
|
||||
|
||||
|
||||
this.autoUpdateMatrix = true;
|
||||
|
||||
this.updateMatrix = function () {
|
||||
|
||||
|
||||
this.matrix.lookAt(this.position, this.target.position, this.up);
|
||||
|
||||
}
|
||||
|
||||
this.toString = function () {
|
||||
|
||||
|
||||
return 'THREE.Camera ( ' + this.position + ', ' + this.target.position + ' )';
|
||||
}
|
||||
|
||||
|
||||
this.updateMatrix();
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ THREE.Object3D = function (material) {
|
||||
|
||||
this.material = material instanceof Array ? material : [material];
|
||||
|
||||
this.autoUpdateMatrix = true;
|
||||
|
||||
this.updateMatrix = function () {
|
||||
|
||||
this.matrix.identity();
|
||||
|
||||
@@ -7,6 +7,7 @@ THREE.Particle = function (material) {
|
||||
THREE.Object3D.call(this, material);
|
||||
|
||||
this.size = 1;
|
||||
this.autoUpdateMatrix = false;
|
||||
}
|
||||
|
||||
THREE.Particle.prototype = new THREE.Object3D();
|
||||
|
||||
+51
-38
@@ -28,10 +28,22 @@ THREE.Renderer = function() {
|
||||
|
||||
this.renderList = [];
|
||||
|
||||
if(camera.autoUpdateMatrix) {
|
||||
|
||||
camera.updateMatrix();
|
||||
|
||||
}
|
||||
|
||||
for (i = 0; i < scene.objects.length; i++) {
|
||||
|
||||
object = scene.objects[i];
|
||||
|
||||
if(object.autoUpdateMatrix) {
|
||||
|
||||
object.updateMatrix();
|
||||
|
||||
}
|
||||
|
||||
if (object instanceof THREE.Mesh) {
|
||||
|
||||
matrix.multiply(camera.matrix, object.matrix);
|
||||
@@ -62,29 +74,29 @@ THREE.Renderer = function() {
|
||||
facesLength = object.geometry.faces.length;
|
||||
|
||||
for (j = 0; j < facesLength; j++) {
|
||||
|
||||
|
||||
face = object.geometry.faces[j];
|
||||
|
||||
// TODO: Use normals for culling
|
||||
|
||||
if (face instanceof THREE.Face3) {
|
||||
|
||||
|
||||
v1 = object.geometry.vertices[face.a];
|
||||
v2 = object.geometry.vertices[face.b];
|
||||
v3 = object.geometry.vertices[face.c];
|
||||
|
||||
|
||||
if (v1.visible && v2.visible && v3.visible && (object.doubleSided ||
|
||||
(v3.screen.x - v1.screen.x) * (v2.screen.y - v1.screen.y) -
|
||||
(v3.screen.y - v1.screen.y) * (v2.screen.x - v1.screen.x) > 0) ) {
|
||||
|
||||
|
||||
face.screen.z = (v1.screen.z + v2.screen.z + v3.screen.z) * 0.3;
|
||||
|
||||
|
||||
if (!face3Pool[face3count]) {
|
||||
|
||||
|
||||
face3Pool[face3count] = new THREE.RenderableFace3();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
face3Pool[face3count].v1.x = v1.screen.x;
|
||||
face3Pool[face3count].v1.y = v1.screen.y;
|
||||
face3Pool[face3count].v2.x = v2.screen.x;
|
||||
@@ -92,7 +104,7 @@ THREE.Renderer = function() {
|
||||
face3Pool[face3count].v3.x = v3.screen.x;
|
||||
face3Pool[face3count].v3.y = v3.screen.y;
|
||||
face3Pool[face3count].screenZ = face.screen.z;
|
||||
|
||||
|
||||
face3Pool[face3count].color = face.color;
|
||||
face3Pool[face3count].material = object.material;
|
||||
|
||||
@@ -100,28 +112,28 @@ THREE.Renderer = function() {
|
||||
|
||||
face3count++;
|
||||
}
|
||||
|
||||
|
||||
} else if (face instanceof THREE.Face4) {
|
||||
|
||||
v1 = object.geometry.vertices[face.a];
|
||||
v2 = object.geometry.vertices[face.b];
|
||||
v3 = object.geometry.vertices[face.c];
|
||||
v4 = object.geometry.vertices[face.d];
|
||||
|
||||
|
||||
if (v1.visible && v2.visible && v3.visible && v4.visible && (object.doubleSided ||
|
||||
((v4.screen.x - v1.screen.x) * (v2.screen.y - v1.screen.y) -
|
||||
(v4.screen.y - v1.screen.y) * (v2.screen.x - v1.screen.x) > 0 ||
|
||||
(v2.screen.x - v3.screen.x) * (v4.screen.y - v3.screen.y) -
|
||||
(v2.screen.y - v3.screen.y) * (v4.screen.x - v3.screen.x) > 0)) ) {
|
||||
|
||||
|
||||
face.screen.z = (v1.screen.z + v2.screen.z + v3.screen.z + v4.screen.z) * 0.25;
|
||||
|
||||
if (!face4Pool[face4count]) {
|
||||
|
||||
|
||||
face4Pool[face4count] = new THREE.RenderableFace4();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
face4Pool[face4count].v1.x = v1.screen.x;
|
||||
face4Pool[face4count].v1.y = v1.screen.y;
|
||||
face4Pool[face4count].v2.x = v2.screen.x;
|
||||
@@ -131,7 +143,7 @@ THREE.Renderer = function() {
|
||||
face4Pool[face4count].v4.x = v4.screen.x;
|
||||
face4Pool[face4count].v4.y = v4.screen.y;
|
||||
face4Pool[face4count].screenZ = face.screen.z;
|
||||
|
||||
|
||||
face4Pool[face4count].color = face.color;
|
||||
face4Pool[face4count].material = object.material;
|
||||
|
||||
@@ -149,7 +161,7 @@ THREE.Renderer = function() {
|
||||
verticesLength = object.geometry.vertices.length;
|
||||
|
||||
for (j = 0; j < verticesLength; j++) {
|
||||
|
||||
|
||||
vertex = object.geometry.vertices[j];
|
||||
|
||||
vertex.screen.copy(vertex.position);
|
||||
@@ -162,45 +174,45 @@ THREE.Renderer = function() {
|
||||
|
||||
vertex.screen.x *= vertex.screen.z;
|
||||
vertex.screen.y *= vertex.screen.z;
|
||||
|
||||
|
||||
if (j > 0) {
|
||||
|
||||
|
||||
vertex2 = object.geometry.vertices[j-1];
|
||||
|
||||
|
||||
if (!vertex.visible || !vertex2.visible) {
|
||||
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (!linePool[lineCount]) {
|
||||
|
||||
|
||||
linePool[lineCount] = new THREE.RenderableLine();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
linePool[lineCount].v1.x = vertex.screen.x;
|
||||
linePool[lineCount].v1.y = vertex.screen.y;
|
||||
linePool[lineCount].v2.x = vertex2.screen.x;
|
||||
linePool[lineCount].v2.y = vertex2.screen.y;
|
||||
linePool[lineCount].screenZ = (vertex.screen.z + vertex2.screen.z) * 0.5;
|
||||
linePool[lineCount].screenZ = (vertex.screen.z + vertex2.screen.z) * 0.5;
|
||||
linePool[lineCount].material = object.material;
|
||||
|
||||
|
||||
this.renderList.push( linePool[lineCount] );
|
||||
|
||||
|
||||
lineCount++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else if (object instanceof THREE.Particle) {
|
||||
|
||||
|
||||
object.screen.copy(object.position);
|
||||
|
||||
|
||||
camera.matrix.transform(object.screen);
|
||||
|
||||
|
||||
object.screen.z = focuszoom / (camerafocus + object.screen.z);
|
||||
|
||||
if (object.screen.z < 0) {
|
||||
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -208,25 +220,26 @@ THREE.Renderer = function() {
|
||||
object.screen.y *= object.screen.z;
|
||||
|
||||
if (!particlePool[particleCount]) {
|
||||
|
||||
|
||||
particlePool[particleCount] = new THREE.RenderableParticle();
|
||||
|
||||
}
|
||||
|
||||
|
||||
particlePool[particleCount].x = object.screen.x;
|
||||
particlePool[particleCount].y = object.screen.y;
|
||||
particlePool[particleCount].screenZ = object.screen.z;
|
||||
|
||||
particlePool[particleCount].size = object.size;
|
||||
|
||||
particlePool[particleCount].size = object.size;
|
||||
particlePool[particleCount].material = object.material;
|
||||
particlePool[particleCount].color = object.color;
|
||||
|
||||
this.renderList.push( particlePool[particleCount] );
|
||||
|
||||
|
||||
particleCount++;
|
||||
}
|
||||
}
|
||||
|
||||
this.renderList.sort(sort);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user