我一直关注着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的代码段(但仍然很长)。
可能导致问题的原因是什么?
答案 0 :(得分:1)
代码是正确的,除了在绘制形状之前在translate()
函数中遗漏了一个参数。