Raycaster_test

by yi hom

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

<div id="turn">Raycaster_test
  <br/>
  <button id="xangleup" style="width:10%">x-angle up</button>
  <button id="xangledown" style="width:10%">x-angle down</button>
  <br/>
  <button id="yangleup" style="width:10%">y-angle up</button>
  <button id="yangledown" style="width:10%">y-angle down</button>
  <br/>
  <button id="siezup" style="width:10%">siezup</button>
  <button id="sizedown" style="width:10%">sizedown</button>  
</div>

CSS

#turn {
  position: absolute;
  top: 2%;
  width: 100%;
  padding: 10px;
  text-align: center;
  color: #ffff00
}

body {
  overflow: hidden;
}

JavaScript

var camera, scene, renderer;
var controls;
var raycaster;
var pickables = [];
var intersects;


var sand, SandGeometry, SandMaterial;
var cube;
var xangle = 0;
var yangle = 0;

var geometry,Material,size=10;

var dis = new THREE.Vector3();
var sum = 0;
var col = [];
var row = [];
var raypos = new THREE.Vector3();
var boundary;
var pick = false;
var u, v, vid;


init();
animate();

$("#xangleup").click(function() {
  xangle++;
});

$("#yangleup").click(function() {
  yangle++;
});

$("#xangledown").click(function() {
  xangle--;
});

$("#yangledown").click(function() {
  yangle--;
});

$("#siezup").click(function() {
  size++;
});

$("#sizedown").click(function() {
  size--;
});
function reset(){
	for(var i = 0; i<SandGeometry.vertices.length; i++){
  	SandGeometry.vertices[i].y = 0;
  }
}

function ray() {
  pick = false;
  for (var rayx = -20; rayx < 20; rayx++) {
    for (var rayz = -20; rayz < 20; rayz++) {
      //console.log("1");
      raycaster = new THREE.Raycaster(new THREE.Vector3(rayx, -30, rayz), new THREE.Vector3(0, 1, 0));
      intersects = raycaster.intersectObjects(pickables);

      if (intersects.length === 0) {
        if (pick === true) {
          row.push(rayx);
          col.push(rayz);
        }
        pick = false;
      }
      if (intersects.length > 0) {
        dis = intersects[0].point.clone();
        sum += dis.y;
        if (pick === false) {
          row.push(rayx);
          col.push(rayz - 1);

        }
        if(dis.y<0){
          u = rayx + 20;
          v = rayz + 20;
          vid = 40 * v + u;
          SandGeometry.vertices[vid].y = dis.y-0.2;
        }
        pick = true;
      }

    }
  }
  //	console.log(col);
  pick = false;
  for (var rayz = -20; rayz < 20; rayz++) {
    for (var rayx = -20; rayx < 20; rayx++) {
      //console.log("1");
      raycaster = new THREE.Raycaster(new THREE.Vector3(rayx, -30, rayz), new THREE.Vector3(0, 1, 0));
      intersects = raycaster.intersectObjects(pickables);

      if...