Java openGL在psuedo-3d透视图中绘制扭曲的精灵(图像)

Java openGL在psuedo-3d透视图中绘制扭曲的精灵(图像),java,android,opengl-es,3d,andengine,Java,Android,Opengl Es,3d,Andengine,好吧,这将是一个很难解释的问题。我正在使用AndEngine(我想是openGL)为Android制作一个非常基本的“伪3d”赛车游戏。我不相信使用AndEngine真的与这个问题有任何关系,因为我直接访问openGL函数来完成我的绘图 不管怎样,我复制了一些代码,这些代码允许正常的2d和引擎具有3d透视图(可以找到这方面的教程。这很好,我也不认为这与我的问题有多大关系,但我不完全理解openGL,所以我有点难说。这是来自onLoadEngine的代码(在应用程序启动时调用)用于设置具有3d透视

好吧,这将是一个很难解释的问题。我正在使用AndEngine(我想是openGL)为Android制作一个非常基本的“伪3d”赛车游戏。我不相信使用AndEngine真的与这个问题有任何关系,因为我直接访问openGL函数来完成我的绘图

不管怎样,我复制了一些代码,这些代码允许正常的2d和引擎具有3d透视图(可以找到这方面的教程。这很好,我也不认为这与我的问题有多大关系,但我不完全理解openGL,所以我有点难说。这是来自onLoadEngine的代码(在应用程序启动时调用)用于设置具有3d透视图的相机:

this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT) {
    //other methods...
    private void setFrustum(GL10 pGL) {
        // set field of view to 60 degrees
        float fov_degrees = 60;
        float fov_radians = fov_degrees / 180 * (float)Math.PI;                        

        // set aspect ratio and distance of the screen
        float aspect = this.getWidth() / (this.getHeight());
        float camZ = this.getHeight()/2 / (float)Math.tan(fov_radians/2);                              

        // set projection
        GLHelper.setProjectionIdentityMatrix(pGL);
        GLU.gluPerspective(pGL, fov_degrees, aspect, camZ/10, camZ*10); 

        // set view
        GLU.gluLookAt(pGL, 0,120f, camZ, 0, 0, 0f, 0, 1, 0); // move camera back+up
        pGL.glScalef(1,-1,1); // reverse y-axis
        pGL.glTranslatef(-CAMERA_WIDTH/2,-CAMERA_HEIGHT/2,0); // origin at top left
    }
};
然后在稍后的onLoadScene(绘图发生的地方)中,我绘制了一组图像,如下所示:

for (int n=0;n<=100;n++) {
    final int k = n;

    final Sprite line = new Sprite(0, 0,CAMERA_WIDTH,16f, [AndEngine texture holding road img]) {
    @Override
        protected void applyTranslation(GL10 pGL) {
            pGL.glTranslatef(this.mX, 120f, 15f*k); //16*k causes a sliver of a space between each segment
            pGL.glRotatef(90f, 1, 0, 0); //**MAY BE MY ISSUE**
        }           
    };
    scene.attachChild(line); //actually draws the image to the screen           
}

for(int n=0;n好的,我找到了解决方案!结果发现有一个小问题叫做透视正确纹理,它基本上只是一个需要在OpenGL中打开的标志,以便在使用透视绘制图像时不扭曲图像

在我的相机初始化代码中,我将这一行添加到方法setFrustum(GL10 pGL):

这从根本上解决了问题。线条仍然笔直:)我在另一个stackoverflow帖子上发现了这一点,这个答案实际上并不是询问者想要的,但它恰好对我有用:D引导我找到答案的线索可以找到

pGL.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);