gpt4 book ai didi

java - OpenGL ES 2.0 不绘制任何东西

转载 作者:行者123 更新时间:2023-12-02 07:44:57 25 4
gpt4 key购买 nike

我在使用 OpenGL ES 2.0 时遇到问题。我设计了一个非常简单的框架来帮助我加载 OBJ 文件并在 Android 手机上绘制它们,但是我有 2 个错误无法修复:

  1. 在我更改方向并且 Activity 被抓取并重新加载之前,我的应用程序不会显示任何内容。在重新加载之前,只能看到 GLES20.glClear()(我已将其设置为浅灰色)。

  2. 有时,当我加载 OBJ 并执行定向技巧时,我的一半脸会丢失,并且会看到间隙,但问题可能出在我使用的 OBJ 文件上。


package com.ideas.opengl;

import java.io.IOException;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLES20;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.Matrix;

public class DemoRenderer implements Renderer {
public static int mProgramHandle;
private int mMVPMatrixHandle;
private float[] mModelMatrix = new float[16];
private float[] mViewMatrix = new float[16];
private float[] mProjectionMatrix = new float[16];
private float[] mMVPMatrix = new float[16];

public Object banana;

private OpenGLDemoActivity activity;

private int angle;

public DemoRenderer(OpenGLDemoActivity activity) throws IOException {
this.activity = activity;
}



@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config){
GLES20.glClearColor(0.65f, 0.65f, 0.65f, 0.65f);

//GLES20.glEnable(GLES20.GL_CULL_FACE);

GLES20.glEnable(GLES20.GL_DEPTH_TEST);

GLES20.glEnable(GLES20.GL_TEXTURE_2D);

Shader shader = null;
try {
shader = new Shader(activity, "simple");
} catch (IOException e) {
e.printStackTrace();
}
Vector position = new Vector();
Vector speed = new Vector();
Vector accel = new Vector();
Model model = null;
try {
model = new Model("banana", activity);
} catch (IOException e) {
e.printStackTrace();
}

banana = new Object(position, speed, accel, model);

mProgramHandle = shader.getProgramHandle();

final float eyeX = 0.0f;
final float eyeY = 0.0f;
final float eyeZ = 3.5f;

final float lookX = 0.0f;
final float lookY = 0.0f;
final float lookZ = -5.0f;

final float upX = 0.0f;
final float upY = 1.0f;
final float upZ = 0.0f;

Matrix.setLookAtM(mViewMatrix, 0, eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ);

mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgramHandle, "u_MVPMatrix");
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
GLES20.glViewport(0, 0, width, height);

final float ratio = (float) width / height;
final float left = -ratio;
final float right = ratio;
final float bottom = -1.0f;
final float top = 1.0f;
final float near = 1.0f;
final float far = 10.0f;

Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far);

}


@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);

angle++;

Matrix.setIdentityM(mModelMatrix, 0);
Matrix.rotateM(mModelMatrix, 0, angle, 0.0f, 1.0f, 1.0f);

Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0);

Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0);

GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mMVPMatrix, 0);

banana.draw();
}
}

`

最佳答案

尝试了一些 glGetError() 并遇到了错误,一个是关于其值未更改的变量,另一个是如果顶点着色器中未使用该属性,则 glGetAttributeLocation() 返回 -1。感谢您的帮助!

关于java - OpenGL ES 2.0 不绘制任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com