むルカ氎族通のAndroid

あなたのポケットに収たるデバむスのすべおの愛奜家ず、ポケットを7むンチより広く持っおいる人を歓迎したす。クロスプラットフォヌムグラフィックアプリケヌション、぀たりモバむルプラットフォヌムAndroidスマヌトフォンずタブレットで動䜜するアプリケヌションのプログラミングの技術を取り䞊げたす。 Windowsの堎合デスクトップPC、ラップトップ、ネットブック、タブレットこの堎合、アプリケヌションはグラフィカルであり、グラフィックはOpenGLOGLずモバむルバヌゞョンのOpenGL ESGLESに基づいおいたす。EmbarcaderoDelphi XE7を䜿甚しおいたすプラットフォヌムを䜿甚しおいたせん FMFireMonkey、叀き良き時代のように、私たちは自分たちですべおをれロから曞きたす。



画像



すぐに䜜業を半分に分割するこずを提案したす。

-クロスプラットフォヌムのグラフィックラむブラリを䜜成し、その䜿甚䟋を怜蚎し、実装の詳现をペむントし、質問に答えたす。

-あなたの責任はそれほど倧きくありたせん。さたざたなモバむルデバむスのデモテスト、実行に関するレポヌト、レビュヌず批刀、新しいアむデアず新鮮な肉 、ラむブラリずアプリケヌション自䜓の新しいナヌザヌが必芁です。



1.最初のデモ

Android mc.apk 3.8 MB yadi.sk/d/n1wDuX1RhC4QX

Windows mc.zip 1.9 MB yadi.sk/d/tBKQxaV7ff8KW

リポゞトリ内の゜ヌス sourceforge.net/p/delphioga/code/ci/default/tree

最初のバヌゞョンでは、プログラムはトリッキヌではありたせん-画面䞊に4096個の角のある色のボヌルを衚瀺するだけで、「フリヌカメラ」モヌドでそれらを飛び越えるこずができたす。 RGBカラヌスペヌスの原理に埓っお球䜓をペむントしたしたが、球䜓も回転したす。 この䟋では、3Dプリミティブ特に球䜓を構築する方法ず、レンダリングを最適化する方法錐台カリング、オブゞェクトの詳现化を怜蚎したす。

しかし、私たちは小さな入門郚分なしではできたせん。



2.取扱説明曞、Androidスマヌトフォン/タブレット

1. mc.apkをむンストヌルしたす。これはプログラムのむンストヌルアヌカむブです。 これを行う方法に぀いお質問がある堎合は、い぀でもお手䌝いしたす。

2. apkをむンストヌルするず、プログラムがむンタヌネットにアクセスする必芁があるずいう譊告が衚瀺される堎合がありたす。 実際、プログラムはデバッグモヌドでコンパむルされおいるため、デバッガヌgdbserverおよびlogcatログコン゜ヌルが機胜するためには、ロヌカルネットワヌクぞのアクセスが必芁になる可胜性がありたす。 ただ必芁なログ。 プログラム自䜓からは、ネットワヌクには䞀切アクセスせず、画面にグラフィックを描画するだけです。

3.むンストヌル埌、デスクトップ「mc」に新しいショヌトカットを远加したす。 プログラムを実行したす。 スクリヌンセヌバヌ-FMの光に感心したすデフォルトでは、Delphiモバむルプロゞェクトのアむコンはただ倉曎しおいたせん。 アプリケヌションの起動時間、玄数秒でどれだけ持っおいるのか、そしおそのシェアに泚意を払っおいたすか これをサンプルFMアプリケヌションのダりンロヌド時間ず比范するこずができたす。これたでのずころ、比范のほうが有利です。

4.ようこそ、ようこそ。 指ずタッチスクリヌンを䜿甚しお、芖線の方向ず動きの方向を倉曎したす。 右䞊には、画面䞊のボタンがいく぀かありたす-前方ず埌方です。 手が2本ある堎合は、移動ずタヌンを同時に行うこずができたす。 これには、ある皮の噚甚さ、本圓に䜕かが必芁であり、私は単玔な生掻を玄束したせんでした。

5.別のアプリケヌションに切り替えるか、タブレットを「スリヌプ状態」にするずタブレットを持っおいるためモバむルデバむスをタブレットず呌びたす、プログラムはグラフィックスのレンダリングを停止したすGLESコンテキストずアプリケヌションりィンドり自䜓は削陀されるため、Androidで実行する必芁がありたす、プログラム自䜓は停止したせん仕事。 アプリケヌションに切り替えるか、タブレットを「起動」するず、りィンドりずコンテキストが再䜜成され、停止地点からの旅が続きたす。 テストするずきはこのニュアンスに泚意を払う必芁がありたす。䞀郚のゲヌムは正しく「回埩」する方法を知りたせんが、できる必芁がありたす。

6.タブレットを氎平に、次に垂盎に回したす。 アプリケヌションは、これら2぀のモヌドのそれぞれで確認する必芁がありたす。 もちろん、このようなトリックは、デバむスの衚瀺方向が「自動」に蚭定されおいる堎合にのみ機胜したす。

7.デモの終了は簡単です-「戻る」システムボタンをクリックしたす。

8.蚘事ぞのコメントに、䜿甚したモバむルデバむスの皮類メヌカヌ、モデルを蚘入し、その特性、CPUずGPUの皮類、OSバヌゞョンを芋぀けようずしたす。 このデヌタをレポゞトリのhardware.txtファむルに含めたす。



画像



3.操䜜説明曞、Windows

1. zipアヌカむブを解凍したす。 exeファむルの量に驚くこずはありたせん。デモはデバッグモヌドでコンパむルされ、exeリリヌスでは1.5 MBになりたす。 mc.exeを開始したす。

Androidのようにネットワヌクの䜿甚に関するシステム譊告はありたせん。ネットワヌクはデモでは䜿甚されないため、PCではデバッガヌずログがロヌカルで動䜜したす。

2.ようこそ、ようこそ。 芖線の方向ず動きの方向を倉曎するには、巊マりスボタンLMBを抌しながら画面を「ドラッグ」したす。 スペヌスを移動するには、キヌボヌドの[WASD]キヌが機胜したす矢印たたはNumPadの矢印のいずれか。 前埌に移動するための画面䞊のボタンもあり、クリック可胜です。 [F1]はヘルプを衚瀺し、[ESC]はプログラムを終了できたす。

3. 2番目のりィンドりプログラムが起動するず、コントロヌルパネルに2぀のりィンドりが衚瀺されたすに泚意しおください。これがデバッグコン゜ヌルです。 Android甚の同様のコン゜ヌルlogcatは、埌で怜蚎したす。 ベンダヌGPUの埌に、レンダラヌビデオカヌドの䌚瀟/タむプがOpen GLバヌゞョンを曞き蟌みたす。 OpenGLのバヌゞョンが3.0より䜎い堎合、将来のラむブラリ機胜の䞀郚が叀いビデオカヌドで動䜜しないずだけ蚀っおみたしょう。 ただし、アプリケヌションには、このような機胜の実装の2぀のブランチを含めるこずができ、どのような堎合でも機胜したす。

4.この䟋ではVSYNCがオフになっおいたす。FPSは60 Hzをはるかに超えるこずがあり可芖オブゞェクトから目を離しおみおください、GPUずCPUの負荷は最倧です。 これは、フレヌムレンダリング速床をテストするために行いたす。VSYNCが有効になっおいる堎合、負荷は正垞になりたす。



4.画面ぞのデバッグ出力

巊䞊のスクリヌンショットには、いく぀かの黄色の文字ず数字がありたす。

FPSは、1秒あたりの平均フレヌム数です。これは、描画速床を評䟡するための䞻なツヌルです。 VSYNCはAndroidで有効になり、FPSは画面のリフレッシュレヌト60 Hzによっお制限されたすが、デモでGPUの負荷を調敎しお、FPSがほずんどのモバむルデバむスで「沈む」ようにしたした。 コントロヌルずアニメヌションが適切である限り、それは怖くありたせん。 Windowsでは、VSYNCはオフで、FPSには制限がありたせん。

TDF -1フレヌムを描画する平均時間ミリ秒単䜍。実際はFPSの逆数。 「タむミング」を理解するために必芁です-フレヌムを描画するために時間間隔が珟れる順序。 FPS 60 Hzでは、この時間は玄17 msです。

NFR-アプリケヌションの開始から描画されたフレヌムの数。 最初の1秒間のFPS 60 Hzでは、この数倀は60に達したす。

T-アプリケヌションの開始からのミリ秒単䜍の時間。アニメヌション関数の匕数ずしお䜿甚したす。この䟋では、球䜓の回転はそれに䟝存しおいたす。

POS -XYZ 3Dワヌルドのカメラ座暙は、軞の始点で次のように配眮されたす。Xは右、Yは䞊、Zは私たちです。

AH、AV-氎平および垂盎に察するカメラの回転角床床単䜍。 ロヌル角に぀いおは個別に話した方が良いでしょう。

Nは、ナニバヌス内のオブゞェクトの総数です。

NV-党䜓的たたは郚分的に非垞に倚くのオブゞェクトが芖界錐台、カメラの芖野の角錐台に分類されたす。

HD-非垞に倚くの近くのオブゞェクトがわずかに優れたレンダリング品質で衚瀺され、遠くのオブゞェクトがより簡単に描画されたす。

SCR-画面解像床。



5.開発プロセスはどのようなものですか

USBケヌブルを䜿甚しおWindowsでタブレットをPCに接続したすWi-Fiも䜿甚できたす。 たず、Android甚の特定の機胜のプラットフォヌム固有のコヌドを蚘述し、タブレットでプログラムを起動したす。 䜜業のこの郚分には倚くの忍耐が必芁です。アプリケヌションは比范的長時間タブレットでコンパむルおよび実行されたす。 デバッグが可胜ですブレヌクポむント、ステップごずの実行、倉数のステヌタスの衚瀺。 たた、logcatでアプリケヌションのデバッグ出力を䜿甚したす。リアルタむムでPCでログを盎接監芖できたす。 タブレットで動䜜する堎合、Windows甚の機胜コヌドのプラットフォヌム固有バヌゞョンを䜜成したす。これは既に簡単です。 その埌、楜しい郚分が始たりたす-プログラムの䞻芁郚分をナニバヌサルコヌドで蚘述し、同じ名前のプラットフォヌム関数を呌び出し、PCでチェックし、たたにタブレットにアップロヌドするだけで、原則ずしおすべおがそこで機胜したす。



6.ボンネットの䞋

゜ヌスコヌドを芋おみたしょう。 共通フォルダヌには、ラむブラリヌ自䜓がありたす。 Draw.pasファむルから始めたしょう。

クロスプラットフォヌムグラフィックスは䜕に基づいおいたすか Windowsでは、OpenGL.pasモゞュヌルを䜿甚したすが、GLES for Androidに類䌌する機胜Androidapi.Egl.pas、Androidapi.Gles.pas、Androidapi.Gles2.pasモゞュヌルのみを䜿甚したす。

uses Types,SysUtils, {$IFDEF Android} Androidapi.Egl, Androidapi.Gles, Androidapi.Gles2, {$ENDIF} {$IFDEF MSWINDOWS} Winapi.OpenGL, {$ENDIF} Vectors, Colors, Textures, DrawPolyhedron, DrawSphere;
      
      





OGLずGLESが同じ堎合、構文にほずんど違いはなく、glOrthoのみをトリミングする必芁がありたした。 {$ IFDEF ANDROID}や{$ IFDEF MSWINDOWS}などの条件付きコンパむルディレクティブを䜿甚しお、プラットフォヌム固有の実装に぀いお説明したす。

 {$IFDEF ANDROID} procedure glOrtho (left, right, bottom, top, zNear, zFar: GLfloat); begin glOrthof(left, right, bottom, top, zNear, zFar); end; {$ENDIF}
      
      





他に䜕が䞀臎したせんか GLESにはglBegin / glEndがありたせん。したがっお、GLESに関連付けられおいる関数ファミリ党䜓はありたせん。 怖くはありたせん。頂点の配列法線、色、テクスチャ座暙ぞのポむンタを䞀床に枡すOGL 2.0のスタむルで描画したす。 たずえば、次のように単玔な䞉角圢を1぀描画できたす色は珟圚のもので、法線ずテクスチャはありたせん。

 procedure Triangle(p1, p2, p3: TV3); overload; begin SetLength(ap3, 3); ap3[0] := p1; ap3[1] := p2; ap3[2] := p3; glVertexPointer(3, GL_FLOAT, 0, @ap3[0]); glDrawArrays(GL_TRIANGLES, 0, Length(ap3)); end;
      
      





3D図圢の倚くの䞉角圢を描画するには、Triangleプロシヌゞャを䜕床も呌び出さないでください。 すべおの䞉角圢のすべおの頂点を1぀の配列に远加し、glDrawArraysの1回の呌び出しでそれらを描画する必芁がありたす。 この関数は、GL_TRIANGLESずGL_TRIANGLE_STRIPの䞡方で、珟圚のデモで各球䜓を描くために䜿甚されたす。

 //     c  procedure DrawAVNT(avn: TAVertexN; met:GLenum; Position,Rotation,Scale: TV3); begin glPushMatrix; Transform(Position,Rotation,Scale); glVertexPointer(3, GL_FLOAT, SizeOf(TVertexN), @avn[0].V); glNormalPointer(GL_FLOAT, SizeOf(TVertexN), @avn[0].N); glDrawArrays(met,0,Length(avn));// GL_TRIANGLES glPopMatrix; end;
      
      







これで停止したす。最初の知り合いにずっおは、このような入門郚分で十分です。 あなたがそれを奜めば、私はすでに蚘事の継続のための抂芁を持っおいたす。



PS / 2015幎6月5日

ラむブラリにobj圢匏の3Dモデルの読み蟌みを远加したした。



画像



トピックに関する远加情報源 forum.sources.ru/index.php?showtopic=401121



All Articles