Advertisement
weeez

rectangle in threejs (shaders & buffergeometry)

Mar 7th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var socket = io();
  2.  
  3. var windowWidth = window.innerWidth;
  4. var windowHeight = window.innerHeight;
  5. var scrollerWidth = 17;
  6.  
  7. var fieldTable = [];
  8.  
  9. //THREE.js stuffs
  10. var scene = new THREE.Scene();
  11. // var camera = new THREE.PerspectiveCamera(1, window.innerWidth / window.innerHeight, 10, 100);
  12. var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
  13. var renderer = new THREE.WebGLRenderer({
  14.     antialias: true
  15. });
  16. renderer.setClearColor(0x99bffc);
  17. renderer.setSize(windowWidth, windowHeight);
  18. //     renderer.gammaInput = true;
  19. //  renderer.gammaOutput = true;
  20.  
  21. var Mesh = THREE.Mesh;
  22. var Material = THREE.MeshBasicMaterial;
  23. var Vector3 = THREE.Vector3;
  24. var Vector2 = THREE.Vector2;
  25. var Geometry = THREE.Geometry;
  26. var Face3 = THREE.Face3;
  27. var BoxGeometry = THREE.BoxGeometry;
  28. var BufferGeometry = THREE.BufferGeometry;
  29.  
  30. // document.addEventListener('keyup', function(e){
  31.    
  32. // });
  33. // document.addEventListener('keydown', function(e){
  34. //     if(e.keyCode == 38){
  35. //         camera.position.y =  5*Math.sin(3.14/10);
  36. //         camera.position.z =  5*Math.cos(3.14/10);
  37. //         /*
  38. //             kamera x koordinátája: kocka x pozíciója + sugár * sin ( fordulás szöge)
  39. //             kamera z koordinátája: kocka z pozíciója + sugár * cos ( fordulás szöge)
  40. //         */
  41. //     }
  42. // });
  43.  
  44. // function createFieldGeometry(obj){
  45. //     var fieldTexture = new THREE.TextureLoader().load("pics/border.png");
  46.    
  47. //     var fieldGeometry = new Geometry();
  48.    
  49. //     fieldGeometry.vertices.push(new Vector3(0,0,0));
  50. //     fieldGeometry.vertices.push(new Vector3(1,0,0));
  51. //     fieldGeometry.vertices.push(new Vector3(1,0,-1));
  52. //     fieldGeometry.vertices.push(new Vector3(0,0,-1));
  53.    
  54. //     fieldGeometry.faces.push(new Face3(0,1,3));
  55. //     fieldGeometry.faces.push(new Face3(1,2,3));
  56.    
  57. //     var fieldUvs = [];
  58. //     fieldUvs.push(new Vector2(0.0, 0.0));
  59. //     fieldUvs.push(new Vector2(1.0, 0.0));
  60. //     fieldUvs.push(new Vector2(1.0, 1.0));
  61. //     fieldUvs.push(new Vector2(0.0, 1.0));
  62. //     fieldGeometry.faceVertexUvs[0].push([fieldUvs[0], fieldUvs[1], fieldUvs[3]]);
  63. //     fieldGeometry.faceVertexUvs[0].push([fieldUvs[1], fieldUvs[2], fieldUvs[3]]);
  64.    
  65. //     var fieldMaterial = new Material({color: "gray" , map: fieldTexture});
  66.    
  67. //     var fieldMesh = new Mesh(fieldGeometry, fieldMaterial);
  68.    
  69. //     fieldMesh.position.x = obj.x;
  70. //     fieldMesh.position.z = obj.z;
  71.    
  72. //     return fieldMesh;
  73. // }
  74.  
  75. function createFieldGeometry(obj){
  76.     // var fieldTexture = new THREE.TextureLoader().load("pics/border.png");
  77.     var fieldTexture = new THREE.ImageUtils.loadTexture("pics/border.png");
  78.    
  79.     var fieldGeometry = new BufferGeometry();
  80.    
  81.     // fieldGeometry.vertices.push(new Vector3(0,0,0));
  82.     // fieldGeometry.vertices.push(new Vector3(1,0,0));
  83.     // fieldGeometry.vertices.push(new Vector3(1,0,-1));
  84.     // fieldGeometry.vertices.push(new Vector3(0,0,-1));
  85.     var vertices = new Float32Array([
  86.         0.0, 0.0, 0.0,
  87.         1.0, 0.0, 0.0,
  88.         0.0, 0.0, -1.0,
  89.        
  90.         1.0, 0.0, 0.0,
  91.         1.0, 0.0, -1.0,
  92.         0.0, 0.0, -1.0
  93.     ]);
  94.    
  95.     var uvs = new Float32Array([
  96.         0.0, 0.0,
  97.         1.0, 0.0,
  98.         1.0, 1.0,
  99.         0.0, 1.0
  100.     ]);
  101.    
  102.     // fieldGeometry.faces.push(new Face3(0,1,3));
  103.     // fieldGeometry.faces.push(new Face3(1,2,3));
  104.    
  105.     // var fieldUvs = [];
  106.     // fieldUvs.push(new Vector2(0.0, 0.0));
  107.     // fieldUvs.push(new Vector2(1.0, 0.0));
  108.     // fieldUvs.push(new Vector2(1.0, 1.0));
  109.     // fieldUvs.push(new Vector2(0.0, 1.0));
  110.     // fieldGeometry.faceVertexUvs[0].push([fieldUvs[0], fieldUvs[1], fieldUvs[3]]);
  111.     // fieldGeometry.faceVertexUvs[0].push([fieldUvs[1], fieldUvs[2], fieldUvs[3]]);
  112.    
  113.     // var colors = []
  114.    
  115.     fieldGeometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));
  116.     fieldGeometry.addAttribute('uv', new THREE.BufferAttribute(uvs, 3));
  117.    
  118.     var fieldMaterial = new THREE.MeshPhongMaterial({color: 0xd3d3d3 /*, map: fieldTexture*/});
  119.    
  120.     var fieldMesh = new Mesh(fieldGeometry, fieldMaterial);
  121.    
  122.     fieldMesh.position.x = obj.x;
  123.     fieldMesh.position.z = obj.z;
  124.    
  125.     return fieldMesh;
  126. }
  127.  
  128. function generateFieldTable(){
  129.     for(var i = 0; i < fieldTable.length; i++){
  130.         for(var j = 0; j < fieldTable[i].length; j++){
  131.             scene.add(createFieldGeometry(fieldTable[i][j]));
  132.         }
  133.     }
  134. }
  135.  
  136. function addAxisCubeGeometry(obj){
  137.     var geometry = new BoxGeometry(obj.x, obj.y, obj.z);
  138.     var material = new Material({color: obj.color, transparent: true, opacity: 0.2});
  139.     var cube = new Mesh(geometry, material);
  140.     return cube;
  141. }
  142.  
  143. var tmp = undefined;
  144.  
  145. function shaderWtf(){
  146.     var vertexShader = document.getElementById('vertexShader').textContent;
  147.     var fragmentShader = document.getElementById('fragmentShader').textContent;
  148.    
  149.     var material = new THREE.ShaderMaterial({
  150.         vertexShader: vertexShader,
  151.         fragmentShader: fragmentShader,
  152.         side: THREE.DoubleSide
  153.     });
  154.    
  155.     var geometry = new BufferGeometry();
  156.    
  157.     var vertices = new Float32Array([
  158.         -0.5, 0.0, 0.0,
  159.         0.5, 0.0, 0.0,
  160.         0.0, 1.0, 0.0
  161.     ]);
  162.    
  163.     geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));
  164.    
  165.     var mesh = new THREE.Mesh(geometry,material);
  166.     // mesh.position.z = -200;
  167.     // mesh.position.y = -100;
  168.     mesh.position.z = 0;
  169.     mesh.position.y = 0;
  170.     mesh.position.x = 0;
  171.    
  172.     tmp = mesh;
  173.    
  174.     scene.add(mesh);
  175. }
  176.  
  177. socket.on('joined', function(obj){//TODO: error code 503 can be a pain in my ass
  178.     fieldTable = obj.fieldTable;
  179.     socket.emit('joined', {socketId: socket.id});
  180.    
  181.     camera.position.z = 5;
  182.     camera.position.y = 5;
  183.     camera.position.x = -1;
  184.     camera.lookAt(new Vector3(0,0,0));
  185.  
  186.     // renderer.setSize(window.innerWidth - scrollerWidth, window.innerHeight - scrollerWidth);
  187.  
  188.     document.body.appendChild(renderer.domElement);
  189.  
  190.     scene.add(addAxisCubeGeometry({x:1000, y:0.1, z: 0.1, color:"rgba(0,255,0)"}));
  191.     scene.add(addAxisCubeGeometry({x:0.1, y:1000, z: 0.1, color:"rgba(255,0,0)"}));
  192.     scene.add(addAxisCubeGeometry({x:0.1, y:0.1, z: 1000, color:"rgba(0,0,255)"}));
  193.  
  194.     // generateFieldTable();
  195.     // scene.add(addCubeGeometry());
  196.    
  197.    
  198.     // scene.add(shaderTest());
  199.    
  200.     shaderWtf();
  201.    
  202.     render();
  203. });
  204.  
  205. var render = function () {
  206.     requestAnimationFrame(render);
  207.  
  208.     renderer.render(scene, camera);
  209.     tmp.rotation.y += 0.01;
  210. };
  211.  
  212. //////
  213.  
  214. <script src="js/libs/three.min.js"></script>
  215. <script src="js/game.js"></script>
  216. <script type="x-shader/x-vertex" id="vertexShader">
  217.     void main(){
  218.         vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);
  219.         gl_Position = projectionMatrix * modelViewPosition;
  220.     }
  221. </script>
  222.  
  223. <script type="x-shader/x-fragment" id="fragmentShader">
  224.     void main(){
  225.         gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
  226.     }
  227. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement