0

所以首先是 3D:我的立方体有这些顶点

    float[] vertices = { -0.5f, -0.5f, 0.5f, 0, 1, 0, 0, 1,
                2.5f, -0.5f, 0.5f, 1, 1, 0, 0, 1,
                2.5f,  0.5f, 0.5f, 1, 0, 0, 0, 1,
               -0.5f,  0.5f, 0.5f, 0, 0, 0, 0, 1,

                2.5f, -0.5f,  0.5f, 0, 1, 1, 0, 0,
                2.5f, -0.5f, -0.5f, 1, 1, 1, 0, 0,
                2.5f,  0.5f, -0.5f, 1, 0, 1, 0, 0,
                2.5f,  0.5f,  0.5f, 0, 0, 1, 0, 0,

                2.5f, -0.5f, -0.5f, 0, 1, 0, 0, -1,
               -0.5f, -0.5f, -0.5f, 1, 1, 0, 0, -1,
               -0.5f,  0.5f, -0.5f, 1, 0, 0, 0, -1,
                2.5f,  0.5f, -0.5f, 0, 0, 0, 0, -1,

               -0.5f, -0.5f, -0.5f, 0, 1, -1, 0, 0,
               -0.5f, -0.5f,  0.5f, 1, 1, -1, 0, 0,
               -0.5f,  0.5f,  0.5f, 1, 0, -1, 0, 0,
               -0.5f,  0.5f, -0.5f, 0, 0, -1, 0, 0,

               -0.5f,  0.5f,  0.5f, 0, 1, 0, 1, 0,
                2.5f,  0.5f,  0.5f, 1, 1, 0, 1, 0,
                2.5f,  0.5f, -0.5f, 1, 0, 0, 1, 0,
               -0.5f,  0.5f, -0.5f, 0, 0, 0, 1, 0,

               -0.5f, -0.5f, -0.5f, 0, 1, 0, -1, 0,
                2.5f, -0.5f, -0.5f, 1, 1, 0, -1, 0,
                2.5f, -0.5f,  0.5f, 1, 0, 0, -1, 0,
               -0.5f, -0.5f,  0.5f, 0, 0, 0, -1, 0 };

        short[] indices = { 0, 1, 2, 2, 3, 0,
                          4, 5, 6, 6, 7, 4,
                          8, 9, 10, 10, 11, 8,
                          12, 13, 14, 14, 15, 12,
                          16, 17, 18, 18, 19, 16,
                          20, 21, 22, 22, 23, 20,
                          24, 25, 26, 26, 27, 24 };

所以每个都是 3 个单位宽(x 坐标),从 -0.5 到 2.5。

稍后当我要画这个时,我有:

GL10 gl = glGraphics.getGL();
        gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glViewport(0, 0, glGraphics.getWidth(), glGraphics.getHeight());

        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, 67, glGraphics.getWidth() / (float) glGraphics.getHeight(), 0.1f, 10f);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        GLU.gluLookAt(gl, 0, 1, 3, 0, 0, 0, 0, 1, 0);

这导致我的正方形占据了我估计水平屏幕的 40-45%。我不知道它是如何决定在横向模式下 3 个单位等于我的银河 s3 的 40-45%。这让我大吃一惊,这是我似乎无法理解的东西。

另外,当我在 2D 中绘制时,这是否同样有效?还是计算方式不同?

谢谢!

编辑:所以要在 2D 中对此进行扩展,这就是我正在做的事情:

bobTexture = new Texture((GLGame)game, "bobrgb888.png");

        bobModel = new Vertices(glGraphics, 4, 12, false, true);
        bobModel.setVertices(new float[] { -16, -16, 0, 1,
                                            16, -16, 1, 1,
                                            16, 16, 1, 0,
                                            -16, 16, 0, 0}, 0, 16);
        bobModel.setIndices(new short[] {0, 1, 2, 2, 3, 0}, 0, 6);

然后:

GL10 gl = glGraphics.getGL();
        gl.glClearColor(1,0,0,1);
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glOrthof(0,  320, 0,  480, 1,  -1);

        gl.glEnable(GL10.GL_TEXTURE_2D);
        bobTexture.bind();

        gl.glMatrixMode(GL10.GL_MODELVIEW);
        for(int i = 0; i < NUM_BOBS; ++i) { 
            gl.glLoadIdentity();
            gl.glTranslatef(bobs[i].x, bobs[i].y, 0);
            bobModel.draw(GL10.GL_TRIANGLES, 0, 6);
        }

bobs[i].x 和 bob[i].y 介于 0 和 480 以及 0 和 320 之间。

现在,当我这样做时,我的纹理模型最终是 32px x 32px。如何?

4

1 回答 1

0

查看 gluLookAt 的文档。稍微移动眼睛(前三个参数)。眼睛离中心越远,它就会显得越小。

于 2013-10-15T22:09:42.810 回答