我开始学习WebGL,因为我找到了一些旧的教程,我不知道2014年的正确方法是什么?
我启动了<canvas>
(基本),在教程中,他们会说:
使用getContext('2d')
如果要使用webgl,则将3d
而不是2d
但是现在我正在学习,我发现教程谈论的是getContext('webgl')
而不是getContext('3d')
。
语法改变了吗?
还有一篇文章说没有真正的3D,但是他们只使用射线投射?!
最佳答案
Mozilla开发者Netowrk(MDN)文档说:
getContext(在domstring context id中)renderingContext返回画布上的绘图上下文,如果不支持该上下文ID,则返回空值。绘图上下文允许您在画布上绘制。使用“2d”调用getContext将返回CanvasRenderingContext2d对象,而使用“ExperimentalWebGL”(或“WebGL”)调用它将返回WebGLRenderingContext对象。此上下文仅在实现WebGL的浏览器上可用。
结果:| Context | Chrome (webkit) | Firefox (gekko) || ------------------ | ------------------------ | ------------------------ || 2d | CanvasRenderingContext2D | CanvasRenderingContext2D || 3d | null | null || webgl | WebGLRenderingContext | WebGLRenderingContext || experimental-webgl | WebGLRenderingContext | null |
我建议在wiki上阅读:webgl
以下是完整的http://www.khronos.org/webgl/wiki/FAQ部分:
(不过,我建议您从What is the recommended way to initialize WebGL?中直接阅读,以防它发生变化!)
初始化WebGL的建议方法是什么?
建议检查初始化是否成功或失败。如果webgl初始化失败,建议您区分失败,因为浏览器不支持webgl,并且由于其他原因失败。如果浏览器不支持WebGL,则向用户提供指向“wiki”的链接。如果webgl由于其他原因失败,则向用户提供指向“http://get.webgl.org的链接。
您可以通过检查WebGLrenderingContext是否存在来确定浏览器是否支持WebGL。
if (window.WebGLRenderingContext) {
// browser supports WebGL
}
如果浏览器支持webgl和canvas.getContext(“webgl”)返回空值,则webgl由于用户浏览器以外的原因失败(没有GPU、内存不足等…)
if (!window.WebGLRenderingContext) {
// the browser doesn't even know what WebGL is
window.location = "http://get.webgl.org";
} else {
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("webgl");
if (!ctx) {
// browser supports WebGL but initialization failed.
window.location = "http://get.webgl.org/troubleshooting";
}
}
注意:必须检查浏览器是否支持WebGL,以了解从canvas.getContext()获取空值意味着
http://get.webgl.org/troubleshooting/
使用包装器的示例
<html>
<body>
<script type="text/javascript" src="localpath/webgl-utils.js"></script>
<script>
function init() {
canvas = document.getElementById("c");
gl = WebGLUtils.setupWebGL(canvas);
if (!gl) {
return;
}
...
}
window.onload = init;
</script>
<canvas id="c"></canvas>
</body>
</html>