Точки на заднем плане не отображаются - PullRequest
0 голосов
/ 21 октября 2011

Я создаю Android 2d космический шутер как способ изучения OpenGL и хочу иметь звездный фон в игре. Моя идея состоит в том, чтобы просто спекулировать фон белыми точками для начала, но точки не отображаются. Сначала код рендерера:

public void onSurfaceCreated(GL10 gl, EGLConfig config) {

}

public void onSurfaceChanged(GL10 gl, int w, int h) {
    gl.glViewport(0, 0, w, h);
    width = w;
    height = h;
    gl.glMatrixMode(GL10.GL_PROJECTION);
}

public void onDrawFrame(GL10 gl) {
    // black background
    gl.glClearColor(0f, 0f, 0f, 1.0f);
    // clear the color buffer to show the ClearColor we called above...
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    gl.glLoadIdentity();

    stars.draw(gl);
}

Тогда розыгрыш звезд:

private final FloatBuffer vertexBuffer;
private int count;

public Stars() {
    Random r = new Random();
    count = (int) ((r.nextFloat() * 200.0f) + 200.0f);
    count *= 3;

    ByteBuffer buffer = ByteBuffer.allocateDirect(count * Float.SIZE);
    buffer.order(ByteOrder.nativeOrder());

    // allocate _count number of floats
    vertexBuffer = buffer.asFloatBuffer();

    float rVtx = (r.nextFloat() * 2.0f) - 1.0f;
    for (int i = 0; i < count; i += 3) {
        vertexBuffer.put(rVtx);
        rVtx = (r.nextFloat() * 2.0f) - 1.0f;

        vertexBuffer.put(rVtx);
        rVtx = (r.nextFloat() * 2.0f) - 1.0f;

        vertexBuffer.put(0.0f);
    }
}

public void draw(GL10 gl) {
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glPointSize(3);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

    gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
    gl.glDrawArrays(GL10.GL_POINTS, 0, count / 3);

    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}

В чем ошибка?

Привет

1 Ответ

0 голосов
/ 21 октября 2011

Вам необходимо установить матрицу проекции по умолчанию в onSurfaceChanged. что-то вроде:

gl.glMatrixMode( GL10.GL_PROJECTION );                
gl.glLoadIdentity();        
gl.glOrthof( -1, 1, -1, 1, -1, 1 );

gl.glMatrixMode( GL10.GL_MODELVIEW );                 
gl.glLoadIdentity();

И в конце Звезд (), поместите это как последнюю строку:

vertexBuffer.position(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...