我正在研究Android的Rajawali框架。 我尝试了他们的第一个基本教程,如下所示: public class RRenderer extends RajawaliRenderer { private DirectionalLight mLight; private BaseObject3D mSphere; public RRenderer(Context context) { super(context); setFrameRate(60); } protected void initScene() { mLight = new DirectionalLight(1f, 0.2f, 1.0f); // set the direction mLight.setColor(1.0f, 1.0f, 1.0f); mLight.setPower(2); Bitmap bg = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.earthtruecolor_nasa_big); DiffuseMaterial material = new DiffuseMaterial(); mSphere = new Sphere(1, 18, 18); […]
我无法在游戏暂停状态下实现游戏暂停模糊屏幕渲染。 当用户暂停屏幕时,我需要拍摄当前屏幕的图片或纹理,即游戏运行状态。 也许将它存储到内存中,模糊然后将其渲染到屏幕以实现漂亮的模糊,高斯模糊效果就像他们在愤怒的小鸟等流行游戏中一样。 我尝试使用截图实现,但屏幕截图的过程使游戏冻结了几秒钟,这是不好的。 这是我的渲染代码的一部分 private void updatePlayerForUserInput(float delta) { if (Gdx.input.isKeyPressed(Keys.P) || pause) { ScreenShotSaver.saveScreenShot(); state = State.GAME_PAUSED; if(!DEBUG_MODE) { toggleGestureProcessor(false); setBackgroundTexture(new TextureRegion(applyBlurEffect(Gdx.files.external(“madboy/screenshot.png”)))); gameScreenGamePauseMenu.sendInMenu(); } } } 有人可以像这样帮助实现屏幕 这是我想要的效果的一个例子1: 在这里输入链接描述这是另一个,类似的东西虽然2: 在这里输入链接描述 这是我的更新逻辑的一部分,具体取决于游戏状态 private void render(float delta) { switch (state) { case GAME_READY: renderReady(); break; case GAME_RUNNING: renderRunning(delta); break; case GAME_PAUSED: renderPaused(); break; case GAME_LEVEL_END: […]
语境: 我使用gl.glGenTextures将2个纹理加载到大小为2的int []中,然后将纹理绑定到int []的每个槽。 (这很好用,我可以将每个纹理绘制到我准备的“纹理方块”) 现在,我的实际关注点: 运行gl.glDeleteTextures(2,包含2个纹理指针的int [],0)是否清除了生成到我的int []中的2个纹理所使用的内存? 或者这只是释放“纹理名称”?
由于性能问题,我试图将基于Android Canvas的游戏转换为Libgdx。 目前,我必须生成拼图拼图(动态)时遇到问题。 我做了什么:我使用了android位图操作(Path和PorterDuff)并生成了拼图,然后将其输入到AndroidLauncher中的Libgdx Game对象。 问题1 :有没有更好的方法将位图转换为libgdx核心项目中的拼图块。 (见下文) 问题2 :如何创建一个区域来表示拼图。 (基于边界框或宽度/高度的解决方案不适合),以便用户可以在他/她仅触摸该纹理区域时拖动该部分。 问题3 :检测相邻拼图块何时被用户移近彼此的最佳方法。
在构造一个椭圆的向量时,我在LogCat中收到此警告消息: W/OpenGLRenderer: Points are too far apart 4.000000 我很想知道这究竟是什么意思。 我注意到在AOSP中有一个drawArc方法会抛出这个警告,但是,它没有清楚地表示究竟是什么意思。 我需要调整矢量绘图吗? 我是否会看到这些警告中的任何未来错误或错误? 如何让这些警告消退? AOSP参考文件
使用OpenGL ES我正在渲染一个简单的立方体类,它将它绘制在屏幕的中心。 但是,我希望能够在屏幕上以随机位置绘制多个这样的立方体,但不知道如何操作。 这是我的自定义表面视图,它将多维数据集呈现为私有类。 我没有包含我的主ActivityManager,因为它不关心。 public class TouchSurfaceView extends GLSurfaceView { private final float TRACKBALL_SCALE_FACTOR=52.0f; private final float TOUCH_SCALE_FACTOR=100.0f/320; private MyGLRenderer mRenderer; private float mPreviousX; private float mPreviousY; public TouchSurfaceView(Context context) { super(context); // TODO Auto-generated constructor stub mRenderer=new MyGLRenderer(); setRenderer(mRenderer); setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); } private class MyGLRenderer implements GLSurfaceView.Renderer{ private MyGLCube mCube; public float mAngleX; public […]
在opengl中,在绘制顶点数组后修改顶点数组是不好的做法还是不建议?
这是我之前的问题和post的延续,见到这里 。 感谢我在那里收到的答案,我觉得我能够更接近我的目标,以及进一步学习OpenGL,但在弄清楚使用模板缓冲区的基础知识后不久,我遇到了一个问题。 似乎当我向模板缓冲区绘制一个精灵时,它会绘制整个方形区域,而不是像我一直无知的那样完全透明的像素。 我模糊地理解为什么会这样,但我不确定解决方案在哪里。 我已经对模板本身进行了相当多的实验,并且我修改了spritebatch用来丢弃低alpha片段的着色器,但我似乎没有看到更大的图片。 作为问题的一个直观例子,我将继续我在上一个问题中使用的例子。 现在,试图在彼此之间画两个圆圈(所以它们完美融合,没有重叠),我得到了这个: 所以,基本上,我是否有办法在复杂的形状上使用LibGDX的Sprite和SpriteBatchfunction来使用模板缓冲区(圆圈仅用作示例),或者我是否需要寻找替代路线? 编辑:: Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); Gdx.gl.glEnable(GL20.GL_BLEND); Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); Gdx.gl.glEnable(GL20.GL_DEPTH_TEST); Gdx.gl.glDepthMask(true); batch.begin(); sprite.draw(batch); sprite2.draw(batch); batch.end(); Gdx.gl.glDisable(GL20.GL_DEPTH_TEST);
我已经查看了解决方案并且没有真正找到解决方案。 我收到此错误,因为它似乎执行发生在gl线程之外。 但是我不知道如何解决这个问题。 代码如下: public shape() { super(); vertexShader = Shader.loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode); //<============ fragmentShader = Shader.loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode); ByteBuffer buffer = ByteBuffer.allocateDirect(getCoordinates().length * 4); buffer.order(ByteOrder.nativeOrder()); vertexBuffer = buffer.asFloatBuffer(); vertexBuffer.put(getCoordinates()); vertexBuffer.position(0); ByteBuffer drawListBuffer = ByteBuffer.allocateDirect(getOrderOfDraw().length * 2); drawListBuffer.order(ByteOrder.nativeOrder()); listBuffer = drawListBuffer.asShortBuffer(); listBuffer.put(getOrderOfDraw()); listBuffer.position(0); mProgram = GLES20.glCreateProgram(); // create empty OpenGL Program GLES20.glAttachShader(mProgram, vertexShader); // add the vertex […]
我正试图在Android上创建一个360video领域 (就像纸板一样)。 我通过在OpenGL ES1.0中渲染一个球体而不是将纹理附加到它来拍摄照片。 之后我可以使用传感器值来旋转球体。 但是,我无法弄清楚如何将图片更改为video 。 我已经尝试使用texSubImage2D()逐帧渲染,但它是超级慢。 我的video可能大约是4k密度,因为我需要一个好的质量,即使它只显示了一小部分。 我已经阅读了一些关于应该如何完成的理论知识(即帧缓冲区,外部纹理,同步等),但我找不到这些东西的任何示例 ,因此一些代码将非常受欢迎 … 这是我如何渲染球体,绘制它并附加纹理(即我的球体类)… import rapid.decoder.BitmapDecoder; public class Sphere { /** Buffer holding the vertices. */ private final List mVertexBuffer = new ArrayList(); /** The vertices for the sphere. */ private final List mVertices = new ArrayList(); /** Buffer holding the texture coordinates. */ private final […]