今天又发现一些非常赞的Opengl学习网站:Shadertoy、twinklingstar,看到这些资源,真是相见恨晚啊,里面的东西真是太赞了,上一幅图大家就知道了。
怎么样?我第一眼看到这样的效果,真是被震惊到了,我操,这是什么操作,居然还能搞出来这样的效果,我的十个大拇指不由得想伸出来表达一下内心的赞,然而看看该效果的实现代码,我的内心再次崩溃,这个效果完全是由shader实现的!
Java代码是GlSeaRender类,完整源码如下:
package com.opengl.learn.aric;
import android.content.Context;
import android.opengl.GLES32;
import android.opengl.GLSurfaceView;
import android.util.Log;
import com.opengl.learn.OpenGLUtils;
import com.opengl.learn.R;
import com.opengl.learn.aric.material.MaterialCube;
import com.opengl.learn.aric.material.MaterialLight;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import static android.opengl.GLES20.GL_ARRAY_BUFFER;
import static android.opengl.GLES20.GL_COLOR_BUFFER_BIT;
import static android.opengl.GLES20.GL_DEPTH_BUFFER_BIT;
import static android.opengl.GLES20.GL_DEPTH_TEST;
import static android.opengl.GLES20.GL_FLOAT;
import static android.opengl.GLES20.GL_STATIC_DRAW;
import static android.opengl.GLES20.GL_TEXTURE0;
import static android.opengl.GLES20.GL_TEXTURE1;
import static android.opengl.GLES20.GL_TEXTURE_2D;
import static android.opengl.GLES20.GL_TRIANGLES;
import static android.opengl.GLES20.glGenBuffers;
import static android.opengl.GLES20.glGetUniformLocation;
public class GlSeaRender implements GLSurfaceView.Renderer {
private static final String TAG = GlSeaRender.class.getSimpleName();
private final float[] mVerticesData =
{
-1.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
-1.0f, 1.0f, 0.0f,
};
private static final int BYTES_PER_FL