Advertisement
Guest User

Untitled

a guest
May 24th, 2015
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. var gl;
  2. function initGL(canvas) {
  3. try {
  4. gl = WebGLDebugUtils.makeDebugContext( canvas.getContext("webgl"), undefined,
  5. function(functionName, arguments) {
  6. console.log( " [webgl] " + functionName.toString() + "( ", arguments, " )" );
  7. } );
  8. gl.viewportWidth = canvas.width;
  9. gl.viewportHeight = canvas.height;
  10. }
  11. catch (e) {
  12. }
  13. if (!gl) {
  14. throw new Error( "Could not initialise WebGL context" );
  15. }
  16. };
  17.  
  18.  
  19. var vertexShaderSource =
  20. "attribute vec3 position;" +
  21. "attribute vec3 normal;" +
  22.  
  23. "uniform mat4 modelViewMatrix;" +
  24. "uniform mat4 projectionMatrix;" +
  25. "uniform mat3 normalMatrix;" +
  26.  
  27. "varying vec3 vNormal;" +
  28.  
  29.  
  30. "void main(void) {" +
  31.  
  32. " vNormal = normalize( normalMatrix * normal );" +
  33. " gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);" +
  34.  
  35. "}";
  36.  
  37. var fragmentShaderSource =
  38. "precision mediump float;" +
  39.  
  40. "varying vec3 vNormal;" +
  41.  
  42. "void main(void) {" +
  43.  
  44. " gl_FragColor = vec4( 0.5 * normalize( vNormal ), 1.0);" +
  45.  
  46. "}";
  47.  
  48. // shaderType is either: gl.FRAGMENT_SHADER or gl.VERTEX_SHADER
  49. function createShader( shaderSource, shaderType ) {
  50.  
  51. var shader = gl.createShader( shaderType );
  52.  
  53. gl.shaderSource( shader, shaderSource );
  54. gl.compileShader( shader );
  55.  
  56. if ( ! gl.getShaderParameter( shader, gl.COMPILE_STATUS ) ) {
  57. throw new Error( "Can not compile shader: " + gl.getShaderInfoLog(shader) );
  58. }
  59.  
  60. return shader;
  61.  
  62. }
  63.  
  64. function createBasicProgram() {
  65.  
  66. var vertexShader = createShader( vertexShaderSource, gl.VERTEX_SHADER );
  67. var fragmentShader = createShader( fragmentShaderSource, gl.FRAGMENT_SHADER );
  68.  
  69. var glProgram = gl.createProgram();
  70. gl.attachShader(glProgram, vertexShader);
  71. gl.attachShader(glProgram, fragmentShader);
  72.  
  73. gl.linkProgram(glProgram);
  74. if ( ! gl.getProgramParameter( glProgram, gl.LINK_STATUS ) ) {
  75. throw new Error( "Can not link program." );
  76. }
  77.  
  78. return new THREE.Program( glProgram,
  79. THREE.LibraryUtils.resolveDescriptors( THREE.UniformLibrary, [ 'modelViewMatrix', 'projectionMatrix', 'normalMatrix' ] ),
  80. THREE.LibraryUtils.resolveDescriptors( THREE.AttributeLibrary, [ 'position', 'normal' ] ),
  81. true );
  82. }
  83.  
  84. function webGLInit() {
  85. var canvas = document.getElementById("gl-canvas-1");
  86. initGL(canvas);
  87.  
  88. }
  89.  
  90. function webGLRender() {
  91.  
  92. THREE.LibraryUtils.initSharedLibraries( gl );
  93.  
  94. var camera = new THREE.PerspectiveCamera( 60, 1, 0.1, 10000 );
  95. camera.position.z = 10;
  96.  
  97. var scene = new THREE.Scene();
  98.  
  99. var light = new THREE.DirectionalLight( 0xffffff );
  100. light.position.set( 0, 0, 1 );
  101.  
  102. scene.add( light );
  103.  
  104. var geometry = new THREE.IcosahedronGeometry( 10, 1 );
  105. var material = new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading, vertexColors: THREE.VertexColors } );
  106. var mesh = new THREE.Mesh( geometry, material );
  107. mesh.position.set( 0, 0, -20 );
  108.  
  109. scene.add( mesh );
  110.  
  111. camera.lookAt( scene.position );
  112.  
  113. var program = createBasicProgram();
  114.  
  115. gl.clearColor(0.4, 0.0, 0.0, 1.0);
  116. gl.enable(gl.DEPTH_TEST);
  117. gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
  118. gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
  119.  
  120. var sceneUpdater = new THREE.SceneUpdater();
  121. sceneUpdater.update( scene, camera );
  122.  
  123. var cameraUniformValues = getRenderData( camera ).uniformValues;
  124. var lightUniformValues = getRenderData( scene ).uniformValues;
  125. var batchItems = [];
  126. THREE.SceneTraversalInOrder( scene, function( node ) {
  127.  
  128. if( node instanceof THREE.Mesh ) {
  129.  
  130. var renderData = getRenderData( node );
  131.  
  132. var batchItem = new THREE.BatchItem();
  133. batchItem.primitiveType = gl.TRIANGLES;
  134. batchItem.program = program;
  135. batchItem.localUniformValues = renderData.uniformValues;
  136. batchItem.attributeValues = renderData.attributeValues;
  137.  
  138. batchItems.push( batchItem );
  139.  
  140. }
  141.  
  142. });
  143.  
  144. var renderer = new THREE.SimpleRenderer();
  145. renderer.render( batchItems, cameraUniformValues );
  146.  
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement