C++ glutBitmapCharacter的glRasterPos单位

C++ glutBitmapCharacter的glRasterPos单位,c++,opengl,C++,Opengl,我试图做的是,当我绘制每个对象时,我检查它是否被标记,如果被标记,在对象附近写一些文本,使用glRasterPos2f/I在屏幕上设置位置,然后使用glutBitmapCharacter 对于glRasterPos2,我看到了许多以像素坐标作为参数传递的示例(示例:100100)。像素坐标不适用于我,相反,我必须转换为[-1.0 1.0]比例的坐标。[-1-1]是屏幕的左下角,[11]是右上角 我在示例中注意到的一件事是对正交投影的更改。这就是我的问题的原因吗 我有一个观点();在开始时设置一次

我试图做的是,当我绘制每个对象时,我检查它是否被标记,如果被标记,在对象附近写一些文本,使用glRasterPos2f/I在屏幕上设置位置,然后使用glutBitmapCharacter

对于glRasterPos2,我看到了许多以像素坐标作为参数传递的示例(示例:100100)。像素坐标不适用于我,相反,我必须转换为[-1.0 1.0]比例的坐标。[-1-1]是屏幕的左下角,[11]是右上角

我在示例中注意到的一件事是对正交投影的更改。这就是我的问题的原因吗

我有一个观点();在开始时设置一次,现在不会更改。如果每次我想在像素坐标下书写文本时都必须切换到gluOrtho,那么它看起来很混乱。对于每个对象,我从gluPerspective()开始,然后根据需要更改为gluOrtho(),然后再返回

我考虑过的另一个选择是,因为事情似乎在[-1.0 1.0]比例上运行,所以我可以手动将屏幕坐标转换到比例上。但这似乎也很混乱,对性能不利


关于如何继续的建议?

函数的
glRasterPos
famlili将使用当前模型视图和投影矩阵变换坐标,类似于应用于顶点数据的坐标变换


在此阶段,您可以使用任何您喜欢的矩阵。如果您使用与绘制对象相同的矩阵,则只需使用
glRasterPos3f
变量直接指定三维对象坐标中的点。

glRasterPos
将坐标系作为绘制图元。因此,如果您已为3D对象设置了变换,并调用了绘制该对象的命令,则只需将用于对象顶点的相同坐标传递到
glRasterPos

例如,如果要将文本放置在顶点旁边,则可以使用同样用于顶点的坐标调用
glRasterPos
,同时仍设置相同的变换
glRasterPos
随后将使用同样应用于顶点的模型视图和投影变换来变换这些坐标,并且使用
glutBitmapCharacter()
绘制的文本的左下角将与顶点对齐

如果要将文本定位在给定的像素位置,可以使用而不是
glRasterPos

顾名思义,它以窗口坐标为参数,这意味着没有应用任何模型/视图/投影。窗口坐标以像素为单位,原点位于窗口的左下角

例如,以下调用将光栅位置设置为窗口右100像素,左下角上方30像素:

glWindowPos2i(100, 30);

使用此调用,您不必担心为呈现文本而更改转换。

但OP希望“在对象附近写入一些文本”,这确实需要考虑转换。@Jongware-Hmm,是的
glRasterPos
在这种情况下应该可以正常工作。他们谈论“我的问题”,但没有真正说出问题是什么。你有什么问题?你问“我的问题的原因”,但我没有看到任何描述问题是什么的东西。我的问题是,如果我使用glRasterPos2f(4.0,4.0);例如,对glutBitmapCharacter的后续调用不会显示在屏幕上。在这一点上,我看到了不同的行为与我所看到的一些例子。但是,如果我使用glRasterPos2f(x/windowWidth*2-1,y/windowHeight*2-1),我会在屏幕上预期的x,y位置获得文本。