Форум программистов, компьютерный форум 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.widget.ImageView; public class MediaPl { MediaPlayer mediaPlayer; public ImageView image ; Context context; public MediaPl(Context c) {
Xamarin Диплом на xamarin android Здравствуйте. Хочу написать программу кинотеатр с бронированием мест. Клиент- серверное приложение. Подскажите с чего начать. Какие уроки есть, книги и т.д.. Спасибо. http://www.cyberforum.ru/android-dev/thread1368408.html
Работа с сетью в Service Android
Здравствуйте. Возник вопрос на который никак не могу найти ответ. В моей программе необходима работа с сетью в фоновом режиме. Графическая и сетевая часть приложения никак не связаны. Пытаюсь для этого использовать Service. public class Monitor extends Service { public int onStartCommand(Intent intent, int flags, int startId) { mr = new XGM_Client(startId); new Thread(mr).start();...
Не запускается Genymotion (+скрины) Android
Пользовался поиском, нашел несколько тем, но ничего не помогло. Я использую роутер, а во всех темах говорилось о проводном подключении.. Расскажу всё поэтапно: посоветовали использовать Genymotion вместо стандартного AVD в Android Studio Скачал сам Genymotion, он потребовал скачать VirtualBox - скачал установил, установил Genymotion. Далее, в Android Studio появился значок от Genymotion, в...
Android OnActivityResult из сервис во фрагмент http://www.cyberforum.ru/android-dev/thread1368370.html
Здравствуйте,есть акивити которая запускает мой сервис. после запуска, сервис должен отослать данные во фрагмент. по логам показывает что сервис запустился, произвел операции, но фрагмент не выдал логов о том что он получил данные. как произвести такую цепочку активити->сервис->фрагмент? main.java(Activity) kill = new Intent(this, timer.class); pi =...
 

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

Opengl es: вывод 3D моделей - Android

04.02.2015, 22:22. Просмотров 652. Ответов 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);
    }
Но это все просто выводит точку..... может кто сталкивался с такой проблемой ? не могли бы подсказать?
Всем спасибо за внимание!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru