Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Opengl es: вывод 3D моделей - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Остановить мелодию в MediaPlayer http://www.cyberforum.ru/android-dev/thread1368468.html
Всем привет ,у меня такой вопрос как остановит MediaPlayer? у меня есть класс и в нем один медиаплеер для двух классов import android.content.Context; import android.media.MediaPlayer; import...
Программирование Android Работа с сетью в Service Здравствуйте. Возник вопрос на который никак не могу найти ответ. В моей программе необходима работа с сетью в фоновом режиме. Графическая и сетевая часть приложения никак не связаны. Пытаюсь для... http://www.cyberforum.ru/android-dev/thread1368373.html
Не запускается Genymotion (+скрины) Программирование Android
Пользовался поиском, нашел несколько тем, но ничего не помогло. Я использую роутер, а во всех темах говорилось о проводном подключении.. Расскажу всё поэтапно: посоветовали использовать Genymotion...
Программирование Android OnActivityResult из сервис во фрагмент
Здравствуйте,есть акивити которая запускает мой сервис. после запуска, сервис должен отослать данные во фрагмент. по логам показывает что сервис запустился, произвел операции, но фрагмент не выдал...
Программирование Android Создать "графический" калькулятор http://www.cyberforum.ru/android-dev/thread1368336.html
Как можно сделать следующее: имеем кнопки от 0....9 , но на каждой кнопке цифры не написаны, а отображены как картинки. Необходимо, чтобы при нажатии этих кнопок именно формировались картинки, а не...
Программирование Android Калькулятор на Android Дело вот в чем, создается калькулятор, все прекрасно, но не получается сделать так что бы он считал не одно действие а два и больше действий, то есть имеем 2+2*2 то калькулятор не может посчитать... подробнее

Показать сообщение отдельно
Misha_prog
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 184

Opengl es: вывод 3D моделей - Программирование Android

04.02.2015, 22:22. Просмотров 770. Ответов 1
Метки (Все метки)

Всем привет!!!! Пытаюсь разобраться как на экран выводить 3D модели, но почему то не получается.
Насколько я понял, единственное отличие в выводе куба допустим от 3D модели, это то что нам необходимо взять из 3d модели и записать в массив вершины, нормали, текстуры ? Вот, следуя этой логики я скачал пример из урока, там где выводят квадраты крутящиеся и точку света крутящуюся вокруг, метод которым я забираю координаты из 3D. вот. ( тут цвет я задал так для примера)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import android.content.Context;
import android.util.Log;
import com.example.misha.testdrawfigure.R;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class untitled {
    enum  State {
        START,
        VERTEX,
        NORMAL,
        TEXTURE,
        FINISH
 
    }
   public  static int countVerts ;
    public  static float [] vertexCount;
    public  static float [] vertexNormal;
    public static float [] vertexTexture;
    public static float [] colorsVer;
    public static void readFile(Context ctx, int id) {
        State state = State.START;
        List<String> list = new ArrayList<String>();
        InputStream inputStream = ctx.getResources().openRawResource(id);
        List<String> listVertex = new ArrayList<String>();
        List<String> listNormal = new ArrayList<String>();
        List<String> listTexture = new ArrayList<String>();
        BufferedReader br = null;
        try
        {
            br = new BufferedReader(
                    new InputStreamReader(
                            inputStream
                    )
 
            );
            String line = null;
            while (((line = br.readLine()) != null)) {
                switch (state) {
                    case START: { 
                        if (!line.equals("verts")) {
                            countVerts = Integer.parseInt(line);
                            state = State.VERTEX;
                        }
                        break;
                    }
 
                    case VERTEX: { 
                        if (line.equals("END")) { 
                            state = State.NORMAL;
                        }else {
                            listVertex.add(line);
                        }
                        break;
                    }
 
                    case NORMAL: { 
                        if (!line.equals("normals") && !line.equals("END")) {
                            listNormal.add(line);
                        }else if (line.equals("END")) {
                            state = State.TEXTURE;
                        }
                        break;
                    }
 
                    case TEXTURE: {
                        if (!line.equals("texture") && !line.equals("END")) {
                            listTexture.add(line);
                        }else if (line.equals("END")) {
                            state = State.FINISH;
                        }
                        break;
                    }
                    default:
                        break;
                }
            }
            br.close();
        }catch (Exception e ) {
            Log.e("ErrorUSer", e.getMessage());
        }
        vertexCount = new float[listVertex.size()];
        vertexNormal = new float[listNormal.size()];
        vertexTexture = new float[listTexture.size()];
        for (int i = 0; i < listVertex.size(); ++i) {
            vertexCount[i] = Float.parseFloat(listVertex.get(i));
        }
        for (int i = 0; i < listNormal.size(); ++i) {
 
            vertexNormal[i] = Float.parseFloat(listNormal.get(i));
        }
        for (int i = 0; i < listTexture.size(); ++i) {
            vertexTexture[i] = Float.parseFloat(listTexture.get(i));
        }
 
        int colors = listVertex.size() / 3;
        colorsVer = new float[colors * 4];
        for (int i = 0; i < colors * 4; ++i) {
            if (i % 4 == 0) {
                colorsVer[i] = 1;
            }else
            {
                colorsVer[i] = 0.7f;
 
            }
        }
    };
}
и вот код который я взял и немного отредактировал ( то есть добавил вместо заданных вершин, считаынне из модели)
вот.( я пишу только конструктор, потому что остальной код схож с OPengl es второй урок
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.content.Context;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.opengl.Matrix;
import android.os.SystemClock;
import android.util.Log;
import com.example.misha.testdrawfigure.object.untitled;
public class FirstRenderer implements GLSurfaceView.Renderer{
    private float[] mModelMatrix = new float[16];
    private float[] mViewMatrix = new float[16];
    private float[] mProjectionMatrix = new float[16];
    private float[] mMVPMatrix = new float[16];
    private float[] mLightModelMatrix = new float[16];
    private final FloatBuffer mCubePositions;
    private final FloatBuffer mCubeColors;
    private final FloatBuffer mCubeNormals;
    private int mMVPMatrixHandle;
    private int mMVMatrixHandle;
    private int mLightPosHandle;
    private int mPositionHandle;
    private int mColorHandle;
    private int mNormalHandle;
    private final int mBytesPerFloat = 4;
    private final int mPositionDataSize = 3;
    private final int mColorDataSize = 4;
    private final int mNormalDataSize = 3;
    private final float[] mLightPosInModelSpace = new float[] {0.0f, 0.0f, 0.0f, 1.0f};
 
    private final float[] mLightPosInWorldSpace = new float[4];
    private final float[] mLightPosInEyeSpace = new float[4];
 
    private int mPerVertexProgramHandle;
    private int mPointProgramHandle;
 
    public FirstRenderer(Context ctx)
    {
        com.example.misha.testdrawfigure.object.untitled.readFile(ctx,  R.raw.farmhouse);
        final float[] cubePositionData = untitled.vertexCount;
        final float[] cubeColorData = untitled.colorsVer;
        final float[] cubeNormalData = untitled.vertexNormal;
        mCubePositions = ByteBuffer.allocateDirect(cubePositionData.length * mBytesPerFloat)
                .order(ByteOrder.nativeOrder()).asFloatBuffer();
        mCubePositions.put(cubePositionData).position(0);
 
        mCubeColors = ByteBuffer.allocateDirect(cubeColorData.length * mBytesPerFloat)
                .order(ByteOrder.nativeOrder()).asFloatBuffer();
        mCubeColors.put(cubeColorData).position(0);
 
        mCubeNormals = ByteBuffer.allocateDirect(cubeNormalData.length * mBytesPerFloat)
                .order(ByteOrder.nativeOrder()).asFloatBuffer();
        mCubeNormals.put(cubeNormalData).position(0);
    }
Но это все просто выводит точку..... может кто сталкивался с такой проблемой ? не могли бы подсказать?
Всем спасибо за внимание!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru