【问题标题】:How do I find the world coordinates of a pixel on the image plane?如何在图像平面上找到像素的世界坐标?
【发布时间】:2013-10-06 07:37:30
【问题描述】:

一点背景

我正在用 C++ 编写一个简单的光线追踪器。我已经完成了大部分核心,但不明白如何检索图像平面上像素的世界坐标。我需要这个位置,以便我可以将光线投射到世界上。

目前我有一个相机,它有一个位置(也就是我的透视参考点),一个未标准化的方向(矢量)。方向长度表示图像平面的中心以及相机朝向的方向。

还有其他与相机相关的值,但它们应该不相关。

我的图像坐标范围从 -1 到 1,视角(焦距)将根据与相机相关的方向的距离而变化。

我需要什么帮助

我需要从像素坐标(例如图像中每边 256 像素的 [0, 256])到我的世界坐标。

我还想对此进行编程,以便无论相机放置在哪里以及指向哪里,我都可以在世界坐标中找到像素。 (目前相机几乎总是以原点为中心,并且会向下看负 z 轴。我想在编程时考虑到未来的变化。)知道这段代码是否应该被推到我的线程代码也是如此。否则将由主线程计算,然后在线程代码中使用射线。


(来源:in.tum.de

这张图片不是我制作的,它只是用来说明我需要什么。

如果您需要任何其他信息,请留下 cmets。否则,我想要一个简单的理论/代码示例来说明该怎么做。

【问题讨论】:

标签: graphics vector-graphics raytracing


【解决方案1】:

基本上,您必须执行 V * MVP 的逆过程,将点转换为单位立方体尺寸。查看以下 url 以获得编程帮助 http://nehe.gamedev.net/article/using_gluunproject/16013/https://sites.google.com/site/vamsikrishnav/gluunproject

【讨论】:

  • 我假设我最终这样做的方式与您建议的方式非常相似。我使用相机方向来创建每条光线。我的相机没有变换矩阵,所以我最终使用带有向上向量和视图平面法线的叉积来创建一组向量(如果我愿意,可以是一个矩阵)来创建每个像素位置。 (我确信可以进行很多优化。)
猜你喜欢
  • 1970-01-01
  • 2015-08-10
  • 2014-04-18
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多