我正在尝试为现有的计算机游戏创建屏幕叠加层。此叠加层应显示显示3D世界中某些位置的图标。现在因为我无法访问我希望能够获取屏幕位置的数据,所以我必须使用以下变量来解决这个问题:
使用这些变量,我设法获得摄像机视图的右边缘和左边缘。使用这两个变量,我能够得到0到1之间的点,其中图标应该显示在x轴上。 (0在左边缘,1是右边缘)这似乎工作得很好,但只有当我与X轴或Z轴对齐时,如下例所示:http://i.imgur.com/OIZWBME.png
问题是,我不知道如何在相机旋转时使其工作。我已经尝试将两个单独的点组合在一起,但也与其他变量相结合,比如相机玩家的世界旋转和角度。
有没有人对如何使这项工作有任何想法?如果我忘记提供任何信息,请告诉我!
添
答案 0 :(得分:1)
维基百科上有很多好文章(https://en.wikipedia.org/wiki/3D_projection)和其他在线教程(http://www.codeproject.com/Articles/2158/A-short-discussion-on-mapping-3D-objects-to-a-2D-d)。
基本上,对于这个简单的实例,它归结为在渲染之前旋转虚拟空间中的所有内容。要绘制的点相对于摄像机位置移动,以便摄像机成为新的轴点,然后您可以像以前一样绘制。
([]<
是相机,a
,b
,c
是点数)
您已经可以绘制的内容:
^ <-----y------>
|
| b
| []< a
x
| c
|
|
v
你无法绘制的内容: (相机已移动并旋转)
<-----y------>
^ [ ]
| ^
| b
x a
| c
|
v
因此,您需要将相机的全局位置(通常使用矩阵)映射到其他所有位置,以便最终得到:
转型后:
<---------fake y------>
^
| a
|
fake | b
x: | []<
| c
|
v
您现在可以正常绘制。我不是这方面的专家,但这有助于你入门吗?