Maison  >  Article  >  développement back-end  >  Explication détaillée d'exemples de technologie graphique 3D J2ME

Explication détaillée d'exemples de technologie graphique 3D J2ME

Y2J
Y2Joriginal
2017-05-11 11:32:211785parcourir

La technologie graphique 3D est de plus en plus utilisée dans divers domaines, et bien sûr cela inclut également le domaine J2ME. J2ME nous fournit un package optionnel tel que JSR184, qui est un ensemble d'API qui implémentent la programmation graphique 3D sur les téléphones mobiles. Dans le même temps, avec le développement du matériel des appareils mobiles, de plus en plus de téléphones mobiles prennent en charge ce package optionnel, comme les séries K, S, etc. de Sony Ericsson.
 
Il se trouve que j'ai brièvement étudié le graphisme 3D il y a quelque temps, j'ai donc récemment commencé à étudier Mobile 3D. Ici, je vais partager ce que j'ai appris avec tout le monde, j'espère que cela pourra être utile à tout le monde. j'espère que tout le monde pourra apprendre JSR184 ensemble.
 
Passons aux choses sérieuses. Tout d’abord, imaginons comment nous observons le monde dans la vraie vie. Nous observons à travers nos yeux et nous vivons dans un monde composé d'un système de coordonnées tridimensionnel. Dans Mobile3D, il existe également une classe Monde qui vous permet de construire le monde que vous voulez comme vous le souhaitez. Bien sûr, c'est plus professionnel ici, nous l'appelons « scène » ; comme vos yeux. Vous pouvez définir sa position, son angle et d’autres paramètres pour afficher différentes images.
 
Comment afficher des images 3D dans Mobile 3D ? Tout d'abord, vous devez créer ou charger un modèle 3D, puis définir une série de paramètres tels que l'environnement et la méthode de rendu dans la scène selon les besoins, puis générer et configurer une caméra et ajuster la lumière. vous voulez. Ajustez la position et l’angle dont vous avez besoin. OK, de quoi d'autre as-tu besoin ? Appuyez sur le déclencheur, cette étape s'appelle "rendu" et tout est fait. Cela semble simple et n'est en fait pas difficile.
 
Expliquons ces étapes étape par étape :

Tout d'abord, parlons de l'établissement du modèle Dans Mobile 3D, c'est la même chose que la plupart des API de programmation 3D. Il y en a deux. façons : 1. Générer un fonctionnement en temps réel ; 2 importations de modélisation externes. Étant donné que l'importation de modélisation externe importera les informations d'environnement en même temps, je vous donnerai une introduction détaillée plus tard. Ici, je me concentrerai sur l'introduction de la partie « génération de calculs en temps réel », qui vous aidera à comprendre le principe de fonctionnement de Mobile. 3D. Mobile 3D nous fournit deux classes, VertexArray et VertexBuffer, qui sont utilisées pour enregistrer les informations de sommet du modèle 3D.
 
Parmi elles, la classe VertexArray est plus utile et plus flexible. Il existe trois utilisations les plus couramment utilisées de cette classe 1. Enregistrer les informations de coordonnées de sommet ; Quelqu’un pourrait se demander comment cette classe gère trois choses différentes ? Analysons cette classe.Tout d'abord, le constructeur de cette classe a 3 paramètres : 1. Le nombre d'éléments à inclure dans cette instance ; 2. Le nombre d'éléments à inclure dans chaque élément ; chaque sous-élément. Cela semble expliquer pourquoi cette classe peut être utilisée pour 3 choses.
 
De plus, cette classe a également un ensemble de méthodes plus couramment utilisées (int index, int length, short[] array0). Cette méthode est utilisée pour stocker des données dans l'instance objet de). cette classe. , le premier paramètre fait référence à l'élément à partir duquel commencer ; le deuxième paramètre fait référence au nombre d'éléments à définir et le troisième paramètre est le paramètre réel ;
 
 Ce qui suit est une brève introduction à la classe VertexBuffer, qui est la classe qui enregistre réellement les informations frame des polygones. Modifiez la classe pour créer des graphiques en définissant les positions des sommets, la découverte et les informations cartographiques. Parmi eux,

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

est utilisé pour définir la position du sommet. Dans cette méthode, vous constaterez qu'il y a 3 paramètres. Le premier n'est pas utilisé. Comme mentionné, ce sont les informations de coordonnées du sommet. Les deux derniers sont utilisés pour des opérations telles que le décalage des coordonnées. L'opération est la formule mathématique suivante :
 
 v'=v*s. +b
 
Il existe également une méthode
 
 setNormals(vertexBuffer norm)
 
  pour définir les normales. Il existe également une méthode très importante
 
 setTexCoords(int, VertexArray, float, float[])
 
 En plus du premier paramètre de cette méthode, le last Les trois sont identiques à
 
 setPositions(VertexBuffer v, float s, float[]b)
 
 . N'est-ce pas un peu abstrait ? Laissez-moi vous donner un exemple pour que vous puissiez comprendre.
 

short x = 20;
  
  short y = 20;
  
  short z = 20;
  
  short fx = (short) -x;
  
  short fy = (short) -y;
  
  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
  
  x,y,fz, fx,y,fz, x,y,z, 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.
PRint
ln("vert");}
  
  //发线
  byte[] norm = { 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
数组
是一一对应的)
  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,
  
  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);

Dans le code ci-dessus, je crée toutes les informations de sommet et de face nécessaires pour créer un cube, mais chacun doit noter que le modèle correspondant n'est pas généré ici. La raison est que nous n'avons pas configuré d'autres informations pour générer le modèle. Jetons un coup d'œil à la classe TriangleStripArray. Cette classe est la classe d'informations sur les triangles nécessaires pour former la surface. Toute personne familiarisée avec les graphiques 3D sait que la construction de graphiques 3D. se fait à travers plusieurs surfaces. Pour construire un solide 3D, les surfaces triangulaires sont une méthode plus couramment utilisée. Je ne développerai pas ici le contenu spécifique.
 
Ensuite, nous devons également définir certaines informations sur l'environnement et le matériau. Les classes utilisées ici sont Appearance, Texture2D et Material. Regardons d'abord un exemple :

  appearnce=new Appearance();
//创建帖图
  Texture2D texture=new Texture2D(image2d);
  texture.setBl
end
Color(Texture2D.FUNC_DECAL);
  texture.setWrapping(Texture2D.WRAP_REPEAT,Texture2D.WRAP_REPEAT);
  texture.setFiltering(Texture2D.FILTER_NEAREST,Texture2D.FILTER_NEAREST);
  
  material=new Material();
  material.setColor(Material.D
IF
FUSE, 0xFFFFFFFF);
  material.setColor(Material.SPECULAR, 0xFFFFFFFF);
  material.setShininess(100.0f);
  
  appearnce.setTexture(0,texture);
  appearnce.setMaterial(material);
  
  mesh=new Mesh(vb,tsa,appearnce);
  mesh.setAppearance(0,appearnce);

Je pense personnellement que la classe Appearance est quelque peu similaire à la classe VertexBuffer, et est également titulaire de plusieurs attributs ; Il convient de souligner que les paramètres de la classe Apparence sont bien plus que ce qui est indiqué ci-dessus, et qu'il existe de nombreux paramètres (tels que FOG, qui sont des paramètres de brouillard). Texture2D est une classe de texture Utilisez-la pour définir les informations de texture, par exemple si la texture est en mosaïque. Le nom Matériau désigne le matériau Ici, vous pouvez définir la « réflectivité », la « couleur » et d'autres informations. De plus, je présenterai également ici une méthode de définition des paramètres de rendu

//设置poly模式设置
  PolygonMode polygonMode=new PolygonMode();
  polygonMode.setShading(PolygonMode.SHADE_SMOOTH);
  polygonMode.setCulling(PolygonMode.CULL_NONE);
  
  //生成外貌
  appearnce=new Appearance();
  appearnce.setPolygonMode(polygonMode);

En regardant le code qui vient d'être donné, cela semble plus simple que ce qui précède, n'est-ce pas ? En fait, PolygonMode a déjà fait beaucoup de travail pour nous. Le réglage est très similaire à l'utilisation de Poly dans 3D MAX.
 
Le code de tout à l'heure donne également une classe Mesh, qui est le modèle final que nous souhaitons pour ce type de matériau. Après avoir établi le modèle, nous devons créer la caméra. Dans Camera, je ne présenterai ici que brièvement deux méthodes : setParallel(float, float, float, float) et setPerspective(float, float, float, float). Regardons d'abord setParallel(float, float, float, float). Cette méthode consiste à définir la méthode view de la caméra sur une vue plate ; le premier paramètre consiste à définir la hauteur de l'angle de vue. à la hauteur, pas à l'angle, car voici la vue plate ; le deuxième paramètre est le rapport hauteur/largeur de la caméra, par exemple, notre téléviseur est en 4:3 et le film grand écran est en 16:9, les troisième et quatrième paramètres sont ; respectivement la plage de rendu la plus proche et la plus éloignée. Le même setPerspective définit la caméra sur une vue en perspective, qui est plus proche de l'angle d'observation dans notre vie quotidienne. Les trois derniers paramètres de cette méthode sont les mêmes que les trois derniers paramètres de setParallel, et le premier paramètre est Angle, vous devriez le faire. Il ne faut pas ignorer ici cette question d'angle. Cet angle est un paramètre important pour le calcul de la projection en perspective.
 
Il semble que tout soit mis en place, mais ce n'est pas le cas Jusqu'à présent, nous avons seulement préparé tout le matériel dont nous avons besoin. Jetons un coup d'œil au mécanisme de gestion de Mobile 3D. Les personnes familiarisées avec les graphiques 3D savent que la plupart des logiciels 3D et des API 3D gèrent les matériaux via une structure arborescente. L'avantage est que chaque modèle, groupe de modèles, caméra et autres éléments. En tant que nœud, vous pouvez définir votre propre axe de rotation et d'autres attributs, et vous pouvez vous déplacer en fonction des informations d'animation que vous avez définies. Dans Mobile 3D, il nous est stipulé que le nœud racine de l'arborescence doit être un objet instance de classe World. La caméra et la lumière sont relativement particulières et n'ont pas besoin d'être placées dans cet arbre, mais sont paramétrées via des objets. de la classe Graphics3D

[Recommandations associées]

1 Tutoriel vidéo gratuit XML

Manuel technique XML<.>

3.

Tutoriel vidéo XHTML de Li Yanhui

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn