Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
Opengl es OpenGL ES 1-如何知道我的正方形/立方体在2D和3D屏幕上会占用多少像素_Opengl Es_Coordinates - Fatal编程技术网

Opengl es OpenGL ES 1-如何知道我的正方形/立方体在2D和3D屏幕上会占用多少像素

Opengl es OpenGL ES 1-如何知道我的正方形/立方体在2D和3D屏幕上会占用多少像素,opengl-es,coordinates,Opengl Es,Coordinates,首先在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

首先在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);
        }
GL10 gl=glGraphics.getGL();
gl.glClearColor(1,0,0,1);
gl.glClear(GL10.gl\u颜色\u缓冲\u位);
gl.glMatrixMode(GL10.gl_投影);
gl.glLoadIdentity();
gl.glOrthof(0320,0480,1,-1);
glEnable(GL10.Glu纹理2D);
bobTexture.bind();
gl.glMatrixMode(GL10.gl_MODELVIEW);
对于(int i=0;i
bob[i].x和bob[i].y介于0和480之间,介于0和320之间


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

看看这些文档。稍微移动眼睛(前三个参数)。眼睛离中心越远,它看起来就越小。

是的,自从我问这个问题以来,我一直在胡闹,我意识到这在3D中不是一个好问题,因为这取决于它与相机的关系。然而,我认为这个问题仍然存在。基本上,我想在2D中做的是使用三角形/索引创建一个网格类型的结构。我想要设置行数和列数,但取决于屏幕的水平和垂直大小,每列/行的宽度将不同。那么,我如何在模型空间2D中定义,并知道我将在世界空间的屏幕上看到什么呢?