Test Intersection Points
The problem: raycaster do not intersect when THREE.Points has only 1 vertex or has vertexs arranged in line. In the line 90 you can find details about the bug
by Javier Cruz
HTML
<script src="http://rawgit.com/mrdoob/three.js/dev/build/three.js"></script>
<!-- Definition of shader material for the default particles -->
<script type="x-shader/x-vertex" id="default-vertexshader">
attribute float alpha;
varying vec3 vColor;
varying vec2 vUv;
uniform float size;
uniform float scale;
//Maps textures
void main() {
vUv = uv;
vColor = color;
vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
float sizeAttenuation = size * ( scale / length( mvPosition.xyz ) );
gl_PointSize = size * alpha * sizeAttenuation ; // alpha to vary point size
gl_Position = projectionMatrix * mvPosition;
}
</script>
<script type="x-shader/x-fragment" id="default-fragmentshader">
varying vec3 vColor;
void main() {
gl_FragColor = vec4( vColor, 1.0 );
}
</script>
CSS
body {
color: #ffffff;
font-family: Monospace;
font-size: 13px;
text-align: center;
font-weight: bold;
background-color: #000000;
margin: 0px;
overflow: hidden;
}
JavaScript
var renderer, scene, camera, raycaster, pointSystemObj, mouse;
var overedColor = new THREE.Color(1,1,0);
init();
animate();
function init() {
// renderer
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// scene
scene = new THREE.Scene();
//camera
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 400;
// Create a point system
//pointSystemObj = new PointSystem();
var xPos = [0];// [-1,0,1];
var yPos = [.5];//[0,0,0];
var zPos = [0]; //[0,0,0];
pointSystemObj = new PointSystem(200,xPos,yPos,zPos);
scene.add( pointSystemObj.getSystem() );
raycaster = new THREE.Raycaster();
mouse = new THREE.Vector2();
}
function animate() {
requestAnimationFrame(animate);
render();
}
function render() {
pointSystemObj.raycastCalculation();
renderer.render(scene, camera);
}
function PointSystem(sSize, listX, listY, listZ, col) {
// System parameters
var spaceSide = sSize || 200;
var lx = listX || [-1, 1, 0, 0, 0, 0];
var ly = listY || [0, 0, 1, -1, 0, 0];
var lz = listZ || [0, 0, 0, 0, 1, -1];
var pointCount = lx.length;
this.color4all = col || new THREE.Color(1, 0, .8);
var halfSide = spaceSide / 2;
this.lastPointOvered = -1;
// Buffer geometry attribues
var geometry = new THREE.BufferGeometry();
var positions = new Float32Array(pointCount * 3);
var colors = new Float32Array(pointCount * 3);
var alphas = new Float32Array(pointCount);
for (var i = 0; i < pointCount; i++) {
// set position
var x = lx[i] * halfSide;
var y = ly[i] * halfSide;
var z = lz[i] * halfSide;
positions[i * 3 + 0] = x; //x;
positions[i * 3 + 1] = y; // y;
positions[i * 3 + 2] = z; //z;
// colors
colors[i * 3 + 0] = this.color4all.r;
colors[i * 3 + 1] = this.color4all.g;
colors[i * 3 + 2] = this.color4all.b;
...