效果图:
直接上代码
MainActivity.java的代码
package com.zzu.shiyan3;
import androidx.appcompat.app.AppCompatActivity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//定义GLSurfaceView,绘制的三棱锥在里边显示
GLSurfaceView gview = new GLSurfaceView(this);
//自定义的的Render类实现了GLSurfaceView.Renderer接口
MyRender render = new MyRender(this);
gview.setRenderer(render);
setContentView(gview);
}
}
自定义类MyRender.java的代码:
package com.zzu.shiyan3;
import java.util.ArrayList;
import java.nio.FloatBuffer;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLSurfaceView;
import android.opengl.GLUtils;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import java.util.List;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
public class MyRender implements GLSurfaceView.Renderer {
float rotate = 0;//旋转角度
//定义三棱锥4个面,每个顶点重复设置3次,表示同一个顶点的每个下标只能在表示一个面,这样定义是为了贴图时使用,这12行对应的是12个顶点的下标,在taperFacts中要使用。
float[] taperDate = new float[]{
0.0f, 0.5f, 0.0f, //0
-0.5f, -0.5f, -0.2f, //1
0.5f, -0.5f, -0.2f, //2
0.0f, 0.5f, 0.0f,//3
-0.5f, -0.5f, -0.2f,//4
0.0f, -0.2f, 0.5f,//5
0.0f, 0.5f, 0.0f,//6
0.5f, -0.5f, -0.2f,//7
0.0f, -0.2f, 0.5f,//8
-0.5f,