Как нарисовать 3D дом на SurfaceView

245
27 февраля 2018, 05:30

Из ApiDemo взял код 3D куба.Но немогу понять для чего 36 точек вместо 8-и.и для чего массив vertices.Нужно нарисовать дом.Хотел начать с этого.Можно такое сделать с Paint(),Path(),Canvas() чтоб по проще было? Дом будет менять размер,менять детали исходя из запроса клиента.Или вообще нужно смотреть в сторону Unity3D.

package com.example.test3dobject;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import javax.microedition.khronos.opengles.GL10;
class MyCube
{
    public MyCube()
    {
        int lolo = 0x10000;
        int vertices[] = {
                -lolo, -lolo, -lolo,
                lolo, -lolo, -lolo,
                lolo,  lolo, -lolo,
                -lolo,  lolo, -lolo,
                -lolo, -lolo,  lolo,
                lolo, -lolo,  lolo,
                lolo,  lolo,  lolo,
                -lolo,  lolo,  lolo,
        };
        int colors[] = {
                 0,    0,    0,  0x10000,
                 0x20000,    0,    0,  0x20000,
                 0x30000,  0x30000,    0,  0x30000,
                 0,  0x40000,    0,  0x40000,
                 0,    0,  0x50000,  0x50000,
                 0x6000,    0,  0x6000,  0x6000,
                 0x7000,  0x7000,  0x7000,  0x7000,
                 0,  0,  0,  1,
        };
        byte indices[] = {
                0, 4, 5,    0, 5, 1,
                1, 5, 6,    1, 6, 2,
                2, 6, 7,    2, 7, 3,
                3, 7, 4,    3, 4, 0,
                4, 7, 6,    4, 6, 5,
                3, 0, 1,    3, 1, 2
        };

        ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
        vbb.order(ByteOrder.nativeOrder());
        mVertexBuffer = vbb.asIntBuffer();
        mVertexBuffer.put(vertices);
        mVertexBuffer.position(0);
        ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length*4);
        cbb.order(ByteOrder.nativeOrder());
        mColorBuffer = cbb.asIntBuffer();
        mColorBuffer.put(colors);
        mColorBuffer.position(0);
        mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
        mIndexBuffer.put(indices);
        mIndexBuffer.position(0);
    }
    public void draw(GL10 gl)
    {
        gl.glFrontFace(GL10.GL_CW);
        gl.glVertexPointer(3, GL10.GL_FIXED, 0, mVertexBuffer);
        gl.glColorPointer(4, GL10.GL_FIXED, 0, mColorBuffer);
        gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE, mIndexBuffer);
    }
    private IntBuffer   mVertexBuffer;
    private IntBuffer   mColorBuffer;
    private ByteBuffer  mIndexBuffer;
}
READ ALSO
Поиск в объекте

Поиск в объекте

Всем приветТакой вопрос

220
Можноли через Exchanger передать данные в ui поток?

Можноли через Exchanger передать данные в ui поток?

Добрый день , углубляю знания и вот подумал а возможноли в Android передать данные из потока созданного через Thread Runnable в ui поток ?Ведь посути exchager...

224
Fxml controller, событие на checkbox

Fxml controller, событие на checkbox

Столкнулся с проблемой в самом неожиданном местеСоздана форма путем sceneBuilder и FXML и FXMLController

234
Условие локализации

Условие локализации

Приложение поддерживает несколько языков, однако на одном из языков есть дополнительные функции, для этого требуется сделать условие, что...

234