# 实验二思考题与验收 A:改变层次会改变三角形与顶点数量,必须重新递归生成并上传顶点。只改变统一颜色不影响几何,只更新uColor并重绘即可。 B:初始有3条边,每轮每条边替换成4条,因此n层为3×4ⁿ。使用LINE_LOOP时顶点数等于线段数。每层数据量与绘制量约为上一层4倍;递归总计算量为O(4ⁿ),递归栈深度O(n),输出存储O(4ⁿ)。 C:GPU保留原始顶点,Vertex Shader对每个顶点应用同一旋转公式,只需更新uTheta。重复启动rAF链可能重复更新角度,导致速度异常、额外渲染开销或暂停状态难以管理。 D:本实验矩形没有预设尺寸,需两个对角点确定位置、宽和高,第一次点击必须保存到第二次事件。GPU缓冲区主要保存渲染数据,JavaScript对象还保存类型、颜色与顶点,便于重绘、撤销、选中和编辑。 完成后12问 1. 层数影响顶点与Buffer;颜色仅影响uColor。 2. AB三等分得P、Q,令d=Q−P。逆时针轮廓外部在右侧,因此R=P+(dx/2+√3dy/2, −√3dx/2+dy/2)。按A→P→R→Q→B递归。顺时针边界应改用+60°。 3. N₀=3,Nₙ=4Nₙ₋₁,所以Nₙ=3×4ⁿ。 4. LINES每两点为一段,N段需2N点;LINE_STRIP连接相邻点,闭合N段通常存N+1点(末点重复首点);LINE_LOOP存N个连续顶点,自动连接末点和首点。 5. C的雪花顶点保留在Buffer;theta随时间更新,uTheta逐帧上传。speed、direction、paused由事件修改。 6. rAF把回调交给浏览器未来调度,当前调用栈会结束,不是同步递归。刷新率、后台节流和负载决定实际间隔,因此不能假设固定60fps。 7. paused控制是否推进theta,direction控制正负,speed控制角速度;只改程序状态和Uniform,不需要重建WebGL。 8. clientX/Y是视口像素,NDC范围为[-1,1];应减Canvas偏移并按显示尺寸归一化。浏览器Y轴向下,NDC Y轴向上,因此需翻转。 9. 两次点击分别触发事件,局部变量不会保存第一次结果,需firstPoint。工具切换时清除它,避免旧线段端点被新矩形错误复用。 10. 应用层对象保留语义和边界,便于查找、改色和删除后重建有效数据;仅有GPU顶点难以维护对象级操作。 11. E复用Koch、Uniform动画和鼠标映射;新增三方向椭圆轨道(LINE_LOOP)、菱形卫星(TRIANGLES),以数量与脉动状态控制实例数和整体尺度。 12. 本次拒绝仅修改示例“绽放”的标题、颜色,以及每帧重传全部几何的做法;选择新轨道/卫星组成,并仅在层次变化时上传网格。具体可验证证据见ai-log与测试结果。个人采纳理由请本人复核后说明。 验收操作 A:依次选择1、4层并换色,观察数量和重置。 B:0、1、2、4层分别为3、12、48、768段;雪花朝外、闭合且不裁切。 C:开始→暂停→反向→开始;速度置0及非零;暂停时拖动角度;复位。 D:四角附近画点;画线与矩形;反向点击矩形对角点;线段第一点后切换工具;清空再画;改变窗口尺寸/缩放后点中心。 E:初始状态与调整卫星数、层次、尺度、中心后的画面对比;开启脉动并开始;复位。 设计说明:主题“节律”。Koch雪花表现有序结构,交错椭圆轨道与菱形卫星表现周期运动。复用算法、旋转和定位,新增卫星数量与脉动交互。开始后卫星沿轨道运动,开启脉动后整体周期缩放;滑块改变每轨卫星数量。