2012-05-16 36 views
0

編輯確定 - 我抓住了一個設備,並..guess什麼...它顯示正確?有誰知道爲什麼這隻會在模擬器上發生?謝謝。OpenGL ES對象顯示奇怪/扭曲 - Android

我想在Android上使用glDrawElements繪製一個對象。我使用下面的代碼來讀取我的vertice和indice數據,然後在我的渲染方法中繪製對象。我正在模擬器上測試它,而不是真實的設備。

這是我的場景對象代碼:

import java.nio.ByteBuffer; 
import java.nio.ByteOrder; 
import java.nio.FloatBuffer; 
import java.nio.IntBuffer; 
import java.nio.ShortBuffer; 

import javax.microedition.khronos.opengles.GL10; 

public class SceneObject { 
public FloatBuffer mVertexBuffer; 
public FloatBuffer mTextureBuffer; 
public ShortBuffer indexBuffer; 
public FloatBuffer mMatriceBuffer; 
public FloatBuffer mPivotBuffer; 

public short[] indicesTest = {0,1,2,3,4,5,3,5,6,7,5,8,7,8,9,10,7,9,11,10,9,12,1,0,13,12,14,15,13,14,14,10,11,15,14,11,0,14,12,16,17,18,19,16,18,18,20,19,21,16,19,22,21,19,22,19,23,4,24,25,25,26,27,25,27,28,4,25,28,5,4,28,5,28,8,29,30,31,29,31,19,29,19,20,32,33,31,32,31,30,32,34,33,35,22,23,36,35,23,37,36,23,37,23,38,39,37,38,40,39,38,41,40,38,41,38,1,42,41,1,12,43,1,42,1,43,17,27,26,26,18,17,44,45,46,46,47,44,48,49,50,51,52,53,53,54,51,55,51,54,54,56,55,57,48,50,50,58,57,52,59,60,60,53,52,59,44,47,47,60,59,61,62,63,63,64,61,65,66,67,67,68,65,69,70,71,71,72,69,66,69,72,72,67,66,73,65,68,68,74,73,70,75,76,76,71,70,75,61,64,64,76,75,77,78,79,79,80,77,81,82,62,62,61,81,83,81,61,61,75,83,84,63,62,62,82,84,63,84,85,86,87,88,89,90,91,92,93,87,87,86,92,94,95,96,96,97,94,98,99,100,100,101,98,102,103,104,104,105,102,106,107,108,108,109,106,110,111,112,78,77,113,114,115,78,112,111,116,117,118,115,119,116,120,121,122,123,123,124,121,125,126,127,127,128,125,129,130,131,132,133,5,5,133,6,5,134,135,135,134,136,134,137,136,137,138,136,129,139,130,139,140,141,140,142,141,137,141,138,141,142,138,141,130,139,143,144,145,144,146,145,147,145,146,144,148,146,148,149,146,146,149,150,151,132,152,153,152,154,154,152,155,152,132,155,132,5,155,155,5,135,156,157,158,158,157,146,146,157,147,159,160,158,158,160,156,34,160,159,149,161,150,161,162,150,162,163,150,150,163,164,163,165,164,165,166,164,166,167,164,164,167,129,167,168,129,169,139,129,129,168,169,154,143,153,145,153,143,170,171,172,173,172,171,174,175,176,177,178,179,180,179,178,178,181,180,182,180,181,175,183,176,184,176,183,185,177,186,179,186,177,171,185,173,186,173,185,187,188,189,190,189,188,191,192,193,194,193,192,195,196,197,198,197,196,196,191,198,193,198,191,192,199,194,200,194,199,201,195,202,197,202,195,188,201,190,202,190,201,203,204,205,206,205,204,207,208,187,188,187,208,208,209,188,201,188,209,189,210,187,207,187,210,210,189,211,212,213,214,215,216,217,218,219,220,221,220,219,222,223,224,225,226,227,228,229,230,231,230,229,232,233,234,235,236,237,238,239,240,241,242,243,123,244,124,245,246,203,204,203,246,247,248,203,249,250,251,252,253,247,248,247,253,159,33,34,254,255,256,256,257,254,255,244,123,123,256,255,244,258,121,121,124,244,259,260,125,125,128,259}; 

public float[] verticeTest = {20360.8f,20679.5f,611.547f,24248.7f,13527f,1074.93f,24207.4f,23005.5f,1503.19f,9819.59f,14845.7f,8.81875f,11126.3f,13982.2f,32.0718f,8379.01f,17678.5f,0.00115749f,8379.01f,15141.6f,0.00111471f,12137.8f,17973.8f,60.0461f,14591.9f,14509.2f,164.113f,15621.5f,15846.6f,223.075f,15136.7f,18549.5f,194.186f,16918.2f,16705.3f,310.215f,21081.8f,15846.6f,687.576f,19789f,16705.3f,554.435f,18467.9f,19868.7f,433.258f,18354.3f,17001.2f,423.539f,14591.9f,7402.34f,164.113f,13930.5f,9087.62f,131.015f,13039.7f,9096.18f,92.3283f,19110.4f,-8011.43f,490.311f,12811.7f,7228.03f,83.5128f,15621.5f,6064.9f,223.074f,16918.2f,5206.21f,310.215f,21807.5f,-426.492f,768.658f,11221.5f,13854f,34.3347f,12150f,12649.6f,60.4329f,12811.7f,10964.3f,83.513f,13702.6f,10955.8f,120.472f,13930.5f,12823.9f,131.015f,12150f,5542.76f,60.4327f,11119f,4205.31f,31.902f,15341.7f,-15792.9f,206.155f,9819.59f,3346.62f,8.81857f,10735.6f,-21752.5f,23.5976f,8379.01f,3050.73f,0.000981022f,18354.3f,4910.32f,423.538f,19789f,5206.21f,554.434f,21081.8f,6064.9f,687.576f,23336.1f,6399.27f,954.364f,22106.6f,7402.34f,803.393f,22764f,9087.62f,882.485f,22990.5f,10955.8f,910.595f,22764f,12823.9f,882.485f,22106.6f,14509.2f,803.393f,24248.7f,8492.36f,-3249.03f,24207.4f,17415.3f,-3297.97f,24207.4f,23005.5f,1503.19f,24248.7f,13527f,1074.93f,12728.3f,-24463.4f,-4243.56f,15341.7f,-20827.5f,-4117.81f,15341.7f,-15792.9f,206.155f,19110.4f,-13046f,-3833.65f,21807.5f,-5461.09f,-3555.3f,21807.5f,-426.492f,768.658f,19110.4f,-8011.43f,490.311f,15341.7f,-20827.5f,-4117.81f,15341.7f,-15792.9f,206.155f,10735.6f,-26787.1f,-4300.36f,10735.6f,-21752.5f,23.5976f,23336.1f,1364.68f,-3369.59f,23336.1f,6399.27f,954.364f,24883.8f,8123.11f,-2819.08f,24859.5f,16025.8f,-2803.12f,24207.4f,17415.3f,-3297.97f,24248.7f,8492.36f,-3249.03f,13363.4f,-24832.7f,-3813.62f,15976.8f,-21196.8f,-3687.86f,15341.7f,-20827.5f,-4117.81f,12728.3f,-24463.4f,-4243.56f,19745.5f,-13415.3f,-3403.7f,22442.7f,-5830.35f,-3125.36f,21807.5f,-5461.09f,-3555.3f,19110.4f,-13046f,-3833.65f,10915.8f,-27847.5f,-3863.23f,10735.6f,-26787.1f,-4300.36f,23222.6f,-2518.03f,-3057.67f,23336.1f,1364.68f,-3369.59f,10301.8f,-40240.8f,-15469.8f,10482f,-40907.1f,-14694f,10915.8f,-27847.5f,-3863.23f,10735.6f,-26787.1f,-4300.36f,25648.8f,8121.58f,-2817.31f,25624.5f,16024.2f,-2801.34f,24056.1f,-2550.94f,-3019.36f,25678.7f,16560.2f,-2907.29f,25594.2f,17951.2f,-3237.71f,25624.5f,-88046.9f,-92182.7f,25678.7f,-87767f,-92508.6f,25678.7f,16560.2f,-2907.29f,25678.7f,16560.2f,-2907.29f,25624.5f,16024.2f,-2801.34f,25624.5f,-88046.9f,-92182.7f,25624.5f,-88413.1f,-92497.2f,25678.7f,-88133.2f,-92823.1f,24765.7f,-88413.1f,-92497.2f,24820f,-88133.2f,-92823.1f,25678.7f,-88133.2f,-92823.1f,25624.5f,-88413.1f,-92497.2f,24765.7f,-89895.8f,-93770.7f,24820f,-89615.9f,-94096.6f,24820f,-88133.2f,-92823.1f,24765.7f,-88413.1f,-92497.2f,25678.7f,-89596.5f,-94079.9f,25678.7f,-88133.2f,-92823.1f,24820f,-88133.2f,-92823.1f,24820f,-89615.9f,-94096.6f,23222.6f,-93458.9f,-81162.2f,24056.1f,-93491.8f,-81123.9f,24056.1f,-2550.94f,-3019.36f,23222.6f,-2518.03f,-3057.67f,10579.6f,-102089f,-68973.2f,10579f,-102925f,-68042.7f,10482f,-40907.1f,-14694f,10579.6f,-102089f,-68973.2f,10579f,-102925f,-68042.7f,10482f,-41291.8f,-14246f,10579f,-102925f,-68042.7f,10489f,-103571f,-67018.6f,10482f,-41713.9f,-13886.7f,10482f,-41291.8f,-14246f,10489f,-103571f,-67018.6f,8379.01f,-102145f,-69021.7f,10579.6f,-102089f,-68973.2f,10301.8f,-40240.8f,-15469.8f,8379.01f,-68082.6f,-39554.7f,8379.01f,-101057f,-70411.1f,10735.6f,-101057f,-70411.1f,10579.6f,-102089f,-68973.2f,8379.01f,-102145f,-69021.7f,-7490.7f,13527f,1074.93f,-3602.79f,20679.5f,611.547f,-7449.35f,23005.5f,1503.19f,5631.77f,13982.2f,32.0718f,6938.43f,14845.7f,8.81875f,4620.19f,17973.8f,60.0461f,2166.16f,14509.2f,164.113f,1136.48f,15846.6f,223.075f,1621.29f,18549.5f,194.186f,-160.178f,16705.3f,310.215f,-4323.73f,15846.6f,687.576f,-3030.97f,16705.3f,554.435f,-1709.92f,19868.7f,433.258f,-1596.32f,17001.2f,423.539f,2827.51f,9087.62f,131.015f,2166.16f,7402.34f,164.113f,3718.3f,9096.18f,92.3283f,-2352.36f,-8011.43f,490.311f,3946.3f,7228.03f,83.5128f,1136.48f,6064.9f,223.074f,-160.182f,5206.21f,310.215f,-5049.53f,-426.492f,768.658f,5536.51f,13854f,34.3347f,4608.07f,12649.6f,60.4329f,3946.3f,10964.3f,83.513f,3055.44f,10955.8f,120.472f,2827.51f,12823.9f,131.015f,5639.04f,4205.31f,31.902f,4608.07f,5542.76f,60.4327f,1416.3f,-15792.9f,206.155f,6022.45f,-21752.5f,23.5976f,6938.43f,3346.62f,8.81857f,-1596.32f,4910.32f,423.538f,-3030.97f,5206.21f,554.434f,-4323.73f,6064.9f,687.576f,-6578.08f,6399.27f,954.364f,-5348.56f,7402.34f,803.393f,-6006f,9087.62f,882.485f,-6232.44f,10955.8f,910.595f,-6006f,12823.9f,882.485f,-5348.57f,14509.2f,803.393f,-7449.35f,17415.3f,-3297.97f,-7490.7f,8492.36f,-3249.03f,-7449.35f,23005.5f,1503.19f,-7490.7f,13527f,1074.93f,1416.3f,-20827.5f,-4117.81f,4029.77f,-24463.4f,-4243.56f,1416.3f,-15792.9f,206.155f,-5049.53f,-5461.09f,-3555.3f,-2352.36f,-13046f,-3833.65f,-5049.53f,-426.492f,768.658f,-2352.36f,-8011.43f,490.311f,1416.3f,-20827.5f,-4117.81f,1416.3f,-15792.9f,206.155f,6022.45f,-26787.1f,-4300.36f,6022.45f,-21752.5f,23.5976f,-6578.08f,1364.68f,-3369.59f,-6578.08f,6399.27f,954.364f,-8101.47f,16025.8f,-2803.12f,-8125.81f,8123.11f,-2819.08f,-7449.35f,17415.3f,-3297.97f,-7490.7f,8492.36f,-3249.03f,781.19f,-21196.8f,-3687.86f,3394.66f,-24832.7f,-3813.62f,1416.3f,-20827.5f,-4117.81f,4029.77f,-24463.4f,-4243.56f,-5684.64f,-5830.35f,-3125.36f,-2987.47f,-13415.3f,-3403.7f,-5049.53f,-5461.09f,-3555.3f,-2352.36f,-13046f,-3833.65f,5842.26f,-27847.5f,-3863.23f,6022.45f,-26787.1f,-4300.36f,-6464.54f,-2518.03f,-3057.67f,-6578.08f,1364.68f,-3369.59f,6276.06f,-40907.1f,-14694f,6456.25f,-40240.8f,-15469.8f,5842.26f,-27847.5f,-3863.23f,6022.45f,-26787.1f,-4300.36f,-8866.45f,16024.2f,-2801.34f,-8890.79f,8121.58f,-2817.31f,-7298.12f,-2550.94f,-3019.36f,-8920.72f,16560.2f,-2907.29f,-8836.13f,17951.2f,-3237.71f,-8920.72f,-87767f,-92508.6f,-8866.45f,-88046.9f,-92182.7f,-8920.72f,16560.2f,-2907.29f,-8866.45f,16024.2f,-2801.34f,-8920.72f,16560.2f,-2907.29f,-8866.45f,-88046.9f,-92182.7f,-8920.72f,-88133.2f,-92823.1f,-8866.45f,-88413.1f,-92497.2f,-8920.72f,-87767f,-92508.6f,-8866.45f,-88046.9f,-92182.7f,-8061.98f,-88133.2f,-92823.1f,-8007.72f,-88413.1f,-92497.2f,-8920.72f,-88133.2f,-92823.1f,-8866.45f,-88413.1f,-92497.2f,-8920.72f,-88133.2f,-92823.1f,-8007.72f,-88413.1f,-92497.2f,-8061.98f,-89615.9f,-94096.6f,-8007.72f,-89895.8f,-93770.7f,-8061.98f,-88133.2f,-92823.1f,-8007.72f,-88413.1f,-92497.2f,-8920.72f,-88133.2f,-92823.1f,-8920.72f,-89596.5f,-94079.9f,-8061.98f,-88133.2f,-92823.1f,-8061.98f,-89615.9f,-94096.6f,-8061.98f,-88133.2f,-92823.1f,-8920.72f,-89596.5f,-94079.9f,-7298.12f,-93491.8f,-81123.9f,-6464.54f,-93458.9f,-81162.2f,-7298.12f,-2550.94f,-3019.36f,-6464.54f,-2518.03f,-3057.67f,-7298.12f,-2550.94f,-3019.36f,-6464.54f,-93458.9f,-81162.2f,6456.25f,-40240.8f,-15469.8f,6179.01f,-102925f,-68042.7f,6178.41f,-102089f,-68973.2f,6276.06f,-41291.8f,-14246f,6179.01f,-102925f,-68042.7f,6179.01f,-102925f,-68042.7f,6276.06f,-40907.1f,-14694f,6179.01f,-102925f,-68042.7f,6276.06f,-41713.9f,-13886.7f,6269.01f,-103571f,-67018.6f,6022.45f,-21752.5f,23.5976f,6022.45f,-26787.1f,-4300.36f,10735.6f,-26787.1f,-4300.36f,10735.6f,-21752.5f,23.5976f,6178.41f,-102089f,-68973.2f,6178.41f,-102089f,-68973.2f,6022.45f,-101057f,-70411.1f 
}; 

public String objectName; 
public int triangleCount; 
public int verticeCount; 
public float[] vertices; 
public float[] normals; 
public float[] textures; 
public short[] indices; 
public float[] matrices; 
public float[] pivots; 
public float[] animations; 


public void awake() { 

     ByteBuffer vbb = ByteBuffer.allocateDirect(verticeTest.length * 4); 
     vbb.order(ByteOrder.nativeOrder()); 
     mVertexBuffer = vbb.asFloatBuffer(); 
     mVertexBuffer.put(verticeTest); 
     mVertexBuffer.position(0); 

     ByteBuffer tbb = ByteBuffer.allocateDirect(textures.length * 4); 
     tbb.order(ByteOrder.nativeOrder()); 
     mTextureBuffer = tbb.asFloatBuffer(); 
     mTextureBuffer.put(textures); 
     mTextureBuffer.position(0); 

     //short has 2 bytes 
     ByteBuffer ibb = ByteBuffer.allocateDirect(indicesTest.length*2); 
     ibb.order(ByteOrder.nativeOrder()); 
     indexBuffer = ibb.asShortBuffer(); 
     indexBuffer.put(indicesTest); 
     indexBuffer.position(0); 

     verticeCount = (triangleCount*3); 
    } 

    public void draw(GL10 gl) { 

     System.out.println("Draw Method Called in Object"); 

     gl.glEnable(GL10.GL_TEXTURE_2D); //workaround bug 3623 
     gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer); 

     System.out.println("Triangle Vertice Count is "+verticeCount); 

     int x = vertices.length; 
     System.out.println("Rendering following number of vertices "+x); 

     int y = indices.length; 
     System.out.println("Rendering following number of indices "+y); 

     gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer); 

    } 
} 

而這裏就是我所說的抽籤方法的代碼:

import java.nio.FloatBuffer; 
import java.util.ArrayList; 
import java.util.Iterator; 

import javax.microedition.khronos.egl.EGLConfig; 
import javax.microedition.khronos.opengles.GL10; 

import android.content.Context; 
import android.opengl.GLSurfaceView; 
import android.opengl.GLU; 

class GLRenderer implements GLSurfaceView.Renderer { 

private static final String TAG = "GLRenderer"; 
private final Context context; 
private final GLCube cube = new GLCube(); 
private long startTime; 
private long fpsStartTime; 
private long numFrames; 
SceneObject drawObject; 
SceneObject object; 

//Used for object position and rotation. 
float zRotation; 
float xRotation; 
float yRotation; 

float kxRotation = 0.0f; 
float kyRotation = 0.0f; 

ArrayList<SceneObject> sceneObjects = new ArrayList<SceneObject>(); 

boolean SEE_THRU = false; 

GLRenderer(Context context) { 
    this.context = context; 
} 

public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    // Setup any OpenGL Options that are required. 
    gl.glEnable(GL10.GL_DEPTH_TEST); 
    gl.glDepthFunc(GL10.GL_LEQUAL); 
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
    gl.glEnable(GL10.GL_TEXTURE_2D); 

    if (SEE_THRU) { 
     gl.glDisable(GL10.GL_DEPTH_TEST); 
     gl.glEnable(GL10.GL_BLEND); 
     gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE); 
    } 

    //Optional - disable dither to boost peformance. 
    //gl.glDisable(GL10.GL_DITHER); //Dithering enabled by default. 

    //Turn on the lights. 
    float lightAmbient[] = new float[] { 0.2f, 0.2f, 0.2f, 1}; 
    float lightDiffuse[] = new float[] {1, 1, 1, 1}; 
    float[] lightPos = new float[] {1 ,1 ,1 , 1}; 
    gl.glEnable(GL10.GL_LIGHTING); 
    gl.glEnable(GL10.GL_LIGHT0); 
    gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbient, 0); 
    gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuse, 0); 
    gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPos, 0); 

    //Specify which materials we should use. 
    float matAmbient[] = new float[] {1, 1, 1, 1}; 
    float matDiffuse[] = new float[] {1, 1, 1, 1}; 
    gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, matAmbient, 0); 
    gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, matDiffuse, 0); 

    } 

public void onSurfaceChanged(GL10 gl, int width, int height) { 
    //Define the view frustrum 
    gl.glViewport(0, 0, width, height); 
    gl.glMatrixMode(GL10.GL_PROJECTION); 
    float ratio = (float)width/height; 
    gl.glLoadIdentity(); 
    //gl.glOrthof(0, 480f, 800f, 0, 0, 1); 
    GLU.gluPerspective(gl, 45.0f, ratio, 1.0f, 100f); 
} 

public void onDrawFrame (GL10 gl) { 

    //Defs for rotation of object. 
    float kzRotation = 0.0f; 
    kyRotation +=1.0f; 
    kxRotation =280.0f; 

    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

    SceneObject object = sceneObjects.get(13); //Get the object 

    //Position the model. 
    gl.glMatrixMode(GL10.GL_MODELVIEW); 
    gl.glLoadIdentity(); 
    gl.glTranslatef(0.0f, 0.0f, -30.0f); 
    gl.glScalef(0.0001f, 0.0001f, 0.0001f); 

      zRotation = kzRotation; 
      xRotation = kxRotation; 
      yRotation = kyRotation; 
      gl.glRotatef(yRotation, 0.0f, 1.0f, 0.0f); 
      gl.glRotatef(xRotation, 1.0f, 0.0f, 0.0f); 
      gl.glRotatef(zRotation, 0.0f, 0.0f, 1.0f); 


      object.draw(gl); 

      } 


     } 

}

的問題是,對象不是顯示它應該,但看起來扭曲和壓扁。任何人都可以發現什麼可能是錯的?

編輯 - 改變了onSufaceChanged方法按照以下添的回答,但是沒有任何改善。

我已經添加了一個圖像,如何在Android上渲染對象,並在iPhone上渲染正確的對象。最明顯的問題是,「腿」應該是直的,不能彎曲,整個物體應該更長。我確信上面代碼中的頂點和索引是正確的(它們與iPhone的完全相同)。

在情況下,它是與此相關的,我如何建立surfaceview /視圖:

public class SaxParserActivity extends Activity { 
/** Called when the activity is first created. */ 
ArrayList<SceneObject> sceneObjects = new ArrayList<SceneObject>(); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.main); 

    GLView view; 
    view = new GLView(this, sceneObjects); 
    //Pass down our sceneObjects into the view class. 
    //view.sceneObjects = sceneObjects; 
    setContentView(view); 
} 
} 

class GLView extends GLSurfaceView { 
private final GLRenderer renderer; 
ArrayList<SceneObject> sceneObjects = new ArrayList<SceneObject>(); 

GLView(Context context, ArrayList<SceneObject> sceneObjects) { 
    super (context); 
    //Uncomment this to turn on error-checking and logging. 
    //setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS); 
    renderer = new GLRenderer(context); 
    //Pass down our sceneObjects. 
    renderer.sceneObjects = sceneObjects; 

    setRenderer(renderer); 
} 

} 
+0

你可以添加參考圖像嗎? – Tim

+0

你好 - 完成 - 頂部部分是好的(但扭曲?),但是在前面的腿應該是直的,而不是彎曲。此外,物體在垂直平面上太短。 – GuybrushThreepwood

回答

0

我有點被你正在做的事情混爲一談。爲什麼在中將投影矩陣設置在onSurfaceChanged之後呢?

應設置投影在onSurfaceChanged像這樣:

public void onSurfaceChanged(GL10 gl, int width, int height) { 
    gl.glViewport(0, 0, width, height);  
    gl.glMatrixMode(GL10.GL_PROJECTION); 
    gl.glLoadIdentity(); //make sure to reset before glOrthof 
    gl.glOrthof(0, 320f, 480f, 0, 0, 1); 
} 

再變回模型視圖,並在不干擾投影矩陣。

您可能需要重新校準您的比例尺,並在之後進行翻譯。

+0

按照上述修改,但沒有改進 - 對象仍然扭曲。 – GuybrushThreepwood