我一直沿用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片段(但仍然很长)。

是什么原因引起的?

最佳答案

该代码是正确的,只是在绘制形状之前translate()函数中遗漏了一个参数。

10-05 20:51
查看更多