2014-11-24 73 views
0

我是OpenGL的新手,我在2D中制作游戏,我希望相机能够跟随角色。如何在OpenGL中移动2D相机

我开始用gluLookAt(),但我看我可以只动矩阵glTranslatef()函数,它应该做的伎俩。

的问题是,相机仅移动第一次被创建,但如果我增加了X位置和Y位置它不工作。我做错了什么?我有不正确的概念?

我试图将其更改为GL_PROJECTION,GL_MODELVIEW,和GL_TEXTURE,

如果我做它GL_PROJECTION所有项目都消失了(由于这个问题答案的链接我明白,我不能把这种方式)

如果我在GL_TEXTURE上做的所有纹理开始滚动(但这不是我想要的

如果我在GL_MODELVIEW上做,只是没有发生所有项目都在同一个站点,但如果我退出gl.glMatrixMode (GL10.GL_MODELVIEW)line translatef它移动相机的第一个迭代,然后停止做它,因为l AST对象是GL10.GL_MODELVIEW

是在不同的矩阵状态开始? 这是如何似乎随着X = 0和Y的缩写值= 0 enter image description here

这是如何似乎随着X的缩写值= -2和Y = -2和消除gl.glMatrixMode(GL10.GL_MODELVIEW )(如果我不elimiate这条线,这似乎是第一个即使有值-2)

enter image description here

在两种情况下,相机犯规举动,仅仅停留在那个位置

我的渲​​染代码:

@Override 
public void onDrawFrame(GL10 gl) 
{ 
    loopStart = System.currentTimeMillis(); 
    try 
    { 
     if (loopRunTime < SEngine.GAME_THREAD_FPS_SLEEP) 
     { 
      Thread.sleep(SEngine.GAME_THREAD_FPS_SLEEP - loopRunTime); 
     } 
    } catch (InterruptedException e) 
    { 
    } 
    deltaTime = (float) ((System.currentTimeMillis() - aRestar)/1000f); 


    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
    gl.glClearColor((78.0f/255.0f), (192.0f/255.0f), (203.0f/255.0f), 0.0f); 

    gl.glMatrixMode(GL10.GL_MODELVIEW); 
    gl.glTranslatef(x, y, 0f); 

    perro.move(gl); 
    moversetas(gl); 
    palmera.draw(gl); 




    comprobacionesColision(); 
    actualizar(deltaTime); 

    x +=0.05f; 
    y +=0.05f; 

    loopEnd = System.currentTimeMillis(); 
    loopRunTime = ((loopEnd - loopStart)); 

} 
+0

我不会使用的glTranslatef类型的功能,而使用着色器 – 2014-11-24 12:49:07

+1

只是好奇..为什么不建议你学会了opengl es 2.0吗? – FaNaT 2014-11-24 16:23:22

+0

我没有找到任何学习openGL es 2.0的好的指南,如果你知道任何人,并可以给我一个链接,那将是太棒了! – D4rWiNS 2014-11-25 00:04:58

回答

1

好了很多的尝试后,我成功了,我史迪威不知道这是否是实现这一目标的最佳途径,如果有人可以解释为什么这是一个解决方案,将是不错的!

我只是改变了矩阵模式GL_PROJECTION和翻译,而不是它

gl.glMatrixMode(GL10.GL_PROJECTION); 
    gl.glLoadIdentity(); 
    gl.glOrthof(0f, 8f, 0f, 4f, -1f, 1f); 
    gl.glTranslatef(x, y, 0f); 

gl.glMatrixMode(GL10.GL_MODELVIEW); 
gl.glTranslatef(x, y, 0f); 
0

矩阵是棘手的工作。你有什么关于如何与一个合作的知识? 另外,0.05f的增量非常小,你尝试过更大的步骤吗?其余的代码对我来说似乎很好。 此外,你在GL_PROJECTION或GL_MODELVIEW?看看这个:https://gamedev.stackexchange.com/questions/56512/how-do-i-position-a-2d-camera-in-opengl只需看看底部的答案。

+1

我有这么基本的知识,我试图将其更改为GL_PROJECTION,GL_MODELVIEW,和GL_TEXTURE, 的问题是不断变化的矩阵模型 感谢您的链接的结果,它是如此有用 – D4rWiNS 2014-11-24 12:52:28

+1

更新它也通常是一个首先绘制/激活的特定顺序;其中一个关于游戏编程的棘手问题:] 另外,您的相机的旋转矩阵设置是否正确?你确定它正在看角色吗? – Zubaja 2014-11-24 13:04:35

+0

你的意思是你的相机的旋转矩阵设置?,实际上是不看字符,只是试图移动相机(但它不动),顺序应该罚款,因为第一次迭代工作 – D4rWiNS 2014-11-24 13:11:05