Реализация трехмерной модели для мобильной платформы Android

Автор работы: Пользователь скрыл имя, 24 Мая 2013 в 19:54, курсовая работа

Описание работы

Результатом этой курсовой работы является демонстрационная программа «Трехмерная модель куба для мобильной платформы Android».
В первой главе курсовой работы были изучены основные средства, используемые для разработки мобильных приложений, в частности, язык программирования Java, среда разработки Eclipse, а также наибольшее внимание уделено библиотеке OpenGL ES для программирования под Android.
Во второй части рассмотрена структура проекта. для наиболее целостного преставление о программирования для данной мобильной платформы.
Третья глава посвящена пошаговому описанию реализации модели куба.
В данной курсовой работе рассмотрена модель куба. В дальнейшем пользуясь полученными знаниями возможно построение других трехмерных моделей.

Содержание работы

Введение………………………………………………………………………………………3
Постановка задачи……………………………………………………………………………4
I. Описание технических средств реализации приложения под мобильную платформу Android.
1.1 Разработка под Android………………………………………………………………..5
1.2 Среда разработки Eclipse………………………………………………………………5
1.3 Android SDK и JDK…………………………………………………………………….7
1.4 Особенности графики .OpenGL ES……………………………………………………7
II. Структура проекта…………………………………………………………………………9
III. Реализация трехмерной модели куба.
3.1 Построение трехмерной модели куба………………………………………………...11
3.2 Движение 3D объектов………………………………………………………………...12
3.3 Управление моделью…………………………………………………………...14
Заключение……………………………………………………………………………………15
Список литературы…………………………………………………………………………...16

Файлы: 1 файл

Динамический куб для андроид.docx

— 200.13 Кб (Скачать файл)

bin - каталог сборки приложения. При компиляции приложения Android получается сборка, размещаемая в этом каталоге.

res - содержит структуру папок ресурсов приложения. Наименование каждой папки определяет тип ресурсов, которые она должна содержать. Например, папка res/drawable-ldpi предназначается для файлов изображений, которые будут применяться на экранах низкой плотности. Папка res/values - для строковых ресурсов, цвета и размеров. Папка res/layout - для файлов компоновки экрана. В Android множество видов ресурсов.

AndroidManifest - файл, который указывает точку входа в приложение. Служит для задания общей информации о приложении. Определения атрибутов приложения. Запроса прав доступа к определенным критическим операциям и другой информации. Данный файл называется файлом описания, или файлом манифеста.

protect.properties - содержит параметры проекта, например версию API. Файл создается автоматически и не может быть удален: 

# Project target.

target=android-8

 

  1. Реализация трехмерной модели куба.

3.1. Построение трехмерной модели куба.

Построение трехмерной модели куба с использованием библиотеки OpenGL ES. Начало координат находится в левом нижнем углу экрана.

protected void onDraw(Canvas canvas) {

        Vector3D t[]  = new Vector3D[8];

        double avgZ[] = new double[6];

        int order[] = new int[6];

 

        for( int i = 0; i < 8; i++ ) {

           

            t[i] = vertices[i].rotateX(ax).rotateY(ay).rotateZ(az);

 

           

            t[i] = t[i].project(getWidth(), getHeight(), 256, 4);

        }

 

      

        for( int i = 0; i < 6; i++ ) {

            avgZ[i] = (t[faces[i][0]].z + t[faces[i][1]].z + t[faces[i][2]].z + t[faces[i][3]].z) / 4;

            order[i] = i;

        }

 

     

        for( int i = 0; i<=4; i++)

        {

         int iMax = i;

            for( int j = i + 1; j<=5; j++) 

            {

             if (avgZ[j]>avgZ[iMax] ) {

                    iMax = j;

                }

            }

            if( iMax != i ) {

                double dTmp = avgZ[i];

                avgZ[i] = avgZ[iMax];

                avgZ[iMax] = dTmp;

 

                int iTmp = order[i];

                order[i] = order[iMax];

                order[iMax] = iTmp;

            }

        }

 

        canvas.drawColor(Color.BLACK);

 

        Paint paint = new Paint();

        paint.setColor(Color.WHITE);

        paint.setStyle(Style.FILL);

 

       

 

        for( int i = 0; i < 6; i++ ) {

            int index = order[i];

 

            Path p = new Path();

            p.moveTo((float)t[faces[index][0]].x, (float)t[faces[index][0]].y);

            p.lineTo((float)t[faces[index][1]].x, (float)t[faces[index][1]].y);

            p.lineTo((float)t[faces[index][2]].x, (float)t[faces[index][2]].y);

            p.lineTo((float)t[faces[index][3]].x, (float)t[faces[index][3]].y);

            p.close();

 

            paint.setColor(colors[index]);

            canvas.drawPath(p, paint);

        }

    }

 

 

 3.2. Движение 3D объектов.

Движение в трехмерном пространстве может быть выражено в  виде матриц. Рассмотрим на примере куба. Его можно представить в виде формул:

x ′ = x + Tx , y ′ = y + Ty и z ′ = z + Tz

Вращение по оси z.          

cos(a)

-sin(a)

0

0

sin(a)

cos(a)

0

0

0

0

1

0

0

0

0

1


 

Вращение по оси x.

1

0

0

0

0

cos(a)

-sin(a)

0

0

sin(a)

cos(a)

0

0

0

0

1


Вращение по оси y.

cos(a)

0

sin(a)

0

0

1

0

0

-sin(a)

0

cos(a)

0

0

0

0

1


 

Вращение во всех направлениях.

cos(b)cos(c)-sin(a)sin(b)sin(c)

-coc(b)sin(c)+sin(a)sin(b)cos(c)

sin(b)coc(a)

0

sin(c)cos(a)

cos(c)cos(a)

-sin(a)

0

-sin(b)cos(a)+cos(b)sin(a)sin(c)

sin(c)sin(b)+cos(b)sin(a)cos(c)

cos(a)cos(b)

0

0

0

0

1


 

В программе это реализовано следующим образом:

public Vector3D rotateX(double angle) {

        double rad, cosa, sina, yn, zn;

 

        rad = angle * Math.PI / 180;

        cosa = Math.cos(rad);

        sina = Math.sin(rad);

        yn = this.y * cosa - this.z * sina;

        zn = this.y * sina + this.z * cosa;

 

        return new Vector3D(this.x, yn, zn);

    }

 

    public Vector3D rotateY(double angle) {

        double rad, cosa, sina, xn, zn;

 

        rad = angle * Math.PI / 180;

        cosa = Math.cos(rad);

        sina = Math.sin(rad);

        zn = this.z * cosa - this.x * sina;

        xn = this.z * sina + this.x * cosa;

 

        return new Vector3D(xn, this.y, zn);

    }

 

    public Vector3D rotateZ(double angle) {

        double rad, cosa, sina, xn, yn;

 

        rad = angle * Math.PI / 180;

        cosa = Math.cos(rad);

        sina = Math.sin(rad);

        xn = this.x * cosa - this.y * sina;

        yn = this.x * sina + this.y * cosa;

 

        return new Vector3D(xn, yn, this.z);

    }

 

3.3 Управление моделью.

Занимаясь программированием  под Android необходимо знать, как взаимодействовать с сенсорным экраном. Управление движением осуществляется жестами. В программе это реализовано так:

public boolean onTouchEvent(MotionEvent event) {

        if( event.getAction() == MotionEvent.ACTION_DOWN ) {

            lastTouchX = event.getX();

            lastTouchY = event.getY();

        }else if( event.getAction() == MotionEvent.ACTION_MOVE ) {

            float dx = (event.getX() - lastTouchX) / 30.0f;

            float dy = (event.getY() - lastTouchY) / 30.0f;

            ax += dy;

            ay -= dx;

            postInvalidate();

        }

        return true;

    }

 

Заключение.

Результатом этой курсовой работы является демонстрационная программа  «Трехмерная модель куба для мобильной  платформы Android».

В первой главе курсовой работы были изучены основные средства, используемые для разработки мобильных  приложений, в частности, язык программирования Java, среда разработки Eclipse, а также наибольшее внимание уделено библиотеке OpenGL ES для программирования под Android.

Во второй части рассмотрена  структура проекта. для наиболее целостного преставление о программирования для данной мобильной платформы.

Третья глава посвящена  пошаговому описанию реализации модели куба.

В данной курсовой работе рассмотрена  модель куба. В дальнейшем пользуясь полученными знаниями возможно построение других трехмерных моделей.

 

 

Список литературы.

  1. http://developer.android.com.
  2. Google Android. Программирование для мобильных устройств, А.Л. Голощапов.
  3. Pro OpenGL ES for Android , Mike Smithwick, Mayank Verma.
  4. http://Opengl.org.com.

 

 

 


Информация о работе Реализация трехмерной модели для мобильной платформы Android