我只使用Java AWT实现自己的查看管道,模仿OpenGL的行为。
在底线,我能够通过整个pipleline过程转换世界坐标系中的三维多边形,并在Viewport坐标系的2D屏幕上输出它们。
我也有能力在我的世界上进行缩放,旋转或翻译。
我已经读过OpenGL为每次转换保存内部矩阵(世界观看,查看到投影,投影到设备/视口 - 我没有模型坐标,我从世界开始一切坐标 - 所有三维多边形已经在相同的世界坐标上,所以请忽略模型世界转换)。
现在,如果我想以编程方式模仿,我该如何实现呢?
如果我只是按住3个矩阵,并且每次向世界应用缩放/旋转/变换时,我必须:
循环遍历世界坐标和每个坐标:
1.1将坐标与世界视图矩阵相乘
1.2将坐标与投影矩阵(到2D)相乘
1.3将视口矩阵与坐标矩阵相乘
最终点位于屏幕坐标中,只需使用Java AWT打印到屏幕
这是合适的方法吗?
我可以将前方的世界视图矩阵,投影矩阵和投影视口矩阵乘以单个矩阵M,并且每个点只有多个M?我想我不能,因为第一个矩阵是4x4,第二个是4x4,第三个是3x3(不再是Z值)。
答案 0 :(得分:0)
请记住"循环每个坐标并将它们乘以各自的矩阵:
如果我是你,尝试在软件层面上重新创建OpenGL的功能,我将专注于OpenGL的可编程管道功能,即为着色器获取源或二进制文件并将其解析为应用于数据的函数,而不是您使用的预定义矩阵。 OpenGL的立即模式确实维护了你想到的矩阵,但立即模式已有二十多年了,如果你想要你学习的东西是有意义的,你应该建立你的现代OpenGL周围的管道,而不是20年前的OpenGL。