Skip to content

Commit

Permalink
Merge pull request #163 from potree/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
m-schuetz committed Jul 14, 2015
2 parents 8c171aa + 130fd18 commit 13ec32e
Show file tree
Hide file tree
Showing 16 changed files with 1,239 additions and 2,031 deletions.
183 changes: 94 additions & 89 deletions build/js/potree.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,6 @@ Potree.Shaders["pointcloud.vs"] = [
"uniform float spacing;",
"uniform float near;",
"uniform float far;",
"uniform float level;",
"uniform float visibleNodesOffset;",
"",
"#if defined use_clip_box",
" uniform mat4 clipBoxes[max_clip_boxes];",
Expand All @@ -114,7 +112,6 @@ Potree.Shaders["pointcloud.vs"] = [
"uniform float minSize; // minimum pixel size",
"uniform float maxSize; // maximum pixel size",
"uniform float octreeSize;",
"uniform vec3 bbMin;",
"uniform vec3 bbSize;",
"uniform vec3 uColor;",
"uniform float opacity;",
Expand Down Expand Up @@ -173,12 +170,11 @@ Potree.Shaders["pointcloud.vs"] = [
" * find the tree depth at the point position",
" */",
"float getLocalTreeDepth(){",
" vec3 offset = bbMin;",
" float iOffset = visibleNodesOffset;",
" float depth = level;",
" vec3 offset = vec3(0.0, 0.0, 0.0);",
" float iOffset = 0.0;",
" float depth = 0.0;",
" for(float i = 0.0; i <= 1000.0; i++){",
" ",
" float nodeSizeAtLevel = octreeSize / pow(2.0, i + level);",
" float nodeSizeAtLevel = octreeSize / pow(2.0, i);",
" vec3 index3d = (position - offset) / nodeSizeAtLevel;",
" index3d = floor(index3d + 0.5);",
" float index = 4.0*index3d.x + 2.0*index3d.y + index3d.z;",
Expand Down Expand Up @@ -648,6 +644,36 @@ Potree.Shaders["pointcloud.fs"] = [
"",
].join("\n");

Potree.Shaders["normalize.vs"] = [
"",
"varying vec2 vUv;",
"",
"void main() {",
" vUv = uv;",
"",
" gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);",
"}",
].join("\n");

Potree.Shaders["normalize.fs"] = [
"",
"#extension GL_EXT_frag_depth : enable",
"",
"uniform sampler2D depthMap;",
"uniform sampler2D texture;",
"",
"varying vec2 vUv;",
"",
"void main() {",
" vec4 color = texture2D(texture, vUv); ",
" float depth = texture2D(depthMap, vUv).g; ",
" color = color / color.w;",
" gl_FragColor = color; ",
" ",
" gl_FragDepthEXT = depth;",
"}",
].join("\n");




Expand Down Expand Up @@ -1564,15 +1590,12 @@ Potree.PointCloudMaterial = function(parameters){
minSize: { type: "f", value: 2 },
maxSize: { type: "f", value: 2 },
octreeSize: { type: "f", value: 0 },
bbMin: { type: "fv", value: [0,0,0] },
bbSize: { type: "fv", value: [0,0,0] },
heightMin: { type: "f", value: 0.0 },
heightMax: { type: "f", value: 1.0 },
intensityMin: { type: "f", value: 0.0 },
intensityMax: { type: "f", value: 1.0 },
clipBoxCount: { type: "f", value: 0 },
level: { type: "f", value: 0 },
visibleNodesOffset: { type: "f", value: 0 },
visibleNodes: { type: "t", value: this.visibleNodesTexture },
pcIndex: { type: "f", value: 0 },
gradient: { type: "t", value: this.gradientTexture },
Expand Down Expand Up @@ -3769,7 +3792,6 @@ Potree.PointCloudOctree = function(geometry, material){
this.visibleNodes = [];
this.visibleGeometry = [];
this.pickTarget;
this.maxLevel = 0;
this.generateDEM = false;

var rootProxy = new Potree.PointCloudOctreeProxyNode(this.pcoGeometry.root);
Expand Down Expand Up @@ -3881,43 +3903,30 @@ Potree.PointCloudOctree.prototype.updateProfileRequests = function(){
}
};

Potree.PointCloudOctree.prototype.updatePointCloud = function(node, element, stack, visibleGeometryNames){
Potree.PointCloudOctree.prototype.updateMaterial = function(vn, camera, renderer){
this.material.fov = camera.fov * (Math.PI / 180);
this.material.screenWidth = renderer.domElement.clientWidth;
this.material.screenHeight = renderer.domElement.clientHeight;
this.material.spacing = this.pcoGeometry.spacing;
this.material.near = camera.near;
this.material.far = camera.far;
this.material.uniforms.octreeSize.value = this.pcoGeometry.boundingBox.size().x;

if(this.material.pointSizeType){
if(this.material.pointSizeType === Potree.PointSizeType.ADAPTIVE
|| this.material.pointColorType === Potree.PointColorType.OCTREE_DEPTH){

this.updateVisibilityTexture(this.material, vn);
}
}
};

Potree.PointCloudOctree.prototype.updatePointCloud = function(node, element, stack, visibleGeometryNames, renderer){
this.numVisibleNodes++;
this.numVisiblePoints += node.numPoints;
node.material = this.material;
this.visibleNodes.push(element);

node.material.fov = camera.fov * (Math.PI / 180);
node.material.screenWidth = renderer.domElement.clientWidth;
node.material.screenHeight = renderer.domElement.clientHeight;
node.material.spacing = this.pcoGeometry.spacing;
node.material.near = camera.near;
node.material.far = camera.far;

node.material.pointColorType = this.material.pointColorType;
node.material.pointSizeType = this.material.pointSizeType;
node.material.pointShape = this.material.pointShape;
node.material.interpolate = this.material.interpolate;
node.material.size = this.material.size;
node.material.heightMin = this.material.heightMin;
node.material.heightMax = this.material.heightMax;
node.material.intensityMin = this.material.intensityMin;
node.material.intensityMax = this.material.intensityMax;
node.material.weighted = this.material.weighted;
node.material.opacity = this.material.opacity;
node.material.minSize = this.material.minSize;
node.material.uniforms.level.value = node.level;
node.material.setClipBoxes(this.material.clipBoxes);
node.material.clipMode = this.material.clipMode;

node.material.uniforms.octreeSize.value = this.pcoGeometry.boundingBox.size().x;
node.material.uniforms.bbMin.value = node.pcoGeometry.boundingBox.min.toArray();

node.material.uniforms.visibleNodes.value = this.material.visibleNodesTexture;

if(node.level){
this.maxLevel = Math.max(node.level, this.maxLevel);
}

if(this.showBoundingBox && !node.boundingBoxNode){
var boxHelper = new THREE.BoxHelper(node);
this.add(boxHelper);
Expand Down Expand Up @@ -4019,7 +4028,7 @@ Potree.PointCloudOctree.prototype.update = function(camera, renderer){
}else if(node instanceof THREE.PointCloud){
if(node.pcoGeometry.loaded){
Potree.PointCloudOctree.lru.touch(node.pcoGeometry);
this.updatePointCloud(node, element, stack, visibleGeometryNames);
this.updatePointCloud(node, element, stack, visibleGeometryNames, renderer);
}else{
var proxy = new Potree.PointCloudOctreeProxyNode(node.pcoGeometry);
var parent = node.parent;
Expand Down Expand Up @@ -4049,6 +4058,8 @@ Potree.PointCloudOctree.prototype.update = function(camera, renderer){
}
}

this.updateMaterial(vn, camera, renderer);

Potree.PointCloudOctree.lru.freeMemory();
};

Expand Down Expand Up @@ -4197,7 +4208,6 @@ Potree.PointCloudOctree.prototype.updateVisibilityTexture = function(material, v

for(var i = 0; i < visibleNodes.length; i++){
var node = visibleNodes[i];
node.material.uniforms.visibleNodesOffset.value = i;

var children = [];
for(var j = 0; j < node.children.length; j++){
Expand Down Expand Up @@ -4279,8 +4289,7 @@ Potree.PointCloudOctree.prototype.replaceProxy = function(proxy){
var geometryNode = proxy.geometryNode;
if(geometryNode.loaded === true){
var geometry = geometryNode.geometry;
var material = new Potree.PointCloudMaterial();
var node = new THREE.PointCloud(geometry, material);
var node = new THREE.PointCloud(geometry, this.material);
node.name = proxy.name;
node.level = proxy.level;
node.numPoints = proxy.numPoints;
Expand Down Expand Up @@ -4696,15 +4705,44 @@ Potree.PointCloudOctree.prototype.pick = function(renderer, camera, ray, params)
);
}
this.pickTarget.setSize(width, height);

// setup pick material.
// use the same point size functions as the main material to get the same point sizes.
if(!this.pickMaterial){
this.pickMaterial = new Potree.PointCloudMaterial();
this.pickMaterial.pointColorType = Potree.PointColorType.POINT_INDEX;
this.pickMaterial.pointSizeType = Potree.PointSizeType.FIXED;
}

this.pickMaterial.pointSizeType = this.material.pointSizeType;
this.pickMaterial.size = this.material.size;

if(this.pickMaterial.pointSizeType === Potree.PointSizeType.ADAPTIVE){
this.updateVisibilityTexture(this.pickMaterial, nodes);
}

this.pickMaterial.fov = this.material.fov;
this.pickMaterial.screenWidth = this.material.screenWidth;
this.pickMaterial.screenHeight = this.material.screenHeight;
this.pickMaterial.spacing = this.material.spacing;
this.pickMaterial.near = this.material.near;
this.pickMaterial.far = this.material.far;
this.pickMaterial.pointShape = this.material.pointShape;



var _gl = renderer.context;

_gl.enable(_gl.SCISSOR_TEST);
_gl.scissor(pixelPos.x - (pickWindowSize - 1) / 2, pixelPos.y - (pickWindowSize - 1) / 2,pickWindowSize,pickWindowSize);
_gl.disable(_gl.SCISSOR_TEST);

var material = this.pickMaterial;

renderer.setRenderTarget( this.pickTarget );

renderer.setDepthTest( material.depthTest );
renderer.setDepthWrite( material.depthWrite )
renderer.setBlending( THREE.NoBlending );

renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
Expand All @@ -4722,32 +4760,10 @@ Potree.PointCloudOctree.prototype.pick = function(renderer, camera, ray, params)
continue;
}

if(!object.pickMaterial){
object.pickMaterial = new Potree.PointCloudMaterial();
}

object.pickMaterial.pointColorType = Potree.PointColorType.POINT_INDEX;
object.pickMaterial.pointSizeType = this.material.pointSizeType;
object.pickMaterial.size = this.material.size;
object.pickMaterial.fov = this.material.fov;
object.pickMaterial.screenWidth = this.material.screenWidth;
object.pickMaterial.screenHeight = this.material.screenHeight;
object.pickMaterial.spacing = this.material.spacing;
object.pickMaterial.near = this.material.near;
object.pickMaterial.far = this.material.far;
object.pickMaterial.pointShape = this.material.pointShape;
object.pickMaterial.uniforms.level.value = object.level;

object.pickMaterial.uniforms.octreeSize.value = this.pcoGeometry.boundingBox.size().x;
object.pickMaterial.uniforms.bbMin.value = object.pcoGeometry.boundingBox.min.toArray();

object.pickMaterial.uniforms.visibleNodesTexture = this.material.visibleNodesTexture;
object.pickMaterial.uniforms.visibleNodes.value = this.material.visibleNodesTexture;

object.pickMaterial.uniforms.pcIndex.value = i;
material.pcIndex = i;

if(object.pickMaterial.program){
var program = object.pickMaterial.program.program;
if(material.program){
var program = material.program.program;
_gl.useProgram( program );
//_gl.disable( _gl.BLEND );

Expand All @@ -4760,20 +4776,11 @@ Potree.PointCloudOctree.prototype.pick = function(renderer, camera, ray, params)
//}
_gl.enableVertexAttribArray( attributePointer );
_gl.vertexAttribPointer( attributePointer, attributeSize, _gl.UNSIGNED_BYTE, true, 0, 0 );
//
// _gl.uniform1f(object.pickMaterial.program.uniforms.pcIndex, object.pickMaterial.pcIndex);
}

renderer.renderBufferDirect(camera, [], null, object.pickMaterial, geometry, object);
_gl.uniform1f(material.program.uniforms.pcIndex, material.pcIndex);
}

if(object.pickMaterial.program){
var program = object.pickMaterial.program.program;
_gl.useProgram( program );
var attributePointer = _gl.getAttribLocation(program, "indices");
var attributeSize = 4;
_gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.attributes.indices.buffer );
_gl.disableVertexAttribArray( attributePointer );
}
renderer.renderBufferDirect(camera, [], null, material, geometry, object);
}

var pixelCount = pickWindowSize * pickWindowSize;
Expand Down Expand Up @@ -5696,7 +5703,6 @@ Potree.utils.frustumSphereIntersection = function(frustum, sphere){





Potree.Features = function(){

Expand Down Expand Up @@ -9127,7 +9133,6 @@ Potree.PointCloudArena4D.prototype.updateVisibilityTexture = function(material,
}


material.uniforms.nodeSize.value = this.pcoGeometry.boundingBox.size().x;
texture.needsUpdate = true;
}

Expand Down Expand Up @@ -9267,7 +9272,7 @@ Potree.PointCloudArena4DGeometry = function(){
this.root = null;
this.levels = 0;
this._spacing = null;
this.pointAttributes = new PointAttributes([
this.pointAttributes = new Potree.PointAttributes([
"POSITION_CARTESIAN",
"COLOR_PACKED"
]);
Expand Down
12 changes: 6 additions & 6 deletions build/js/potree.min.js

Large diffs are not rendered by default.

42 changes: 34 additions & 8 deletions build/shaders/shaders.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@ Potree.Shaders["pointcloud.vs"] = [
"uniform float spacing;",
"uniform float near;",
"uniform float far;",
"uniform float level;",
"uniform float visibleNodesOffset;",
"",
"#if defined use_clip_box",
" uniform mat4 clipBoxes[max_clip_boxes];",
Expand All @@ -52,7 +50,6 @@ Potree.Shaders["pointcloud.vs"] = [
"uniform float minSize; // minimum pixel size",
"uniform float maxSize; // maximum pixel size",
"uniform float octreeSize;",
"uniform vec3 bbMin;",
"uniform vec3 bbSize;",
"uniform vec3 uColor;",
"uniform float opacity;",
Expand Down Expand Up @@ -111,12 +108,11 @@ Potree.Shaders["pointcloud.vs"] = [
" * find the tree depth at the point position",
" */",
"float getLocalTreeDepth(){",
" vec3 offset = bbMin;",
" float iOffset = visibleNodesOffset;",
" float depth = level;",
" vec3 offset = vec3(0.0, 0.0, 0.0);",
" float iOffset = 0.0;",
" float depth = 0.0;",
" for(float i = 0.0; i <= 1000.0; i++){",
" ",
" float nodeSizeAtLevel = octreeSize / pow(2.0, i + level);",
" float nodeSizeAtLevel = octreeSize / pow(2.0, i);",
" vec3 index3d = (position - offset) / nodeSizeAtLevel;",
" index3d = floor(index3d + 0.5);",
" float index = 4.0*index3d.x + 2.0*index3d.y + index3d.z;",
Expand Down Expand Up @@ -586,3 +582,33 @@ Potree.Shaders["pointcloud.fs"] = [
"",
].join("\n");

Potree.Shaders["normalize.vs"] = [
"",
"varying vec2 vUv;",
"",
"void main() {",
" vUv = uv;",
"",
" gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);",
"}",
].join("\n");

Potree.Shaders["normalize.fs"] = [
"",
"#extension GL_EXT_frag_depth : enable",
"",
"uniform sampler2D depthMap;",
"uniform sampler2D texture;",
"",
"varying vec2 vUv;",
"",
"void main() {",
" vec4 color = texture2D(texture, vUv); ",
" float depth = texture2D(depthMap, vUv).g; ",
" color = color / color.w;",
" gl_FragColor = color; ",
" ",
" gl_FragDepthEXT = depth;",
"}",
].join("\n");

0 comments on commit 13ec32e

Please sign in to comment.