Android OpenGL之生成FloatBuffer

public FloatBuffer getFloatBuffer(float[] arrs) {
FloatBuffer fbResult = null;

ByteBuffer vbb = ByteBuffer.allocateDirect(arrs.length * 4);
vbb.order(ByteOrder.nativeOrder());// 设置字节顺序
fbResult = vbb.asFloatBuffer();// 转换为Float型缓冲
fbResult.put(arrs);// 向缓冲区中放入顶点坐标数据
fbResult.position(0);// 设置缓冲区起始位置

return fbResult;
}
好的,这里是一段简单的 Android OpenGL 代码,可以在 Android Studio 中运行: ```java public class MyGLRenderer implements GLSurfaceView.Renderer { private Triangle triangle; @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 设置 OpenGL 状态 gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 初始化三角形对象 triangle = new Triangle(); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { // 设置视口大小 gl.glViewport(0, 0, width, height); } @Override public void onDrawFrame(GL10 gl) { // 清空颜色缓冲区 gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // 绘制三角形 triangle.draw(gl); } } public class Triangle { private FloatBuffer vertexBuffer; // 三角形的顶点坐标 private float[] vertices = { -1.0f, -1.0f, 0.0f, // 左下角 1.0f, -1.0f, 0.0f, // 右下角 0.0f, 1.0f, 0.0f // 顶部 }; public Triangle() { // 初始化顶点缓冲区 ByteBuffer bb = ByteBuffer.allocateDirect(vertices.length * 4); bb.order(ByteOrder.nativeOrder()); vertexBuffer = bb.asFloatBuffer(); vertexBuffer.put(vertices); vertexBuffer.position(0); } public void draw(GL10 gl) { // 启用顶点数组 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); // 绘制三角形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, vertices.length / 3); // 关闭顶点数组 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } } ``` 这段代码定义了一个 MyGLRenderer 类,实现了 GLSurfaceView.Renderer 接口,用于管理 OpenGL 渲染。在 onSurfaceCreated 方法中,我们设置了 OpenGL 的状态,包括背景颜色。然后,我们创建了一个 Triangle 对象,用于绘制三角形。 在 onSurfaceChanged 方法中,我们设置了视口大小。 在 onDrawFrame 方法中,我们清空了颜色缓冲区,并绘制了三角形。 Triangle 类定义了一个三角形对象,其中包含了三角形的顶点坐标。在构造方法中,我们初始化了顶点缓冲区。在 draw 方法中,我们启用了顶点数组,并绘制了三角形。最后,我们关闭了顶点数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值