Форум программистов, компьютерный форум 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) {
Программирование Android Работа с сетью в Service Здравствуйте. Возник вопрос на который никак не могу найти ответ. В моей программе необходима работа с сетью в фоновом режиме. Графическая и сетевая часть приложения никак не связаны. Пытаюсь для этого использовать Service. public class Monitor extends Service { public int onStartCommand(Intent intent, int flags, int startId) { mr = new XGM_Client(startId); new Thread(mr).start();... http://www.cyberforum.ru/android-dev/thread1368373.html
Не запускается Genymotion (+скрины) Программирование Android
Пользовался поиском, нашел несколько тем, но ничего не помогло. Я использую роутер, а во всех темах говорилось о проводном подключении.. Расскажу всё поэтапно: посоветовали использовать Genymotion вместо стандартного AVD в Android Studio Скачал сам Genymotion, он потребовал скачать VirtualBox - скачал установил, установил Genymotion. Далее, в Android Studio появился значок от Genymotion, в...
Программирование Android OnActivityResult из сервис во фрагмент
Здравствуйте,есть акивити которая запускает мой сервис. после запуска, сервис должен отослать данные во фрагмент. по логам показывает что сервис запустился, произвел операции, но фрагмент не выдал логов о том что он получил данные. как произвести такую цепочку активити->сервис->фрагмент? main.java(Activity) kill = new Intent(this, timer.class); pi =...
Программирование Android Создать "графический" калькулятор http://www.cyberforum.ru/android-dev/thread1368336.html
Как можно сделать следующее: имеем кнопки от 0....9 , но на каждой кнопке цифры не написаны, а отображены как картинки. Необходимо, чтобы при нажатии этих кнопок именно формировались картинки, а не цифры. Разместить на кнопке картинки знаю как, но как, выводить картинки в сложении, вычитании итд...
Программирование Android Калькулятор на Android Дело вот в чем, создается калькулятор, все прекрасно, но не получается сделать так что бы он считал не одно действие а два и больше действий, то есть имеем 2+2*2 то калькулятор не может посчитать верно, если мы вводим однотипные действие например 2+22+45 или 5*70*51 то он все считает. Как сделать что бы калькулятор мог считать не одно действие а две и больше, и плюс до этого был приоритет.... подробнее

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

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

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