我想做的是
我只使用Java实现我自己的查看管道,模仿OpenGL的行为。
在底线,我能够转换在世界坐标系中的三维多边形通过整个直线过程,并输出到2D屏幕上的视口坐标系。
我也有能力对我的世界进行缩放,旋转或平移。
优化-问题的主体
我读过OpenGL保存每个转换的内部矩阵(查看世界,观看到投影,投影到设备/视图端口--我没有模型坐标,我开始从世界坐标开始所有3d多边形已经在同一个世界坐标上,所以请忽略模型世界转换)。
现在,如果我想模仿这个程序,我如何实现呢?
如果我简单地持有这3个矩阵,并且每次将缩放/旋转/转换应用于世界时,我必须:
这是否适当的方法?
我能把前面的世界观矩阵、投影矩阵和投影视口矩阵相乘成一个矩阵M,然后用这个M把每一点乘以一次吗?我想我做不到,因为第一个矩阵是4x4,第二个矩阵是4x4,第三个矩阵是3x3 (不再有Z值)。
发布于 2016-05-04 15:33:32
请记住,“循环遍历每个坐标并将它们乘以各自的矩阵是:
事实上,你可以提前将矩阵相乘,以减少计算量--一些顶点着色器只需要一个"MVP“矩阵,即投影、视图和模型相乘。如果简单地将'z‘组件设置为0并构造一个4x4矩阵,则视口矩阵应该是可重构的,从而允许将它与其他矩阵相乘。
如果我是您,尝试在软件级别上重新创建OpenGL的功能,我将重点关注OpenGL的可编程管道功能,即获取着色器的源或二进制,并将它们解析为应用于数据的函数,而不是您使用的预定义矩阵。OpenGL的即时模式确实维护了你想要的矩阵,但是即时模式已经有了20多年的历史,如果你想让你学到的东西变得有意义,你可能应该围绕着现代的OpenGL,而不是20年前的OpenGL来构建你的管道。
https://stackoverflow.com/questions/37031908
复制相似问题