我的OpenGl项目中的点击按钮有问题。我尝试用按钮更改Z值,但每次都是ERROR。
日志
FATAL EXCEPTION: main
Process: com.example.vladimir.myapplication, PID: 26366
java.lang.NullPointerException: Attempt to read from field 'float com.example.vladimir.myapplication.MyGLRenderer.z' on a null object reference
at com.example.vladimir.myapplication.MyGLActivity$1.onClick(MyGLActivity.java:64)
我不知道,我做错了什么。
这是我的代码按钮和MainActivity
private MyGLRenderer myGLRenderer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_gl);
glView = (MyGLSurfaceView) findViewById(R.id.glSurfaceViewID);
/*ОБРАБОТКА НАЖАТИЙ НА КНОПКИ*/
Button ZoomIn = findViewById(R.id.ZoomIn);
Button ZoomOut = findViewById(R.id.ZoomOut);
ZoomOut.setOnClickListener(ZoomOutListener);
ZoomIn.setOnClickListener(ZoomInListener);
}
//Функция-Обработчик нажатия на кнопки
View.OnClickListener ZoomInListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
myGLRenderer.z +=1;
Log.e("ZoomIn", "ZoomIn");
}
};
这个,MyGLRENDERER,我尝试更改Z值
public class MyGLRenderer implements GLSurfaceView.Renderer {
private Context context;
private TextureCube cube;
private TextureRoad road;
private TextureTree tree;
private TextureSome some;
float angleX = 0; // по Х Влево вправо
float angleY = 0; // по У
public float z = -50; // ZOOM
float spinRotate;
private float zoomIn;
private float zoomOut;
public void GLZoomControls () {
Log.e("ONO", "ONO JIVOE");
z +=1;
}
public class Zoom {
MyGLRenderer renderer;
private float zoomIn;
private float zoomOut;
int ZoomFlag;
public void GLZoomControls () {
Log.e("ONNNO", "ONO JIVOE");
z +=1;
}
}
//Конструктор для построения
public MyGLRenderer(Context context) {
this.context = context;
cube = new TextureCube(); // текстуры куба
road = new TextureRoad(); // текстуры дороги
tree = new TextureTree(); // текстуры дерева
some = new TextureSome();
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Цвет черный
gl.glClearDepthf(1.0f); // Глубина цвета
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); //
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glDisable(GL10.GL_DITHER);
cube.loadTexture(gl, context); // Загрузка текстуры куба
road.loadTextureRoad(gl, context); // Загрузка текстуры дороги
tree.loadTextureTree(gl, context); // загрузка текстуры дерева
some.loadTextureSome(gl,context);
gl.glEnable(GL10.GL_TEXTURE_2D); // Наложение текстуры
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
if (height == 0) height = 1;
float aspect = (float)width / height;
//просмотр
gl.glViewport(0, 0, width, height);
// Перспектива
gl.glMatrixMode(GL10.GL_PROJECTION); // выбор матрицы
gl.glLoadIdentity(); // обновление матрицы
GLU.gluPerspective(gl, 45, aspect, 0.1f, 150000.0f);
gl.glPushMatrix();
gl.glMatrixMode(GL10.GL_MODELVIEW); // Выбираем модель просмотра матрицы
gl.glLoadIdentity(); // обновление положение
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// ----- Рендеринг ----- //
gl.glLoadIdentity(); // обновляем положение
//проверка пола
if (z == -16) {
//Движение сцены
z = -18;
}
gl.glTranslatef(angleY/16,-angleX/16, 0); //перемещает Z X Y
GLU.gluLookAt(gl, 3, -z / 2, 0, 0, 0, 0, 0, 1, 0); //посмотрим что выйдет :D
gl.glRotatef(spinRotate,0,1,0);
//ОПТИМИЗИРОВАТЬ РИСОВКА ТОЛЬКО ПОСЛЕ ИЗМЕНЕНИЯ ЗУМА или ПОСЛЕ ТАЧА
//проверка на флаг
cube.draw(gl); // Рисуем куб
road.drawRoad(gl); // Рисуем дорогу
tree.drawTree(gl); // Рисуем дерево
some.drawSome(gl);
}
}
请帮助我,我不知道我做错了什么; [
答案 0 :(得分:0)
您尚未在任何地方初始化<div class="form-group">
@Html.TextBoxFor(model => model.CustomerID, new {style = 'display:none'})
@Html.LabelFor(model => model.CustomerGUID, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CustomerGUID, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CustomerGUID, "", new { @class = "text-danger" })
</div>
</div>
。
使用myGLRenderer
时,您只是创建一个private MyGLRenderer myGLRenderer;
对象引用。您应该通过调用构造函数来初始化它。