我不明白我们如何使用opengl定位对象。所有转换值在“-1.0f” - “1.0f”之间。我使用surfaceview制作了一些游戏。我可以简单地改变和定义对象的x和y位置。例;如果android屏幕宽度是480px,那么我的box max x值是480.但是我怎么能在opengl上做到这一点?如何制定限制以及如何使用像素或dpi分辨率?我怎样才能改变我的手指触摸位置的盒子位置?Android OpenGL es转换像素
回答
首先,glTranslate和大多数(如果不是全部)转换值不限于“-1.0”到“1.0”之间的值。能够将对象10px向左或向右移动将需要正确设置您的转换矩阵。下面是OpenGL如何操纵你给它的顶点的顺序。
[(4×4)投影] [(4×4)查看] [(4×4)产品型号] * [(4X1)的顶点]
你可能会想使用glOrtho(0.0,宽0.0,高度,-1.0,1.0)设置您的投影矩阵。您可以将View矩阵作为单位矩阵。最后,您可以使用模型矩阵以像素为单位平移,旋转和缩放对象。现在,Model矩阵上的glTranslatef(10.0,0.0,0.0)应该在x方向上移动对象10px。或者,您可以将模型矩阵作为单位矩阵,并让您的顶点表示像素坐标。
你可以看看这个简报,在幻灯片4上,你可以看到一个很好的图形,详细描述了你的顶点发生了什么。 https://wiki.engr.illinois.edu/download/attachments/195761441/OpenGL.pptx?version=1&modificationDate=1326820017000
要更改OpenGL中项目的位置,您使用的是glTranslate,并且您可以在绘制时设置所用矩形的大小,但据我所知,无法限制一个项目的大小对象,但是你可以在绘制矩形/框之前进行一些检查,以确定用户想要调整大小的大小是否大于Android设备屏幕,如果是,则不做任何事情(或者可以显示吐司告诉用户它无法获得更大)
而且这可能会帮助你,但relation between pixels and gl.gltranslatef(floatx,y,z)?允许我引用了一点吧:
由于例如,当您执行glTranslate时,特定对象将移动的距离(以像素为单位)将取决于观看者距离 的距离。距离观看者越远,特定横向或上/下转换的像素越少。
yes,glTranslate更改位置,但此方法值介于“1.0”和“-1.0”之间。我怎样才能移动到10px的权利?或移动到我的触摸位置的对象? – musa 2012-03-30 22:25:23
- 1. OpenGL ES交换像素
- 2. OpenGL ES Android矩阵转换
- 3. Android OpenGL ES读取纹理像素
- 4. Android的OpenGL ES的像素化
- 5. OpenGL ES:禁用转换?
- 6. Android OpenGL ES扭曲图像
- 7. Android OpenGL ES - 来自glReadPixels的非常奇怪的像素颜色 - 切换图像?
- 8. OpenGl ES,android FPS
- 9. iOS OpenGL ES与Android OpenGL ES兼容?
- 10. Opengl es 1.1高转换计数
- 11. OpenGL ES坐标屏幕像素
- 12. OpenGL Es 2.0 GLKit绘制像素
- 13. OpenGL ES - 纹理底部的像素'Interference'
- 14. OpenGL ES像素艺术 - 缩放
- 15. iPhone OpenGL ES 2.0 - 像素完美纹理
- 16. 旋转在OpenGL ES
- 17. 图像旋转使用的OpenGL ES
- 18. glTexImage2D将alpha转换为rgba openGL ES
- 19. 转换代码的OpenGL ES 2
- 20. OpenGL ES 2.0顶点转换算法
- 21. 将glReadBuffer()/ glDrawBuffer()调用转换为OpenGL ES
- 22. 将FFmpeg帧转换为OpenGL ES纹理
- 23. OpenGL ES 1.1:未能转换为VBO
- 24. OpenGL ES 2.0的转换INT []以GLubyte []
- 25. 如何在OpenGL ES 2.0的在像素级的旋转质地
- 26. 旋转Android OpenGL ES 2.0视口
- 27. Android OpenGL ES 2.0 - 旋转到位
- 28. Android OpenGL ES:针对任意轴旋转?
- 29. Android OpenGL ES 2纹理象限旋转
- 30. Android的OpenGL ES图像过滤器
'glOrtho(double,int,double,int,double,double)方法未定义为GL10类型更改'glOrthof'或'glOrthox'? – musa 2012-04-01 16:31:50
你必须使用glOrthof或glOrthox。我只用glOrtho作为推广我的答案的一种方式。 – MyReliableSchreck 2012-04-02 03:08:36