我想要做的是,当我绘制每个对象时,我检查它是否被标记,如果被标记,则在对象附近写一些文本,使用glRasterPos2f / i在屏幕上设置位置,然后使用glutBitmapCharacter
对于glRasterPos2,我看到很多像素坐标作为参数传递的例子(例如:100,100)。像素坐标对我不起作用,而是我必须转换为[-1.0 1.0]比例的坐标。 [-1 -1]在屏幕的左下角,[1 1]在右上角。
我在示例中注意到的一件事是对正投影的改变。这是我的问题的原因吗?
我有gluPerspective();在开始时设置一次,并且不会更改(现在)。如果每次我想在像素坐标处写文本时我都必须更改为gluOrtho,这看起来很麻烦。对于每个对象,我从gluPerspective()开始,然后根据需要更改gluOrtho(),然后再返回。
我想到的另一个选择是,因为事情似乎在[-1.0 1.0]范围内工作,我可以手动将屏幕坐标转换为比例。但这对于表现来说似乎也很混乱。
关于如何进行的任何建议?
答案 0 :(得分:1)
glRasterPos
函数族将使用当前的ModelView和Projection矩阵变换坐标,类似于应用于顶点数据的坐标变换。
您可以在此阶段使用您喜欢的任何矩阵。如果使用与绘制对象相同的矩阵,则只需使用glRasterPos3f
变量直接指定3D对象坐标中的点。
答案 1 :(得分:1)
glRasterPos
获取与绘图基元相同的坐标系中的坐标。因此,如果您已为3D对象设置了转换,并进行了绘制调用,则只需将用于对象顶点的相同坐标传递给glRasterPos
。
例如,如果要在顶点旁边放置文本,则使用与顶点相同的坐标调用glRasterPos
,同时仍设置相同的变换。然后glRasterPos
将使用也应用于顶点的模型视图和投影变换来变换这些坐标,并且使用glutBitmapCharacter()
绘制的文本的左下角将与顶点对齐。
如果您想将文字定位在给定的像素位置,可以使用glWindowPos
代替glRasterPos
。
顾名思义,它在窗口坐标中采用其参数,这意味着不应用任何模型/视图/投影。窗口坐标以像素为单位,原点位于窗口的左下角。
例如,以下调用将光栅位置设置为右侧100像素,窗口左下角30像素:
glWindowPos2i(100, 30);
使用此调用,您无需担心更改渲染文本的转换。