Opengl es OpenGL ES 1-如何知道我的正方形/立方体在2D和3D屏幕上会占用多少像素
首先在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
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中定义,并知道我将在世界空间的屏幕上看到什么呢?