好的,所以我迷上了游戏以从中检索数据并使用它。我知道(通过CallLists)钩住文本。

游戏使用:



glNewlist()
glBegin(GL_QUADS)
glVertex2i(....);    //Stored the location of each char in the bitmap above..
glTexCoords2f(....); //Not sure what this is..
glEnd()
glEndList()

glCallList(876);   //Represents a single character in the above bitmap.
glLoadIdentity();   //Resets the matrix.
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTranslatef(336, 196, 0);  //Places it on screen somehow! :S? This is what I need to know.
glColor4ub(0, 0, 0, 255);  //Colours the text.
LoadIdentity();            //Resets the matrix and does the next character.
glCallList(877);           //Next char.


将文本呈现到屏幕上。有什么方法可以弄清屏幕上文本的坐标吗?我可以通过Detours访问所有功能。

我不确定glTranslate做了什么。如何获得文本的X和Y?

我已经使用它来从glTranslate投影坐标,但是它仍然投影错误。我要如何传递给WorldVector?它只是一个带有X,Y,Z的结构。我已经将它传递给glTranslate坐标,但这是行不通的。

bool WorldToScreen(GLfloat &X, GLfloat &Y, Vector3D World, GLdouble* ModelViewMatrix, GLdouble* ProjectionMatrix)
{
    GLint ViewPort[4];
    GLdouble Screen[3];
    glGetIntegerv(GL_VIEWPORT, ViewPort);

    if(gluProject(World.X, World.Y, World.Z, ModelViewMatrix, ProjectionMatrix, ViewPort, &Screen[0], &Screen[1], &Screen[2]) == GL_TRUE)
    {
        X = Screen[0];
        Y = ViewPort[3] - Screen[1];
        return true;
    }
    return false;
}

最佳答案

这确实取决于,如果您以正交方式绘制文本,则传递给glTranslatef的内容都是实际的屏幕坐标,如果处于透视模式,则必须将它们传递到转换管道中才能获得屏幕坐标,相信执行此操作的功能将在名为gluProject的GLU库中,其中gluUnProject会将屏幕坐标带到世界空间

translate to world position
translate to view position
divide by W (Copy of Z) to get projection coordinates
ScreenX = Px * ScreenWidth/2 + ScreenWidth/2
ScreenY = -Py * ScreenWidth/2 + ScreenWidth/2

关于c++ - 没有它的glTranslatef等效项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11804790/

10-11 00:35