首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算机图形操作矩阵

计算机图形操作矩阵
EN

Stack Overflow用户
提问于 2016-05-04 15:20:39
回答 1查看 184关注 0票数 1

我想做的是

我只使用Java实现我自己的查看管道,模仿OpenGL的行为。

在底线,我能够转换在世界坐标系中的三维多边形通过整个直线过程,并输出到2D屏幕上的视口坐标系。

我也有能力对我的世界进行缩放,旋转或平移。

优化-问题的主体

我读过OpenGL保存每个转换的内部矩阵(查看世界,观看到投影,投影到设备/视图端口--我没有模型坐标,我开始从世界坐标开始所有3d多边形已经在同一个世界坐标上,所以请忽略模型世界转换)。

现在,如果我想模仿这个程序,我如何实现呢?

如果我简单地持有这3个矩阵,并且每次将缩放/旋转/转换应用于世界时,我必须:

  1. 循环遍历世界坐标,对于每个坐标: 1.1与世界观矩阵相乘的坐标 1.2用投影矩阵(到2D)相乘坐标 1.3用视口矩阵相乘坐标
  2. 最后一点在屏幕坐标中,只需使用Java打印到屏幕

这是否适当的方法?

我能把前面的世界观矩阵、投影矩阵和投影视口矩阵相乘成一个矩阵M,然后用这个M把每一点乘以一次吗?我想我做不到,因为第一个矩阵是4x4,第二个矩阵是4x4,第三个矩阵是3x3 (不再有Z值)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-04 15:33:32

请记住,“循环遍历每个坐标并将它们乘以各自的矩阵是:

  1. OpenGL在其固定功能管道中做什么?
  2. 大多数顶点着色器在可编程流水线中的作用

事实上,你可以提前将矩阵相乘,以减少计算量--一些顶点着色器只需要一个"MVP“矩阵,即投影、视图和模型相乘。如果简单地将'z‘组件设置为0并构造一个4x4矩阵,则视口矩阵应该是可重构的,从而允许将它与其他矩阵相乘。

如果我是您,尝试在软件级别上重新创建OpenGL的功能,我将重点关注OpenGL的可编程管道功能,即获取着色器的源或二进制,并将它们解析为应用于数据的函数,而不是您使用的预定义矩阵。OpenGL的即时模式确实维护了你想要的矩阵,但是即时模式已经有了20多年的历史,如果你想让你学到的东西变得有意义,你可能应该围绕着现代的OpenGL,而不是20年前的OpenGL来构建你的管道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37031908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档