所以我希望能够在我的Open GL视图上放置按钮和其他小部件,或者我想让我的Open GL和布局分割屏幕的空间。我已经得到了一些答案,比如创建一个布局,然后让它从main连接并将GL Surface设置为布局内的视图,如:
myGL = new MySurface(this);
FrameLayout frame = (FrameLayout)findViewById(R.id.myframelayout);
frame.addView(myGL, 0);
但是它带有一个NullPointerException,它指向:
frame.addView(myGL, 0);
但是,frame和myGL都是null。这是我过去在onCreate()中放入某些代码时遇到的问题,也是我在个人资料中列出的问题(未答复)。然后我尝试通过xml文件创建OpenGLSurface视图,如下所示:
<com.example.escape.MainActivity.MySurface
android:id="@+id/visualizer"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
这也会产生错误,说:
渲染期间引发的异常:loader(com / android / ide / eclipse / adt / internal / resources / manager / ProjectClassLoader的实例):尝试重复的类名定义:&#34; com / example / escape / MainActivity $ MySurface&#34; Window&gt;中记录了异常详细信息。显示视图&gt;错误日志
如果你想知道:com.example.escape是我的MainActivity.java的路径
我也不想做别人说的话,并在OpenGL中创建一个矩形,它始终垂直于屏幕作为按钮。
这是我的主要代码:
public class MainActivity extends Activity {
GLSurfaceView myGL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myGL=new MySurface(this);
setContentView(R.layout.activity_main);
}...
我的GL曲面和渲染器代码:
class MySurface extends GLSurfaceView
{
private MyRenderer myRend;
public MySurface(Context context)
{
super(context);
myRend=new MyRenderer();
setEGLContextClientVersion(2);
setRenderer(myRend);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
}
Square mSquare;
float [] mViewMatrix=new float[16];
float [] mMVPMatrix=new float[16];
float [] mProjectionMatrix=new float[16];
private float[] mRotationMatrix=new float[16];
class MyRenderer implements GLSurfaceView.Renderer
{
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1f);
mSquare=new Square();
}
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
mSquare.draw(mMVPMatrix);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
GLES20.glViewport(0, 0, width, height);
float ratio = (float) width / height;
Matrix.frustumM(mProjectionMatrix, 0, -ratio, ratio, -1, 1, 2, 10);
}
}