From 751a180677ff74b021a32d5fd3723f6607bfcb6e Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Fri, 23 Sep 2022 18:00:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Simple5=E2=80=94=E2=80=941=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/src/main/AndroidManifest.xml | 2 +- .../com/navinfo/myopengllearn/ShaderUtil.java | 9 +-- .../myopengllearn/{ => simple3}/MyTDView.java | 2 +- .../{ => simple3}/Sample3_1Activity.java | 2 +- .../myopengllearn/{ => simple3}/Triangle.java | 9 +-- .../myopengllearn/simple5/MySurfaceView.java | 41 ++++++++++++++ .../simple5/Simple5_1Activity.java | 23 ++++++++ .../myopengllearn/simple5/SixPointStar.java | 56 +++++++++++++++++++ .../src/main/res/layout/activity_sample31.xml | 2 +- 9 files changed, 132 insertions(+), 14 deletions(-) rename MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/{ => simple3}/MyTDView.java (98%) rename MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/{ => simple3}/Sample3_1Activity.java (94%) rename MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/{ => simple3}/Triangle.java (95%) create mode 100644 MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/MySurfaceView.java create mode 100644 MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/Simple5_1Activity.java create mode 100644 MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/SixPointStar.java diff --git a/MyOpenGLLearn/app/src/main/AndroidManifest.xml b/MyOpenGLLearn/app/src/main/AndroidManifest.xml index 25ea207..4fb2747 100644 --- a/MyOpenGLLearn/app/src/main/AndroidManifest.xml +++ b/MyOpenGLLearn/app/src/main/AndroidManifest.xml @@ -14,7 +14,7 @@ android:theme="@style/Theme.MyOpenGLLearn" tools:targetApi="31"> diff --git a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/ShaderUtil.java b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/ShaderUtil.java index 797b82c..3454aa6 100644 --- a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/ShaderUtil.java +++ b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/ShaderUtil.java @@ -11,17 +11,14 @@ import android.util.Log; public class ShaderUtil { //加载制定shader的方法 - public static int loadShader - ( + public static int loadShader( int shaderType, //shader的类型 GLES20.GL_VERTEX_SHADER(顶点) GLES20.GL_FRAGMENT_SHADER(片元) String source //shader的脚本字符串 - ) - { + ) { //创建一个新shader int shader = GLES20.glCreateShader(shaderType); //若创建成功则加载shader - if (shader != 0) - { + if (shader != 0) { //加载shader的源代码 GLES20.glShaderSource(shader, source); //编译shader diff --git a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/MyTDView.java b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple3/MyTDView.java similarity index 98% rename from MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/MyTDView.java rename to MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple3/MyTDView.java index b7a92f3..d09cc3c 100644 --- a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/MyTDView.java +++ b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple3/MyTDView.java @@ -1,4 +1,4 @@ -package com.navinfo.myopengllearn; +package com.navinfo.myopengllearn.simple3; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; diff --git a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/Sample3_1Activity.java b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple3/Sample3_1Activity.java similarity index 94% rename from MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/Sample3_1Activity.java rename to MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple3/Sample3_1Activity.java index 5b86f1b..eb72cad 100644 --- a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/Sample3_1Activity.java +++ b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple3/Sample3_1Activity.java @@ -1,4 +1,4 @@ -package com.navinfo.myopengllearn; +package com.navinfo.myopengllearn.simple3; import android.app.Activity; import android.content.pm.ActivityInfo; diff --git a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/Triangle.java b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple3/Triangle.java similarity index 95% rename from MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/Triangle.java rename to MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple3/Triangle.java index 9bdcc76..98cc75d 100644 --- a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/Triangle.java +++ b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple3/Triangle.java @@ -1,4 +1,4 @@ -package com.navinfo.myopengllearn; +package com.navinfo.myopengllearn.simple3; import java.nio.ByteBuffer; import java.nio.ByteOrder; @@ -6,6 +6,8 @@ import java.nio.FloatBuffer; import android.opengl.GLES20; import android.opengl.Matrix; +import com.navinfo.myopengllearn.ShaderUtil; + //三角形 public class Triangle { @@ -51,8 +53,7 @@ public class Triangle mVertexBuffer.put(vertices); mVertexBuffer.position(0); - float colors[]=new float[] - { + float colors[]=new float[] { 1,1,1,0, 0,0,1,0, 0,1,0,0, @@ -69,7 +70,7 @@ public class Triangle public void initShader(MyTDView mv) { //加载顶点着色器的脚本内容 - mVertexShader=ShaderUtil.loadFromAssetsFile("vertex.glsl", mv.getResources()); + mVertexShader= ShaderUtil.loadFromAssetsFile("vertex.glsl", mv.getResources()); //加载片元着色器的脚本内容 mFragmentShader=ShaderUtil.loadFromAssetsFile("frag.glsl", mv.getResources()); //基于顶点着色器与片元着色器创建程序 diff --git a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/MySurfaceView.java b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/MySurfaceView.java new file mode 100644 index 0000000..2ce2552 --- /dev/null +++ b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/MySurfaceView.java @@ -0,0 +1,41 @@ +package com.navinfo.myopengllearn.simple5; + +import android.content.Context; +import android.opengl.GLES20; +import android.opengl.GLSurfaceView; + +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.opengles.GL10; + +public class MySurfaceView extends GLSurfaceView { + private SceneRenderer sceneRenderer; + + public MySurfaceView(Context context) { + super(context); + + sceneRenderer = new SceneRenderer(); + this.setRenderer(sceneRenderer); + this.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); + } + + private class SceneRenderer implements GLSurfaceView.Renderer { + + @Override + public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) { + GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); + // 初始化六角形数据 + + GLES20.glEnable(GLES20.GL_DEPTH_TEST); // 打开深度检测 + } + + @Override + public void onSurfaceChanged(GL10 gl10, int i, int i1) { + + } + + @Override + public void onDrawFrame(GL10 gl10) { + + } + } +} diff --git a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/Simple5_1Activity.java b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/Simple5_1Activity.java new file mode 100644 index 0000000..d03c00c --- /dev/null +++ b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/Simple5_1Activity.java @@ -0,0 +1,23 @@ +package com.navinfo.myopengllearn.simple5; + +import android.app.Activity; +import android.os.Bundle; + +import androidx.annotation.Nullable; + +public class Simple5_1Activity extends Activity { + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void onResume() { + super.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + } +} diff --git a/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/SixPointStar.java b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/SixPointStar.java new file mode 100644 index 0000000..e0f6716 --- /dev/null +++ b/MyOpenGLLearn/app/src/main/java/com/navinfo/myopengllearn/simple5/SixPointStar.java @@ -0,0 +1,56 @@ +package com.navinfo.myopengllearn.simple5; + +import android.view.SurfaceView; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; +import java.util.ArrayList; +import java.util.List; + +/** + * 六角形图形 + * */ +public class SixPointStar { + public SixPointStar(SurfaceView surfaceView, float r, float R, float centX, float centY, float centZ) { + initVtexData(r, R, centX, centY, centZ); + initShader(); + } + + /** + * 初始化顶点数据 + * */ + private void initVtexData(float r, float R, float centX, float centY, float centZ) { + List pointList = new ArrayList<>(); + float stepAngle = 60f; + // 中心点位置 + pointList.add((double) centX); + pointList.add((double) centY); + pointList.add((double) centZ); + + for (int i = 0; i < 6; i++) { + float currentAngle = stepAngle*i; + + // 长边半径的点 + pointList.add(R*Math.sin(Math.toRadians(currentAngle))); + pointList.add(R*Math.cos(Math.toRadians(currentAngle))); + pointList.add((double) centZ); + + // 短边半径的点 + pointList.add(r*Math.sin(Math.toRadians(currentAngle))); + pointList.add(r*Math.cos(Math.toRadians(currentAngle))); + pointList.add((double) centZ); + } + + int pointSize = pointList.size()/3; + ByteBuffer vbb = ByteBuffer.allocateDirect(pointList.size()*4); + vbb.order(ByteOrder.nativeOrder()); + FloatBuffer pointBuffer = vbb.asFloatBuffer(); + float[] floatArray = new float[pointList.size()]; + pointBuffer.put(pointList.toArray(floatArray)); + } + + private void initShader() { + + } +} diff --git a/MyOpenGLLearn/app/src/main/res/layout/activity_sample31.xml b/MyOpenGLLearn/app/src/main/res/layout/activity_sample31.xml index aa71001..dfcfcc4 100644 --- a/MyOpenGLLearn/app/src/main/res/layout/activity_sample31.xml +++ b/MyOpenGLLearn/app/src/main/res/layout/activity_sample31.xml @@ -4,6 +4,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".Sample3_1Activity"> + tools:context=".simple3.Sample3_1Activity"> \ No newline at end of file