[关闭]
@zjlbr2003 2014-06-16T03:01:56.000000Z 字数 2591 阅读 1689

WebGL Hello World Triangle Test

Blog


  1. <!DOCTYPE HTML>
  2. <html lang="en">
  3. <head>
  4. <title>Hello World WebGL</title>
  5. <meta charset="utf-8">
  6. <script type="text/javascript">
  7. var gl;
  8. var canvas;
  9. var shaderProgram;
  10. var vertexBuffer;
  11. function createGLContext(canvas)
  12. {
  13. var names = ["webgl", "experimental-webgl"];
  14. var context = null;
  15. for(var i = 0; i < names.length; ++i)
  16. {
  17. try
  18. {
  19. context = canvas.getContext(names[i]);
  20. }
  21. catch(e)
  22. {
  23. }
  24. if(context) break;
  25. }
  26. if(context)
  27. {
  28. context.viewportWidth = canvas.width;
  29. context.viewportHeight = canvas.height;
  30. }
  31. else
  32. {
  33. alert("Failed to create WebGL context");
  34. }
  35. return context;
  36. }
  37. function loadShader(type, shaderSource)
  38. {
  39. var shader = gl.createShader(type);
  40. gl.shaderSource(shader, shaderSource);
  41. gl.compileShader(shader);
  42. if(!gl.getShaderParameter(shader, gl.COMPILE_STATUS))
  43. {
  44. alert("Error compiling shader" + gl.getShaderInfoLog(shader));
  45. gl.deleteShader(shader);
  46. return null;
  47. }
  48. return shader;
  49. }
  50. function setupShaders()
  51. {
  52. var vertexShaderSource =
  53. "attribute vec3 aVertexPosition; \n" +
  54. "void main() { \n" +
  55. " gl_Position = vec4(aVertexPosition, 1.0); \n" +
  56. "} \n";
  57. var fragmentShaderSource =
  58. "precision mediump float; \n" +
  59. "void main() { \n" +
  60. " gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); \n" +
  61. "} \n";
  62. var vertexShader = loadShader(gl.VERTEX_SHADER, vertexShaderSource);
  63. var fragmentShader = loadShader(gl.FRAGMENT_SHADER, fragmentShaderSource);
  64. shaderProgram = gl.createProgram();
  65. gl.attachShader(shaderProgram, vertexShader);
  66. gl.attachShader(shaderProgram, fragmentShader);
  67. gl.linkProgram(shaderProgram);
  68. if(!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS))
  69. {
  70. alert("Failed to setup shaders");
  71. }
  72. gl.useProgram(shaderProgram);
  73. shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
  74. }
  75. function setupBuffers()
  76. {
  77. vertexBuffer = gl.createBuffer();
  78. gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
  79. var triangleVertices =
  80. [
  81. 0.0, 0.5, 0.0,
  82. -0.5,-0.5,0.0,
  83. 0.5,-0.5,0.0
  84. ];
  85. gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleVertices), gl.STATIC_DRAW);
  86. vertexBuffer.itemSize = 3;
  87. vertexBuffer.numberOfItems = 3;
  88. }
  89. function draw()
  90. {
  91. gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
  92. gl.clear(gl.COLOR_BUFFER_BIT);
  93. gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, vertexBuffer.itemSize, gl.FLOAT, false, 0, 0);
  94. gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
  95. gl.drawArrays(gl.TRIANGLES, 0, vertexBuffer.numberOfItems);
  96. }
  97. function startup()
  98. {
  99. canvas = document.getElementById("myGLCanvas");
  100. gl = createGLContext(canvas);
  101. setupShaders();
  102. setupBuffers();
  103. gl.clearColor(0.0, 0.0, 0.0, 1.0);
  104. draw();
  105. }
  106. </script>
  107. </head>
  108. <body onload = "startup();">
  109. <canvas id = "myGLCanvas" width = "500" height = "500">Sorry, your web browser does not support WebGL</canvas>
  110. </body>
  111. </html>

该WebGL代码在博客首页页脚部分测试通过,请使用Chrome/Firefox/Safari等浏览器查看正确显示效果。

期待使用WebGL技术在博客中向大家展示更多本组的工作成果,谢谢。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注