gpt4 book ai didi

android - 在 GLSurfaceView 上绘制 2D

转载 作者:行者123 更新时间:2023-11-29 01:59:10 24 4
gpt4 key购买 nike

我正在尝试在 2D 模式下的 GLSurfaceView 上绘制一个 2D 正方形。我可以在 3D 模式下绘制对象并测试了正方形在 3D 空间中。然后我尝试为二维绘图配置矩阵,当我尝试绘制我的对象时,什么也没有出现。

我的 GLSurfaceView 实例实现了 GLSurfaceView.Renderer。

我将设置分解为两个函数:

private void prepare3Ddrawing(GL10 gl)
{
gl.glLoadIdentity();
gl.glViewport(0, 0, getWidth(), getHeight());
gl.glDisable(GL10.GL_DITHER);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45.0f, (float)getWidth()/(float)getHeight(),0.1f,100.0f);
}
private void prepare2Ddrawing(GL10 gl)
{
gl.glDisable(GL10.GL_CULL_FACE);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl,0,getWidth(), 0, getHeight());
gl.glScalef(1, -1, 1);
gl.glTranslatef(0, -getHeight(), 0);
gl.glMatrixMode(GL10.GL_MODELVIEW);
}

这是我的绘制方法...

public void onDrawFrame(GL10 gl)
{
gl.glClear(GL10.GL_DEPTH_BUFFER_BIT|GL10.GL_COLOR_BUFFER_BIT);
prepare3Ddrawing(gl);

camera.draw(gl);
go2d.draw(gl);

prepare2Ddrawing(gl);
go2d.draw(gl);

}

最后,我的 go2d 对象是我创建的名为 GameObject2d 的对象的一个​​实例。它的绘制方法看起来像这样......

@Override
public void draw(GL10 gl)
{
super.draw(gl);

gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnable(GL10.GL_ALPHA_TEST);
gl.glAlphaFunc(GL10.GL_GREATER, 0.0f);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2,GL10.GL_FLOAT,0,textureBuffer);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);

gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_BLEND);


gl.glFrontFace(GL10.GL_CW);
//gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

gl.glDrawElements(GL10.GL_TRIANGLES, 6, GL10.GL_UNSIGNED_SHORT, indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);
gl.glDisable(GL10.GL_ALPHA_TEST);
gl.glDisable(GL10.GL_TEXTURE_2D);
}

有人有什么想法吗?同样,我仍然能够看到 go2D 对象的 3D 渲染版本,但看不到 2D 版本。

谢谢。

最佳答案

由于您没有提供任何数据,我只能提出两种调试问题的方法。

第 1 步:尝试将 2d - 透视矩阵和模型 View 矩阵强制为单位矩阵。然后,如果您强制将 Square 数据顶点置于裁剪空间内(例如 x,y = +-1 or x,y= +-0.75, z=0, 你应该会看到一个正方形出现在屏幕上。

第 2 步:既然数据模型是正确的,请检查您的模型 View 和透视矩阵的作用:将每个方形顶点 (x,y,z, w=1) 与 ModelView Matrix * CameraMatrix * PerspectiveMatrix 相乘。你得到了什么? x,y,z 是否在 |w| 之外? ?

关于android - 在 GLSurfaceView 上绘制 2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com