Apple II平台Applesoft Basic 3D渲染器顶点位置异常排查求助
Apple II Applesoft Basic 3D立方体渲染错误排查与修复
核心问题1:透视投影公式错误
你的投影计算代码(1010、1020行)因运算优先级错误导致完全不符合弱透视投影逻辑:
原错误代码:
1010 XP = FOCAL * X / FOCAL + Z 1020 YP = FOCAL * Y / FOCAL + Z
这段代码实际执行的是 XP = X + Z、YP = Y + Z(除法优先级高于加法),完全没有透视效果。正确的弱透视投影公式需要将分母用括号包裹,确保先计算焦距与Z轴的和:
1010 XP = FOCAL * X / (FOCAL + Z) 1020 YP = FOCAL * Y / (FOCAL + Z)
核心问题2:立方体顶点坐标定义错误
部分顶点坐标不符合立方体的对称结构,导致顶点位置偏移:
- 第350行:
X = 30改为X = 10(对应正面X=10顶点的背面顶点) - 第470行:
X = -30改为X = -10,第490行:Z = 10改为Z = -10(对应正面X=-10,Y=10顶点的背面顶点) - 第410-430行:新增
430 Z = -10,补全背面顶点的Z轴赋值
修正后的顶点代码片段:
350 X = 10 360 Y = -10 365 Y2 = Y 370 Z = -10 375 gosub 2100 ... 410 X = 10 420 Y = 10 425 Y2 = Y 430 Z = -10 435 gosub 2100 ... 470 X = -10 480 Y = 10 485 Y2 = Y 490 Z = -10 495 gosub 2100
次要问题:坐标边界修正逻辑错误
Apple II HGR模式的坐标范围是X:0-279、Y:0-159,原代码的截断逻辑错误,改为:
1040 if XP > 279 then XP = 279 : if XP < 0 then XP = 0 1050 if YP > 159 then YP = 159 : if YP < 0 then YP = 0
修复后关键代码整合
1000 rem function get projected 1010 XP = FOCAL * X / (FOCAL + Z) 1020 YP = FOCAL * Y / (FOCAL + Z) 1030 XP = XP + 140 : YP = YP + 80 1040 if XP > 279 then XP = 279 : if XP < 0 then XP = 0 1050 if YP > 159 then YP = 159 : if YP < 0 then YP = 0 1060 return
内容的提问来源于stack exchange,提问作者Roger Mariña
相关产品推荐
相关产品推荐

