検索
ホームページバックエンド開発XML/RSS チュートリアルJ2ME Mobile 3D 入門チュートリアル シリーズの記事の 1 つ

3Dグラフィックス技術は様々な分野で活用が進んでいますが、もちろんJ2ME分野も含まれます。 J2ME は、携帯電話上で 3D グラフィックス プログラミングを実装する API セットである JSR184 などのオプション パッケージを提供します。同時に、モバイル デバイスのハードウェアの発展に伴い、このオプション パッケージをサポートする携帯電話がますます増えています。 EricCSSonのKシリーズ、Sシリーズなど

たまたま、少し前に 3D グラフィックスについて勉強したので、最近モバイル 3D について勉強し始めました。これが皆さんのお役に立てれば幸いです。 JSR184を一緒に学ぶことができます。

それでは、本題に入りましょう。まず、私たちが現実の世界をどのように観察しているかを想像してみましょう。私たちは目を通して観察し、三次元の座標系で構成される世界に住んでいます。 Mobile3D には、必要な世界を自由に構築できる World クラスもあり、3D グラフィックスではこれを「シーン」と呼びます。目のように位置、角度、その他のパラメータを設定して、さまざまな画像を表示できます。

モバイルで 3D映像を3Dで表示するにはどうすればよいでしょうか?まず、3D モデルを作成またはロードし、必要に応じてシーン内の環境やレンダリング方法などの一連のパラメーターを設定します。次に、カメラを生成してセットアップし、必要な光を調整し、必要なものを調整します。位置と角度が必要です。 OK、他に何が必要ですか?シャッターを押すこのステップは「レンダリング」と呼ばれ、すべてが完了します。これは簡単なようで、実際には難しくありません。

これらの手順を順を追って説明しましょう:

まず、モバイルでのモデルの確立について話しましょう。 3D は、ほとんどの 3D プログラミング API と同じです。1. リアルタイム操作の生成。 外部モデリングのインポート。外部モデリングのインポートでは環境情報も同時にインポートされるので、詳しくは後ほど紹介します。ここではMobileの理解に役立つ「リアルタイム計算生成」の部分を中心に紹介します。 3D の仕組み。 Mobile 3D には、3D モデルの頂点情報を保存するために使用される VertexArray と VertexBuffer という 2 つのクラスが用意されています。

その中には VertexArray このクラスには多くの用途があり、より柔軟です。このクラスの最も一般的な用途は 3 つあります。1 つは頂点座標情報を保存するためです。 通常情報を保存します。 3 マップ情報を保存します。このクラスが 3 つの異なるものをどのように管理しているのかと疑問に思う人もいるかもしれません。このクラスを分析してみましょう。まず、このクラスのコンストラクターには 3 つのパラメーターがあります。 このインスタンスに含まれる要素の数 2 各要素に含まれる要素の数 3 各サブ要素が占めるバイト数。これにより、このクラスが 3 つの用途に使用できる理由が明らかになったようです。

さらに、このクラスには、より一般的に使用されるメソッド set(int index, int length, short [] array0) もあり、このメソッドは、このクラスのインスタンス オブジェクトにデータを格納するために使用されます。最初のパラメーターは数値を参照します。要素から開始します。2 番目のパラメータは設定する要素の数を示します。3 番目のパラメータは実際の設定です。

実際にポリゴンのフレーム情報を保存するクラスであるVertexBufferクラスについて簡単に紹介します。頂点位置、検出、マップ情報を設定してグラフィックスを作成するようにクラスを変更します。このうち、

setPositions(VertexBuffer v, float s, float[]b)

このメソッドでは、言うまでもなく、3つのパラメータがあることがわかります。最後の 2 つは、座標オフセットやその他の演算を実行するために使用されます。演算は、

v'=v*s+b


setNormals(vertexBuffer Norm) というものもあります。

メソッドWireを設定するメソッド。非常に重要なメソッドもあります

setTexCoords(int, VertexArray, float, float[])

最初のパラメータに加えて、このメソッドの最後の3つのパラメータはsetPositions(VertexBuffer v, float s, float[] b )

も同様で、最初のパラメータは開始要素番号です。これは少し抽象的ではありませんか?理解できるように例を挙げてみましょう。 short x = 20;

short fz = (short ) -z;

// 固定小数点座標
short[] vert = {x,y,z, fx,y,z, x,fy,z, fx, fy,z, //D

fx,y, fz, x,y,fz, fx,fy,fz, x,fy,fz, //C

fx,y,z, fx,y,fz, fx,fy,z, fx,fy,fz, / /B

x,y,fz, x,y,z, x,fy,fz, x,fy,z, //F

, fx,y ,z, //A

x,fy,z, fx,fy,z, x,fy,fz, fx,fy,fz} //E

try{vertArray=new VertexArray(vert .length/3) ,3,2);
vertArray.set(0,vert.length/3,vert);
}catch(Exception e){System.out.PRintln("vert");}

// 髪の生え際
byte[] ノルム = { 0,0,127, 0,0,127, 0,0,127, 0,0,127,

0,0,-127, 0,0,-127, 0,0,-127, 0,0,- 127,

-127,0,0, -127,0,0, -127,0,0, -127,0,0,

127,0,0, 127,0,0, 127,0, 0, 127,0,0,

0,127,0, 0,127,0, 0,127,0, 0,127,0,

0,-127,0, 0,-127,0, 0,-127,0, 0 ,-127,0};

try{normArray=new VertexArray(norm.length/3,3,1);
normArray.set(0,norm.length/3,norm);
}catch(Exception e) {System.out.println("norm");e.printStackTrace();}

//画像上の点に対応する頂点を与える(vert配列とtex配列は1対1対応)
short[ ] tex = { 1, 0, 0, 0, 1, 1, 0, 1,

1, 0, 0, 0, 1, 1, 0, 1,

1, 0, 0, 0, 1, 1、0、1、0、0、0、1、1、0、1、

1、0、0、0、1、1、0、1、

1、0、0、0、1、 1, 0, 1 };

try{
texArray=new VertexArray(tex.length/2,2,2);
texArray.set(0,tex.length/2,tex);
}catch(Exception e ){System.out.println("tex");}

//立方体を作成する
vb=new VertexBuffer();
vb.setPositions(vertArray,1.0f,null);
vb.setNormals(normArray);
vb.setTexCoords(0,texArray,1.0f,null);

上記のコードでは、立方体の作成に必要な頂点と面の情報をすべて作成していますが、ここでは対応するモデルが生成されないことに皆さん注意してください。その理由は、モデルを生成するために他の情報を設定していないためです。TriangleStripArray クラスを見てみましょう。このクラスは、3D グラフィックスの構築に必要な三角形の情報クラスであることを知っています。複数のサーフェスを使用して 3D ソリッドを構築するには、三角形のサーフェスがより一般的に使用される方法です。ここでは具体的な内容については詳しく説明しません。

次に、環境とマテリアルの情報も設定する必要があります。ここで使用するクラスは、Appearance、Texture2D、およびマテリアルです。まずは例を見てみましょう:

Appearance=newAppearance();

//テクスチャを作成する
Texture2D texture=new Texture2D(image2d);
texture.setBlendColor(Texture2D.FUNC_DECAL);
texture.setWrapping(Texture2D. WRAP_REP EAT ,Texture2D.WRAP_REPEAT);
texture.setFiltering(Texture2D.FILTER_NEAREST,Texture2D.FILTER_NEAREST);

material=new Material();
material.setColor(material.DIFFUSE, 0xFFFFFFFF);
material.setColor(material. SPECULAR, 0xFFFFFFFF);
material.setShininess(100.0f);
Appearance.setTexture(0,texture);Appearance.setMaterial(material);
mesh=new Mesh(vb,tsa,Appearance);
mesh.setAppearance( 0 ,Appearance);

個人的には、Appearance クラスは VertexBuffer クラスに似ていると感じており、複数の属性の保持者でもあります。ここで強調すべきことの 1 つは、Appearance クラスの設定は指定されたものよりもはるかに多いということです。上記以外にも多くの設定があります (たとえば、FOG は霧の設定です)。 Texture2D は、テクスチャをタイル化するかどうかなどのテクスチャ情報を設定するために使用します。マテリアルという名前は材質を意味します。ここでは「反射率」や「色」などの情報を設定します。また、ここではレンダリングパラメータの設定方法も紹介します

//ポリモード設定を行う
PolygonMode PolygonMode=new PolygonMode();
polygonMode.setShading(PolygonMode.SHADE_SMOOTH);
polygonMode.setCulling(PolygonMode.CULL_NONE) ;

//外観を生成する
Appearance=newAppearance();
Appearance.setPolygonMode(polygonMode);

先ほどのコードを見ると、上記のコードよりも簡単に見えますね。実際、PolygonMode はすでに多くの作業を行ってくれています。この設定は、3D MAX でのポリの使用に非常に似ています。

今のコードは、このタイプのマテリアルに必要な最終モデルである Mesh クラスも提供します。モデルを確立したら、カメラを作成する必要があります。 Camera では、setParallel(float, float、float、float) および setPerspective(float、float、float、 浮く)。まず setParallel(float, float, float, float) このメソッドは、カメラのビュー メソッドをフラット ビューに設定します。最初のパラメータは画角の高さを設定します。これはフラット ビューであるため、角度ではなく高さに焦点を当てます。カメラの幅と高さの比率。たとえば、テレビは 4:3、ワイドスクリーン ムービーは 16:9 です。3 番目と 4 番目のパラメータは、それぞれ最も近いレンダリング範囲と最も遠いレンダリング範囲です。同じ setPerspective は、カメラを日常生活での観察角度に近い透視図に設定します。このメソッドの最後の 3 つのパラメーターは setParallel の最後の 3 つのパラメーターと同じで、最初のパラメーターは Angle です。ここでこの角度の問題を無視しないでください。この角度は遠近法の投影を計算するための重要なパラメータです。

すべてが準備できているように見えますが、実際はそうではありません。これまでのところ、必要な材料がすべて準備されています。モバイルを見てみましょう 3D のガバナンス メカニズムは、3D 描画に精通している人なら誰でも、ほとんどの 3D ソフトウェアが 3D であることを知っています。 API はマテリアルをツリー構造で管理します。この利点は、各モデル、モデル グループ、カメラ、その他の要素がノードとして独自の回転軸やその他の属性を設定でき、設定されたアニメーション情報に従うことができることです。 。モバイルで 3D では、ツリー構造のルート ノードが World クラスのインスタンス オブジェクトである必要があると規定されており、カメラとライトはこのツリーに配置する必要はなく、代わりに Graphics3D のオブジェクトを通じて設定されます。 class (ただし、そうである必要はありません

上記は、J2ME Mobile 3D 入門チュートリアル シリーズの記事の 1 つです。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) を参照してください


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
XMLベースのRSSフィードを解析して利用する方法XMLベースのRSSフィードを解析して利用する方法Apr 16, 2025 am 12:05 AM

rssfeedsusexmltosyndicatecontent; parsingtheminvolvesloadingxml、navigating structure、and extractingdata.applicationsincludebuildingnewsaggretationsandtrackingpodcastepisodes。

RSSドキュメント:お気に入りのコンテンツをどのように配信するかRSSドキュメント:お気に入りのコンテンツをどのように配信するかApr 15, 2025 am 12:01 AM

RSSドキュメントは、XMLファイルを介してコンテンツの更新を公開することで機能し、ユーザーはRSSリーダーを介して通知をサブスクライブして受信します。 1。コンテンツパブリッシャーは、RSSドキュメントを作成および更新します。 2。RSSリーダーは、XMLファイルに定期的にアクセスして解析します。 3.ユーザーは、更新されたコンテンツを閲覧および読み取ります。使用例:TechCrunchのRSSフィードを購読するには、RSSリーダーへのリンクをコピーするだけです。

XMLを使用したフィードの構築:RSSの実践ガイドXMLを使用したフィードの構築:RSSの実践ガイドApr 14, 2025 am 12:17 AM

XMLを使用してRSSFeedを構築する手順は次のとおりです。1。ルート要素を作成してバージョンを設定します。 2.チャネル要素とその基本情報を追加します。 3.タイトル、リンク、説明を含むエントリ要素を追加します。 4. XML構造を文字列に変換して出力します。これらの手順を使用すると、有効なRSSFeedをゼロから作成し、リリース日や著者情報などの追加要素を追加することにより、機能を強化できます。

RSSドキュメントの作成:ステップバイステップのチュートリアルRSSドキュメントの作成:ステップバイステップのチュートリアルApr 13, 2025 am 12:10 AM

RSSドキュメントを作成する手順は次のとおりです。1。要素を含むルート要素を使用して、XML形式で書き込みます。 2。チャネル情報を説明する要素など。 3.要素を追加します。それぞれがコンテンツエントリを表します。 4.オプションで、コンテンツを濃縮するための要素を追加します。 5. XML形式が正しいことを確認し、オンラインツールを使用してパフォーマンスを最適化し、コンテンツを更新します。

RSSにおけるXMLの役割:シンジケートコンテンツの基礎RSSにおけるXMLの役割:シンジケートコンテンツの基礎Apr 12, 2025 am 12:17 AM

RSSにおけるXMLの中心的な役割は、標準化された柔軟なデータ形式を提供することです。 1. XMLの構造とマークアップ言語の特性により、データ交換とストレージに適しています。 2。RSSはXMLを使用して標準化された形式を作成して、コンテンツの共有を容易にします。 3. RSSでのXMLの適用には、タイトルやリリース日などのフィードコンテンツを定義する要素が含まれます。 4.利点には標準化とスケーラビリティが含まれ、課題にはドキュメントの冗長および厳密な構文要件が含まれます。 5.ベストプラクティスには、XMLの有効性の検証、シンプルな状態を維持し、CDATAの使用、定期的に更新されます。

XMLから読み取り可能なコンテンツまで:RSSフィードを分類しますXMLから読み取り可能なコンテンツまで:RSSフィードを分類しますApr 11, 2025 am 12:03 AM

rssfeedsarexmldocumentsusedforcontentaggregationanddistribution.totransformthemintoreadablecontent:1)parsethexmlusinglibrarieslibrarieslibrarieslibrarieslibrarieslibrarieslibrarieslibraries.2)heandlederentrssiversions andpotentialparsingerrors.3)変換された拡張型拡張型のfienderidederidrederidederidederidedionderiondiontiontiontiontiontiontiontiontional

JSONに基づいたRSSの代替品はありますか?JSONに基づいたRSSの代替品はありますか?Apr 10, 2025 am 09:31 AM

JSonFeedは、JSONベースのRSSの代替品であり、その利点のシンプルさと使いやすさがあります。 1)JSonFeedはJSON形式を使用しますが、これは簡単に生成して解析できます。 2)動的生成をサポートし、最新のWeb開発に適しています。 3)JSonFeedを使用すると、コンテンツ管理の効率とユーザーエクスペリエンスが向上する可能性があります。

RSSドキュメントツール:フィードの構築、検証、公開RSSドキュメントツール:フィードの構築、検証、公開Apr 09, 2025 am 12:10 AM

RSSFeedsを構築、検証、公開する方法は? 1。ビルド:Pythonスクリプトを使用して、タイトル、リンク、説明、リリース日など、RSSFeedを生成します。 2。検証:FeedValidator.orgまたはPythonスクリプトを使用して、RSSFeedがRSS2.0標準に準拠しているかどうかを確認します。 3.公開:RSSファイルをサーバーにアップロードするか、フラスコを使用してRSSFeedを動的に生成および公開します。これらの手順を通じて、コンテンツを効果的に管理および共有できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール