gpt4 book ai didi

java - 计算机图形运算矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 12:38:54 25 4
gpt4 key购买 nike

我正在尝试做什么

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

最重要的是,我能够通过整个管道过程转换世界坐标系中的 3D 多边形,并将它们输出到视口(viewport)坐标系中的 2D 屏幕上。

我还能够在我的世界上执行缩放、旋转或平移。

优化 - 问题正文

我读到OpenGL为每个转换保留了内部矩阵(世界到观看,观看到投影,投影到设备/视口(viewport) - 我没有模型坐标,我从世界坐标开始一切 - 所有3D多边形都已经在相同的世界坐标上,所以请忽略模型世界转换)。

现在,如果我想以编程方式模仿,我该如何实现?

如果我只是保存 3 个矩阵,并且每次对世界应用缩放/旋转/变换时,我必须:

  1. 循环遍历世界坐标并对每个坐标:

    1.1 坐标与世界观矩阵相乘

    1.2 坐标与投影矩阵相乘(到二维)

    1.3 坐标与视口(viewport)矩阵相乘

  2. 最终点位于屏幕坐标中,只需使用 Java AWT 打印到屏幕

这是适当的方法吗?

我可以将前面的世界 View 矩阵、投影矩阵和投影视口(viewport)矩阵乘以单个矩阵 M,然后将每个点与该 M 相乘吗?我想我不能,因为第一个矩阵是 4x4,第二个矩阵是 4x4,第三个矩阵是 3x3(不再有 Z 值)。

最佳答案

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

  1. OpenGL 在其固定函数管道中做了什么
  2. 大多数顶点着色器在可编程管道中的作用

事实上,您可以提前将矩阵预乘在一起以减少计算量 - 一些顶点着色器只是采用“MVP”矩阵,该矩阵是投影、 View 和模型预乘在一起的。如果您只需将“z”分量设置为 0 并构造一个 4x4 矩阵,从而允许它与其他矩阵相乘,则视口(viewport)矩阵应该是可重构的。

如果我是你,尝试在软件级别上重新创建 OpenGL 的功能,我会专注于 OpenGL 的可编程管道的功能,即获取着色器的源代码或二进制文件并将它们解析为应用于数据的函数,而不是使用您使用的预定义矩阵。 OpenGL 的立即模式确实保留了您正在考虑的矩阵,但是立即模式已经有二十多年的历史了,如果您希望您正在学习的东西有意义,您可能应该围绕现代 OpenGL 而不是 20 年前的 OpenGL 构建您的管道。

关于java - 计算机图形运算矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37031908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com