【发布时间】:2013-11-26 22:46:25
【问题描述】:
我试图根据 Diego Cantor 和 Brandon Jones 的书 WebGL Beginner's guid 绘制一个简单的正方形,但在第二课中卡住了。
我试图画一个正方形,但我的控制台显示错误消息如下:
WebGL: INVALID_OPERATION: drawArrays: attribs not setup correctly
我尝试过的如下:
我的代码示例
<html>
<head>
<title>WebGL-Lesson One</title>
<style type="text/css">
canvas {
border: 2px dotted black;
}
</style>
<script id="code-js" type="text/javascript">
var gl = null;
function getGlContext() {
var my_canvas = document.getElementById("my_canvas");
var names = [ "webgl", "experimental-webgl", "webkit-3d", "moz-webgl" ];
for ( var i = 0; i < names.length; ++i) {
try {
gl = my_canvas.getContext(names[i]);
} catch (e) {
}
if (gl)
break;
}
if (gl == null) {
alert("empty canvas")
} else {
drawing();
}
}
function drawing() {
var vertices = [ -50.0, 50.0, 0.0, -50.0, -50.0, 0.0, 50.0, -50.0, 0.0,
50.0, 50.0, 0.0 ];
var indices = [ 3, 2, 1, 3, 1, 0 ]
var myVBOBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, myVBOBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices),
gl.STATIC_DRAW);
var aVertexPosition = (0,0,0);
gl.vertexAttribPointer(aVertexPosition, 3, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(aVertexPosition);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
// gl.bindBuffer(gl.ARRAY_BUFFER, null);
var myIBOBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, myIBOBuffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices),gl.STATIC_DRAW);
// gl.bindBuffer(gl.ARRAY_BUFFER, null);
}
</script>
<script id="shader-fs" type="x-shader/xfragment"></script>
<script id="shader-vs" type="x-shader/x-vertex"></script>
</head>
<body onload="getGlContext()">
<canvas id="my_canvas" width="700" height="500"></canvas>
</body>
</html>
【问题讨论】:
-
您是否考虑过使用中间件库?我喜欢玩 pixi.js,它是一个带有画布后备的 webGL 渲染库。如果你的目标是构建一个游戏引擎,这可能是值得考虑的事情,它可以处理所有样板工作。因此,让它工作的时间更少,而实际工作的时间更多。
-
+1 @tsturzl 我刚开始学习这个东西..,不太了解 *.js 框架。但是,正如您所说,意图是创建一些好的网络应用程序(游戏本身:) :D)。无论如何,谢谢。
-
我推荐these lessons。它们从比其他课程更基础的水平开始,将帮助您真正了解正在发生的事情。
-
@gman :当我按照您提供的本课进行尝试时,得到 ERROR : Uncaught ReferenceError: createShaderFromScriptElement is not defined
-
你是说this page 给你一个错误?或者您是说您下载了该页面并尝试在本地运行它并给您一个错误?您需要在本地复制 this script 才能在本地运行它。 This article explains that script
标签: javascript html opengl-es webgl