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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Misha_prog
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 184
#1

Opengl es : Загрузка 3D модели в приложение - Программирование Android

02.02.2015, 13:25. Просмотров 1219. Ответов 1
Метки нет (Все метки)

Всем привет!!! начинаю разбираться с графикой под android, но столкнулся с проблемой, что не понимаю как загрузить 3d модель. Может быть кто-нибудь сталкивался с такой проблемой ?Посоветуйте, как лучше это сделать. Всем спасибо за внимание и помощь)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2015, 13:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Opengl es : Загрузка 3D модели в приложение (Программирование Android):

Загрузка 3D модели - Программирование Android
Нужно загрузить 3D модель или средствами Open GLES 2.0 или стандартными средствами Android.

OpenGL наложение текстуры, падает приложение - Программирование Android
после того как выполняю gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, uvCoordsBuffer);, метод drawElements крешит приложение с логами, вобще...

Загрузка obj модели в OpenGl - OpenGL
Есть .obj файл типа: v 1.25022 0 -0.0571689 vt -49.2212 2.25074 vn 0 -1 -0 v 0.108959 0 -0.0571689 vt -4.28972 2.25074 v...

загрузка 3D модели в OpenGL (с++), помогите незнающему - OpenGL
вот столкнулся с проблемой..... надо бы узнать как подгружаются модели в OpenGL всё равно какой вормат ...дайте ссылочки на ресурсы.. ...

3d модели в OpenGL - OpenGL
Подскажите пожалуйсто.. В редакторе сделал модель земли(сфера). В двух форматах(.3ds и .obj), у меня два загрузчика для загрузки в...

Вращение 3D модели в openGL - C++ Qt
Доброго времени суток! Есть у меня 3Д модель (хаотичной формы). Код реализации в опенГЛ: GLWidget::GLWidget(QWidget *parent) :...

1
EVP
390 / 246 / 43
Регистрация: 14.12.2010
Сообщений: 472
02.02.2015, 15:23 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Misha_prog Посмотреть сообщение
но столкнулся с проблемой, что не понимаю как загрузить 3d модель.
Цитата Сообщение от Misha_prog Посмотреть сообщение
Посоветуйте, как лучше это сделать.
Программирование игр под Android
Глава 11 Трюки при разработке 3D-игр.
Загрузка моделей - страница 607.
Формат Wavefront OBJ - страница 608.

Добавлено через 6 минут
Реализация загрузчика модели из книги:
Кликните здесь для просмотра всего текста
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package com.badlogic.androidgames.framework.gl;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
 
import com.badlogic.androidgames.framework.impl.GLGame;
 
public class ObjLoader {
    public static Vertices3 load(GLGame game, String file) {
        InputStream in = null;
        try {
            in = game.getFileIO().readAsset(file);
            List<String> lines = readLines(in);
 
            float[] vertices = new float[lines.size() * 3];
            float[] normals = new float[lines.size() * 3];
            float[] uv = new float[lines.size() * 2];
 
            int numVertices = 0;
            int numNormals = 0;
            int numUV = 0;
            int numFaces = 0;
 
            int[] facesVerts = new int[lines.size() * 3];
            int[] facesNormals = new int[lines.size() * 3];
            int[] facesUV = new int[lines.size() * 3];
            int vertexIndex = 0;
            int normalIndex = 0;
            int uvIndex = 0;
            int faceIndex = 0;
 
            for (int i = 0; i < lines.size(); i++) {
                String line = lines.get(i);
                if (line.startsWith("v ")) {
                    String[] tokens = line.split("[ ]+");
                    vertices[vertexIndex] = Float.parseFloat(tokens[1]);
                    vertices[vertexIndex + 1] = Float.parseFloat(tokens[2]);
                    vertices[vertexIndex + 2] = Float.parseFloat(tokens[3]);
                    vertexIndex += 3;
                    numVertices++;
                    continue;
                }
 
                if (line.startsWith("vn ")) {
                    String[] tokens = line.split("[ ]+");
                    normals[normalIndex] = Float.parseFloat(tokens[1]);
                    normals[normalIndex + 1] = Float.parseFloat(tokens[2]);
                    normals[normalIndex + 2] = Float.parseFloat(tokens[3]);
                    normalIndex += 3;
                    numNormals++;
                    continue;
                }
 
                if (line.startsWith("vt")) {
                    String[] tokens = line.split("[ ]+");
                    uv[uvIndex] = Float.parseFloat(tokens[1]);
                    uv[uvIndex + 1] = Float.parseFloat(tokens[2]);
                    uvIndex += 2;
                    numUV++;
                    continue;
                }
 
                if (line.startsWith("f ")) {
                    String[] tokens = line.split("[ ]+");
 
                    String[] parts = tokens[1].split("/");
                    facesVerts[faceIndex] = getIndex(parts[0], numVertices);
                    if (parts.length > 2)
                        facesNormals[faceIndex] = getIndex(parts[2], numNormals);
                    if (parts.length > 1)
                        facesUV[faceIndex] = getIndex(parts[1], numUV);
                    faceIndex++;
 
                    parts = tokens[2].split("/");
                    facesVerts[faceIndex] = getIndex(parts[0], numVertices);
                    if (parts.length > 2)
                        facesNormals[faceIndex] = getIndex(parts[2], numNormals);
                    if (parts.length > 1)
                        facesUV[faceIndex] = getIndex(parts[1], numUV);
                    faceIndex++;
 
                    parts = tokens[3].split("/");
                    facesVerts[faceIndex] = getIndex(parts[0], numVertices);
                    if (parts.length > 2)
                        facesNormals[faceIndex] = getIndex(parts[2], numNormals);
                    if (parts.length > 1)
                        facesUV[faceIndex] = getIndex(parts[1], numUV);
                    faceIndex++;
                    numFaces++;
                    continue;
                }
            }
 
            float[] verts = new float[(numFaces * 3)
                    * (3 + (numNormals > 0 ? 3 : 0) + (numUV > 0 ? 2 : 0))];
 
            for (int i = 0, vi = 0; i < numFaces * 3; i++) {
                int vertexIdx = facesVerts[i] * 3;
                verts[vi++] = vertices[vertexIdx];
                verts[vi++] = vertices[vertexIdx + 1];
                verts[vi++] = vertices[vertexIdx + 2];
 
                if (numUV > 0) {
                    int uvIdx = facesUV[i] * 2;
                    verts[vi++] = uv[uvIdx];
                    verts[vi++] = 1 - uv[uvIdx + 1];
                }
 
                if (numNormals > 0) {
                    int normalIdx = facesNormals[i] * 3;
                    verts[vi++] = normals[normalIdx];
                    verts[vi++] = normals[normalIdx + 1];
                    verts[vi++] = normals[normalIdx + 2];
                }
            }
 
            Vertices3 model = new Vertices3(game.getGLGraphics(), numFaces * 3,
                    0, false, numUV > 0, numNormals > 0);
            model.setVertices(verts, 0, verts.length);
            return model;
        } catch (Exception ex) {
            throw new RuntimeException("couldn't load '" + file + "'", ex);
        } finally {
            if (in != null)
                try {
                    in.close();
                } catch (Exception ex) {
 
                }
        }
    }
 
    static int getIndex(String index, int size) {
        int idx = Integer.parseInt(index);
        if (idx < 0)
            return size + idx;
        else
            return idx - 1;
    }
 
    static List<String> readLines(InputStream in) throws IOException {
        List<String> lines = new ArrayList<String>();
 
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line = null;
        while ((line = reader.readLine()) != null)
            lines.add(line);
        return lines;
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2015, 15:23
Привет! Вот еще темы с ответами:

OpenGl Движение модели - OpenGL
Доброго времени суток! Помогите пожалуйста решить проблему перемещения модели по сцене. Мне нужно перемещать модель нажатием клавиш...

Экспорт 3d модели в OpenGL - OpenGL
Здравствуйте. Имеется программа на С++, мне необходимо заменить модели инструментов в ней, которые сделаны примитивами opengl на нормальные...

OpenGl Поворот модели, а не оси - Delphi
В OpenGl загружаю модель из файла *.obj, пытаюсь прикрутить вращение модели, но вместо нее вращается ось, что я делаю не так? procedure...

Импорт модели в программы с OpenGL - OpenGL
Импорт модели не стандартного формата, в OpenGL. На языке С, есть код от формата модели, скиньте мануал о том как это можно реализовать,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru