Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有它的GLTRANSTEF等价物_C++_Opengl - Fatal编程技术网

C++ 没有它的GLTRANSTEF等价物

C++ 没有它的GLTRANSTEF等价物,c++,opengl,C++,Opengl,好的,所以我正在连接到一个游戏,从中检索数据并使用它。我尽可能地连接文本(通过调用列表) 游戏使用: 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); //Re

好的,所以我正在连接到一个游戏,从中检索数据并使用它。我尽可能地连接文本(通过调用列表)

游戏使用:

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.

将文本呈现到屏幕上。有没有办法让我知道屏幕上文字的坐标?我可以通过绕道使用所有功能

我不知道那人做了什么。如何获得文本的X和Y

我用它来投射glTranslate的坐标,但它仍然投射错误。我传递给我的世界向量是什么?它只是一个带有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;
}

这真的取决于,如果你在正交模式下绘制文本,无论你传递到GLTRANSTEF中的是什么,都是实际的屏幕坐标,如果你在透视模式下,你必须通过转换管道来获得屏幕坐标,我相信这样做的功能将在名为gluProject的GLU库中,gluProject将把屏幕坐标带到世界空间

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

下面是一个用正交法翻译和调用列表的示例

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, SCREEN_WIDTH, SCREEN_HEIGHT, 0.0, -1.0, 1.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(336.0f, 196.0f, 0.0f);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f); //Red
glCallList(877); //Or whatever list you wish to call
此时,您可能希望具有下一个要写入的字符的宽度,并简单地转换值以将文本直接置于其右侧

顺便说一句,有一个很好的免费使用库,名为FreeType 2,暴雪在这些游戏中使用它,我自己也使用它,前者给了它很好的可信度


如果我仍然没有回答您的问题,请务必让我知道

FYI,您以错误的顺序调用了glVertex和glTexCoord(glVertex应始终排在其他属性之后)。在你修复它之前,你可能会感到困惑,它不会像你期望的那样工作。我不是那个叫它的人。这就是游戏的代码。我正在校准PrintF,以便将我的文本直接呈现在他们的文本之上。我的问题是,我试图找到它们的坐标,所以我钩住了上面看到的所有函数,这就是它被调用的顺序。好吧,这肯定不是第一次,因为我尝试将它们作为实际的屏幕坐标传递。我已经用我正在使用的投影方法编辑了我的帖子。好的,是的,你使用的是透视投影,这意味着你必须通过管道传递你的坐标来获得屏幕坐标,这个过程是这样的,我在上面添加了代码,以更好地解释生成的ScreenX和ScreenY将为您提供屏幕坐标,但是gluProject将为您提供这些坐标。我接受这个作为答案,但这不起作用。我没有通过管道的管道。它使用了一个调用列表:使用这个:并且它使用glTranslate:SI一个接一个地呈现每个字符。我编辑了我的第一篇文章来澄清。我想你认为我有能力投射。天哪,我第一次没有读对,我应该告诉你只使用正交投影,对不起,我最初混淆了你想做什么,在渲染字体时,你应该始终使用正交投影(除非你想把你的文本放在一些3D几何体上。我建议你买一本OpenGL红皮书,学习一下OpenGL的不同状态和功能,但基本上在正交投影中,你的翻译是在屏幕坐标中完成的