Advertisement
weeez

shader with colors threejs

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