【发布时间】:2015-12-02 05:53:28
【问题描述】:
我一直在关注WebGL tutorial series,我在本系列中的重点是处理将纹理和照明应用到 3D 球体。为了真正掌握此类程序的正确实现,以便将来编写它们,我正在尝试实现一个没有照明和纹理的代码版本。在一次在画布上绘制一个之前(使用不同的设置),我已经能够绘制 3D 参数形状,所以我基本上将该代码添加到教程提供的program 中。教程代码遵循一个结构,其中有一个名为 webGLStart() 的函数在页面加载时调用,它本身调用 initGL()(设置画布)、initShaders()、initBuffers()(用于绘制形状) , 和 ``drawScene()```。
我能够在画布中间成功绘制一个形状,但由于某种原因,当我尝试随后绘制另一个形状时,我收到错误:Cannot read property '0' of undefined 在我翻译的那一行模型视图矩阵到新形状的位置。按照教程中的方法,有一个数组用作堆栈,用于在每个形状转换之前保存 mvMatrix 的当前状态,并在对每个形状执行最后一次转换后恢复状态。我在想也许 mvMatrix 的当前副本在绘制第一个形状后没有正确弹出,因为经过一些调试,似乎在弹出之前和之后有相同数量的堆栈帧。我不认为这是导致错误的原因,但这是我能找到的唯一可能的问题。
我很确定我正在为每个形状正确设置缓冲区,因为我基本上在做教程source code 中所做的事情,所以我不知道出了什么问题。对于initBuffers() 和drawScene() 函数,我有一个my code here 的sn-p(但仍然很长)。
什么可能导致问题?
【问题讨论】:
-
感谢您的链接,实际上问题是我在绘制第二个形状之前遗漏了 translate 函数的参数 * facepalm * 我确实有另一个问题,但我应该能够解决那
标签: javascript html opengl-es webgl