OpenGL 点精灵可以在 Android 中使用吗?
我正在 Droid 版本 2.1-update1 上进行开发。我支持的 GL 扩展包括 GL_OES_point_sprite 和 GL_OES_point_size_array。
我无法获取要渲染的点精灵。下面的代码在 glTexEnvi 调用时从 GLWrapperBase 抛出 UnsupportedOperationException。如果我禁用纹理并注释掉所有 glTexEnvi,它会在 glPointSizePointerOES() 处进一步抛出相同的异常。
Android 是否正确支持点精灵?有人让他们工作了吗?或者我下面的代码有问题吗?
// Note that gl is cast to GL11
gl.glEnable(GL11.GL_TEXTURE_2D);
gl.glEnable(GL11.GL_BLEND);
gl.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
gl.glDepthMask(false);
gl.glEnable(GL11.GL_POINT_SPRITE_OES);
gl.glTexEnvi( GL11.GL_POINT_SPRITE_OES, GL11.GL_COORD_REPLACE_OES, GL11.GL_TRUE );
gl.glEnableClientState(GL11.GL_VERTEX_ARRAY);
gl.glVertexPointer(2, GL11.GL_SHORT, 0, .vertBuffer);
gl.glEnableClientState(GL11.GL_POINT_SIZE_ARRAY_OES);
gl.glPointSizePointerOES(GL11.GL_FLOAT, 0, pointSizeBuffer);
谢谢
I'm developing on a Droid, version 2.1-update1. My supported GL extensions include GL_OES_point_sprite and GL_OES_point_size_array.
I am unable to get point sprites to render. The code below throws UnsupportedOperationException from GLWrapperBase at the glTexEnvi call. If I disable textures and comment out the glTexEnvi all, it throws the same exception further down, at glPointSizePointerOES().
Are point sprites properly supported in Android? Has anyone gotten them working? Or is there an issue with my code below?
// Note that gl is cast to GL11
gl.glEnable(GL11.GL_TEXTURE_2D);
gl.glEnable(GL11.GL_BLEND);
gl.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
gl.glDepthMask(false);
gl.glEnable(GL11.GL_POINT_SPRITE_OES);
gl.glTexEnvi( GL11.GL_POINT_SPRITE_OES, GL11.GL_COORD_REPLACE_OES, GL11.GL_TRUE );
gl.glEnableClientState(GL11.GL_VERTEX_ARRAY);
gl.glVertexPointer(2, GL11.GL_SHORT, 0, .vertBuffer);
gl.glEnableClientState(GL11.GL_POINT_SIZE_ARRAY_OES);
gl.glPointSizePointerOES(GL11.GL_FLOAT, 0, pointSizeBuffer);
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我得到了这个工作,这是我的绘图函数
初始化所有内容
设置纹理环境以使用点精灵
设置指向数据的指针(第一个数组是 2d 布局 [x,y,x2,y2,...] 第二个是 1d [s1,s2,..])
绘制
禁用内容
在我的初始化程序中,我只启用了投影设置和 GL_BLEND 来进行混合。我认为如果你想给精灵上色,你需要 GL_COLOR_MATERIAL。
I got this working, here is my draw function
Initialize everything
Set the texture environment up to use point sprites
Set up pointers to the data (First array is 2d laid out [x,y,x2,y2,...] second is 1d [s1,s2,..])
Draw
Disable stuff
In my initializer I only have my projection setup and GL_BLEND enabled for blending. I think you would need GL_COLOR_MATERIAL if you wanted to color your sprite.
我得到了与 ES 1.1 和 ES 1.1 一起使用的点精灵。 2 在联系一上。我使用固定点大小,因此不必使用大小缓冲区,但您可以使用我的代码首先使其工作,然后添加大小缓冲区。
在我的绘制方法中:
I got the point sprites working with ES 1.1 & 2 on a nexus one. I use a fixed point size so I didn´t have to use a size buffer but you can use my code to first get it working and then add the size buffer.
In my draw method:
如果像我一样你正在使用 MatrixTrackingGL 你需要使用 glTexEnvf 而不是 glTexEnvi (f 不是 i 在最后),你需要进入 MatrixTrackingGL 并更改 glPointSizePointerOES:
我确信这是有充分理由的首先不受支持,但我不知道它,它适用于我运行 android 2.1 的 ZTE Blade
对于任何想知道的人,MatrixTrackerGL 来自 C:\Program Files\android-sdk-windows\samples\android-7\ ApiDemos\src\com\example\android\apis\graphics\spritetext
它在设置 GLSurface 视图时使用:
并且意味着您可以使用 GLU.gluUnProject 进行拾取!:
if like me you're using MatrixTrackingGL you need to use glTexEnvf rather than glTexEnvi (f not i at the end) and you need to go into MatrixTrackingGL and change glPointSizePointerOES:
I'm sure there is a good reason why it is unsupported in the first place but I don't know it and it works for me on a ZTE Blade running android 2.1
For anyone wondering, MatrixTrackerGL comes from C:\Program Files\android-sdk-windows\samples\android-7\ApiDemos\src\com\example\android\apis\graphics\spritetext
It is used when setting up your GLSurface View:
and means you can use GLU.gluUnProject to do picking!: