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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Формирование запроса БД http://www.cyberforum.ru/android-dev/thread1366687.html
Маленький вопросик, но не дает уснуть почему Cursor cursor = database.query(TABLE, null, TAG_DATE + "= ?", new String { "23" }, null, null, null); работает, а вот...
Программирование Android Убираются изображения с кнопки Доброго времени суток. Это мой первый опыт программирования на Android и Java, не судите строго :pardon: Убираются изображения в ImageButton. Все видно скриншотах. Игра на подобие алхимика или Doodle... http://www.cyberforum.ru/android-dev/thread1366675.html
Программирование Android SMS рассылка контактам с базы SQLite
Всем доброго времени суток. Помогите пожалуйста вытащить номера с таблицы и создать цикл для отправки SMS. Код отправки уже готов и работает. Всех благодарю за помощь. Особенно Форуму спасибо за...
Программирование Android Как из MSword docx переоброзоват или генерировать в mysql
Всем привет хочу сделать узбекско-русский словарь на андроид сегодня закончил последние проверки база готова написано в MSWord dictionary.docx имеется более 35000 слов теперь стоит задача как...
Программирование Android Fragments и service http://www.cyberforum.ru/android-dev/thread1366410.html
такой вопрос как реализовать запуск сервиса и обработку результатов приложении где есть fragments.? хотелось бы запускать сервис в активити а обрабатывать в фрагментах... но получается что нужно...
Программирование Android Добавление записи в Базу данных Добрый вечер, Есть работающее приложение для чтения и отправки сообщений. Необходимо записать входящие сообщения в бд. Пытаюсь пытаюсь у меня не получается. Пожалуйста помогите разобраться с бд. ... подробнее

Показать сообщение отдельно
EVP
322 / 244 / 43
Регистрация: 14.12.2010
Сообщений: 465
02.02.2015, 15:23
Цитата Сообщение от 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru