gpt4 book ai didi

Android OpenGLES 设备问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:01 24 4
gpt4 key购买 nike

我最近开始使用 Android 学习 OpenGLES。我正在使用带有渲染功能的 GLWallpaperService 类创建动态壁纸。

Android 模拟器的问题是能够显示动画,但在使用 Android 设备 (HTC Incredible S) 进行测试时,FPS 保持在 45-50 左右,但屏幕仍然空白。

这是代码 fragment !!

onDrawFrame

public void onDrawFrame(GL10 gl) {
float currLevel = curve[(MAX_CURVE_POINT_NO + curveStart - 1)
% MAX_CURVE_POINT_NO];
if (!isCreated) {
isCreated = !isCreated;
_spriteVerices = BufferFactory.createFloatBuffer(8);
spriteTextCordinates = BufferFactory.createShortBuffer(8);
}
_spriteVerices.put(spriteVerices);
spriteTextCordinates.put(spriteTextCordinatesArray);
_spriteVerices.position(0);
spriteTextCordinates.position(0);

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

gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();

gl.glScalef(0.8f, 0.8f, 1.0f);
gl.glTranslatef(-0.2f, 0, 0);

gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

gl.glEnable(GL10.GL_TEXTURE_2D);

gl.glVertexPointer(2, GL10.GL_FLOAT, 0, _spriteVerices);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glTexCoordPointer(2, GL10.GL_SHORT, 0, spriteTextCordinates);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

gl.glPushMatrix();
gl.glTranslatef(1.0f, currLevel, -0.01f);
gl.glColor4f(0.0f, 0.5f, 1.0f, 1.0f);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
gl.glPopMatrix();

curve[curveStart] = ekgMap[curveStart]; // ((rand()%32768)/32768.0)*0.4-0.2;
curveStart = (curveStart + 1) % MAX_CURVE_POINT_NO;
}

onSurfaceChanged

public void onSurfaceChanged(GL10 gl, int width, int height) {

gl.glViewport(0, 0, width, height);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 60f, (float) width / (float) height, 1f, 100f);

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glTranslatef(0, 0, -5);
gl.glRotatef(30f, 1, 0, 0);

gl.glEnable(GL10.GL_LIGHTING);
gl.glEnable(GL10.GL_RESCALE_NORMAL);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);

// Set the color of light bouncing off of surfaces to respect the
// surface color
gl.glEnable(GL10.GL_COLOR_MATERIAL);

setupLightSources(gl);

// Turn on a global ambient light. The "Cosmic Background Radiation", if
// you will.
float[] ambientLightRGB = { 0.3f, 0.3f, 0.3f, 1.0f };
gl.glLightModelfv(GL10.GL_LIGHT_MODEL_AMBIENT, ambientLightRGB, 0);
}

onSurfaceCreated

public void onSurfaceCreated(GL10 gl, EGLConfig config) {

this.loadTexture(gl, mContext, R.drawable.dot);

gl.glClearDepthf(1f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);

// Turn on culling, so OpenGL only draws one side of the primitives
gl.glEnable(GL10.GL_CULL_FACE);
gl.glFrontFace(GL10.GL_CCW);
gl.glCullFace(GL10.GL_BACK);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_BLEND);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_LINE_SMOOTH);
gl.glEnable(GL10.GL_POINT_SMOOTH);
}

谢谢,

最佳答案

如果您确定您正确设置了 open gl,那么通常情况下问题不在于您在何处绘图。您可能会超出 View 范围。在翻译等方面要非常小心。

你可能还需要翻转你的多边形,我知道我之前遇到过这个问题,因为你的画是背对着你的。

当我这样做的时候,我的画看起来和这个非常相似

*  This is where you draw the screen, called every auto onDraw Loop pass
* ************************************************************************/
//Log.d("Game", "Render");
gl.glViewport(0, 0, Screen.SCREEN_WIDTH, Screen.SCREEN_HEIGHT);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, Screen.WIDTH_SCALE, 0, Screen.HEIGHT_SCALE, 1, -1);

//gl.gltranslatef(x,y,z) will translate everything drawn here after by that amount, effectively scrolling the view.

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


gl.glEnable(GL10.GL_TEXTURE_2D);
MeshRect mRect; // this holds all of our rectangles

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
/***************** so this is how it goes for rendering any object ****************************************************
ball.Update(deltaTime); //first update the object
gl.glPushMatrix();
gl.glLoadIdentity();
gl.glTranslate(x,y,z);
texture.bind(gl, Texture.TEXTURE_BALL2); //then bind the texture we would like to use
mRect = new MeshRect(ball.getMyRect()); //then create the rectangle at (0,0,0)
mRect.Draw(GL10.GL_TRIANGLES, gl); //Finally tell that rectangle to draw
gl.glPopMatrix();
***********************************************************************************************************************

当然这是正射的,你的看起来是 3d 的,但基础应该差不多。

关于Android OpenGLES 设备问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13656653/

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