OpenGL ES 1.0 GLU Ortho Projection 不渲染基本三角形
OpenGL ES 1.0 GLU Ortho Projection not rendering basic triangle
我正在尝试使用 android 的 OpenGL 1.0 ES 在我的 3d 世界之上创建一个 2d 层。
我有一个三角形,当我使用 3d 透视时可以很好地渲染,但当我尝试使用 2d 正射投影时却无法渲染。下面的代码正确地呈现了三角形。
public void prepareLayerPerspective(GL10 gl)
{
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl,45, (float)(1080/1920f),0.1f, 700f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
但是,当我尝试将其设置为像这样的 Orth 投影时
public void prepareLayerPerspective(GL10 gl)
{
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl,0f,500f,0f,700f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
没有三角形。
下面是用于实际绘制三角形的代码:(但请记住,使用透视平截头体集可以正确渲染三角形)
public void drawFrame(GL10 gl)
{
super.drawFrame(gl);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glColor4f(1.0f, 0.0f, 0.0f, 0.0f);
gl.glVertexPointer(3, GL10.GL_FLOAT,0,triangleVB);
gl.glDrawArrays(GL10.GL_TRIANGLES,0,3);
}
这是三角形的构造函数 class。 (比例 = 1.0f)
public Triangle(float scale)
{
float triangleCoords[] = {
-1.0f*scale, -1.0f*scale, 0,
0.0f, 1.0f*scale, 0,
1.0f*scale, -1.0f*scale, 0
};
ByteBuffer vbb = ByteBuffer.allocateDirect(triangleCoords.length*4);
vbb.order(ByteOrder.nativeOrder());
triangleVB = vbb.asFloatBuffer();
triangleVB.put(triangleCoords);
triangleVB.position(0);
rotation = 0.0f;
}
正如我在评论中指出的那样,指定的截锥体太大了。
如果在 (700,0,0) 处有一个顶点与您指定的平截头体,该顶点将位于显示的左下角。
我正在尝试使用 android 的 OpenGL 1.0 ES 在我的 3d 世界之上创建一个 2d 层。
我有一个三角形,当我使用 3d 透视时可以很好地渲染,但当我尝试使用 2d 正射投影时却无法渲染。下面的代码正确地呈现了三角形。
public void prepareLayerPerspective(GL10 gl)
{
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl,45, (float)(1080/1920f),0.1f, 700f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
但是,当我尝试将其设置为像这样的 Orth 投影时
public void prepareLayerPerspective(GL10 gl)
{
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl,0f,500f,0f,700f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
没有三角形。
下面是用于实际绘制三角形的代码:(但请记住,使用透视平截头体集可以正确渲染三角形)
public void drawFrame(GL10 gl)
{
super.drawFrame(gl);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glColor4f(1.0f, 0.0f, 0.0f, 0.0f);
gl.glVertexPointer(3, GL10.GL_FLOAT,0,triangleVB);
gl.glDrawArrays(GL10.GL_TRIANGLES,0,3);
}
这是三角形的构造函数 class。 (比例 = 1.0f)
public Triangle(float scale)
{
float triangleCoords[] = {
-1.0f*scale, -1.0f*scale, 0,
0.0f, 1.0f*scale, 0,
1.0f*scale, -1.0f*scale, 0
};
ByteBuffer vbb = ByteBuffer.allocateDirect(triangleCoords.length*4);
vbb.order(ByteOrder.nativeOrder());
triangleVB = vbb.asFloatBuffer();
triangleVB.put(triangleCoords);
triangleVB.position(0);
rotation = 0.0f;
}
正如我在评论中指出的那样,指定的截锥体太大了。
如果在 (700,0,0) 处有一个顶点与您指定的平截头体,该顶点将位于显示的左下角。