【问题标题】:how to implement panning in opengl program android如何在opengl程序android中实现平移
【发布时间】:2012-06-19 04:39:55
【问题描述】:

我在opengl es 中有一个程序,其中一个立方体在用户触摸时沿 X、Y、Z 轴旋转。

现在我想实现相同的平移功能(当用户用至少 2 个手指触摸立方体时——它将沿轴平移)...

请任何人建议我从哪里开始,我在谷歌上搜索了太多但找不到任何令人满意的例子。

我的代码类似于 API 演示应用程序中的代码,它默认安装在显示立方体的模拟器上。

【问题讨论】:

标签: android opengl-es-2.0


【解决方案1】:

在 3D 环境中,平移可以指代许多不同的事物,但通常您只是在四处移动相机。这只是您如何设置模型视图矩阵的问题;我建议使用某种“lookat”函数来计算它,然后简单地改变你的眼睛坐标。

为了实现最自然的平移,应通过将屏幕空间位移矢量乘以现有模型视图矩阵(w=0)来修改坐标,并将结果矢量添加到您的眼睛坐标。

【讨论】:

  • 嘿 thnks fr d 提示....尽管我已经在 android 和 ndk 中开发了 sum 应用程序,但在 android 中 opengl 的 ds 领域也是新的...你能帮我更多地了解 ds.. .关于代码...谢谢fr d建议:)
  • @Manroop 不幸的是,如果没有更多的上下文,我将无法继续。在 GLES 1 中提供一个可以使用 gluLookAt 的示例更简单一些,但在 ES2 中,您可以使用太多不同的方式进行矩阵管理。
  • 如果您使用的是 glTranslatef(),这意味着您使用的是 OpenGL ES 1,而不是 2——但是这个问题被标记为 ES2。由于累积的精度损失,不建议使用对 glTranslate、glRotate 等的重复调用(以及意味着您将所有状态保留在 GL 上下文中,如果您在其他地方需要它,则无法轻松/快速地重新创建它) -您可能应该使用 gluLookAt,因为您可以使用它。
  • glTranslatef() 不是 ES2 的一部分。 ES1 和 ES2 使用完全不同的矩阵操作模型 - ES1 使用矩阵堆栈(glMatrixModeglPushMatrixglPopMatrix 等),而 ES2 将它们作为绑定属性(glBindAttributeglVertexAttribPointer)。这是另一个严峻的测试:你在使用着色器吗?
  • 对,仅仅导入 ES2 API 并不意味着你真的在使用它。如果您确实需要这样做,我建议您阅读适用于 Android 的 OpenGL ES 2 教程。在此期间只使用 ES 1 并没有什么问题 - ES1 更易于使用,并免费为您提供一些东西(如相机、照明和矩阵操作),尽管它也受到更多限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2013-01-30
相关资源
最近更新 更多