WebGL-呈现一个又一个形状时出现问题

WebGL- Issue when rendering one shape after another

本文关键字:问题 一个又一个 WebGL-      更新时间:2023-09-26

我一直在学习WebGL系列教程,本系列的重点是将纹理和照明应用于3D球体。为了真正掌握这些程序的正确实现,以便我将来可以编写它们,我正在尝试实现一个没有灯光和纹理的代码版本。我以前已经能够在画布上一次绘制一个三维参数形状(使用不同的设置),所以我基本上将该代码添加到教程中提供的程序中。教程代码遵循一个结构,其中有一个名为webGLStart()的函数在页面加载时调用,该函数本身调用initGL()(用于设置画布)、initShaders()initBuffers()(用于要绘制的形状)和"drawScene()"。

我已经能够成功地在画布中间绘制一个形状,但由于某些原因,当我随后尝试绘制另一个形状时,我会在将模型视图矩阵转换到新形状位置的行上出现错误:Cannot read property '0' of undefined。按照教程中的方法,有一个数组用作堆栈,用于在每个形状的转换之前保存mvMatrix的当前状态,并且在对每个形状执行最后一次转换后恢复该状态。我在想,可能在绘制第一个形状后,mvMatrix的当前副本没有正确弹出,因为经过一些调试,弹出前后似乎有相同数量的堆栈帧。我不认为这是造成错误的原因,但这是我能找到的唯一可能的问题。

我确信我为每个形状正确地设置了缓冲区,因为我基本上是在做教程源代码中所做的事情,所以我不知道出了什么问题。我在这里有一个代码片段(但仍然很长),用于initBuffers()drawScene()函数。

是什么原因导致了问题?

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