Professional Documents
Culture Documents
Resumo almente a maioria dos jogos nesta plataforma são em 2D, mas já
existem diversas iniciativas para desenvolvimento em 3D. Para fa-
Nos últimos anos, jogos 3D para celulares têm recebido significa- cilitar o desenvolvimento dos jogos, utilizam-se os motores, que
tiva atenção dos pesquisadores e incentivos fiscais do estado bra- são bibliotecas de software responsáveis pelos ciclos de interação
sileiro. Ainda longe da qualidade gráfica dos jogos para compu- existentes em um jogo, as quais são capazes de tratar a maioria das
tadores e consoles, os jogos para celulares, que sofrem pela se- necessidades existentes na sua implementação. A Mobile 3D Game
vera limitação de memória e processamento dos aparelhos moder- Engine (M3GE) [Gomes and Pamplona 2005] é um motor de jo-
nos, caminham a passos lentos. Recentes investidas contra es- gos para telefones celulares baseado na Java Mobile 3D Graphics
tas difuldades criaram motores de jogos [Gomes and Pamplona API (M3G) [Nokia 2004] e já possui diversas funcionalidades im-
2005], [de Albuquerque Macêdo Jr. 2005] com a finalidade de faci- plementadas, tais como, importação e renderização de ambientes
litar o desenvolvimento e otimizar os jogos. Este trabalho apresenta 3D, criação de câmeras, tratamento de eventos, movimentação de
a implementação do módulo de importação e visualização de Per- personagens e câmeras pelo cenario e tratamento de colisão. Cabe
sonagens Não Jogador (PNJs) em um dos motores de jogos citados ressaltar que a M3GE é a primeira implementação livre de motor
anteriormente, o Mobile 3D Game Engine (M3GE). Desta forma, de jogos 3D em Java que se tem notı́cia.
foi adicionado o suporte a um formato de modelos chamado Quake
II’s Models (MD2), muito utilizado para a modelagem de perso- À medida que os jogos em dispositivos móveis vão se tornando
nagens para jogos, pois incorpora recursos de animação quadro a mais complexos e sofisticados, o nı́vel de realismo gráfico deverá
quadro. O trabalho não discute questões relativas à inteligência dos levar os jogadores a acreditar que os jogos ocorrem em mundos
PNJs. São apresentados detalhes da implementação de importação muito mais realistas. Um componente importante desse crescente
e visualização dos modelos, bem como a demonstração de exem- nı́vel de realismo são os Personagens Não Jogador (PNJs). Os PNJs
plos e testes de desempenho de forma a validar a solução proposta. são os personagens presentes no jogo e que não são controlados
pelo jogador, mas que se relacionam de alguma forma com ele. Por
Keywords:: Personagem não Jogador (PNJ), Motores de Jogos, exemplo, num jogo de primeira pessoa, os PNJs são os personagens
M3G, Dispositivos Móveis, MD2 inimigos do jogador, que devem ser acertados por seus disparos.
Armazena informações
Mesh
sobre coord. de
vértices, normais, etc.
VertexBuffer
Define um sub-mesh
(lista de triângulos)
IndexBuffer IndexBuffer
Referências O GRE 3D, 2005. Ogre 3d: open source graphics engine. http:
//www.ogre3d.org, Acesso em: 15 jul. 2007.
B YL , P. B. 2004. Programming believable characters for computer PAIVA , F., 2003. O jogo das operadoras. http:
games. Charles River Media, Massachusetts. //www.teletime.com.br/revista/55/capa.htm,
Acesso em: 05 abr. 2006.
C ARANDINA , R., AND M ARTINS , T. 2006. Suporte a jogos multi-
usuário em engine 3d para dispositivos móveis. Tech. rep., Cen- PARALELO C OMPUTAÇ ÃO, 2004. Fly3d.com.br. http://www.
tro Universitário Senac, São Paulo, Junho. fly3d.com.br, Acesso em: 17 abr. 2006.
C ONITEC C ORPORATION, 2004. 3d gamestudio / a6. http:// P ESSOA , C. A. C. 2001. wGEM. Master’s thesis, UFPE, Recife.
conitec.net/a4info.htm, Acesso em: 17 abr. 2006.
S ÁNCHEZ , D., AND DALMAU , C. 2004. Core techniques and
C RYSTAL S PACE, 2004. Crystal space 3d. http://crystal. algorithms in game programming. New Riders, Indianapolis.
sourceforge.net, Acesso em: 17 abr. 2006.
S ANTEE , A. 2005. Programação de jogos com C++ e DirectX.
DE A LBUQUERQUE M AC ÊDO J R ., I. J. 2005. moge – mobile Novatec Editora, São Paulo.
graphics engine: o projeto de um motor gráfico 3d para a criação
de jogos em dispositivos móveis. Tech. rep., UFPE.
E CLIPSE E NTERTAINMENT, 2004. Welcome to the home of gene-
sis3d. http://www.genesis3d.com/, Acesso em: 17 abr.
2006.
E LEMENTS I NTERACTIVE, 2007. Edgelib mobile game engine.
http://www.edgelib.com/, Acesso em: 25 ago. 2007.
F INNEY, K. C. 2004. 3D game programming, all in one. Thomson
Course Technology, Boston.
FISHLABS E NTERTAINMENT G MB H, 2007. Fishlabs 3d mobile
java games. http://www.fishlabs.net/en/engine/
index.php, Acesso em: 25 ago. 2007.
G OMES , P. C. R., AND PAMPLONA , V. F. 2005. M3ge: um motor
de jogos 3d para dispositivos móveis com suporte a mobile 3d
graphics api. In SBGames2005 - Simpósio Brasileiro de Jogos
para Computador e entretenimento Digital, Anais do WJOGOS
2005, SBC, 55–65.
G UILIANO , S., 2005. Autonomous productions. http://
www.autonomousproductions.com/, Acesso em: 14
set. 2005.
H ARRISON , L. T. 2003. Introduction to 3D game engine design
using directx 9 and C#. Springer-Verlag, New York.
datatypes
Md2Frame
Md2Vect3
Md2Vertex + scale: Md2Vect3
+ v: float[3] + verts + translate: Md2Vect3 + scale + x: float
+ y: float
+ normalIndex: short + name: byte[16] + translate + z: float
+ Md2Vertex(float, short) + verts: Md2Vertex[]
+ Md2Vect3(float, float, float)
+ Md2Frame(Md2Vect3, Md2Vect3, byte, Md2Vertex)
+ listFrames
Md2GlCmd
Md2TextCoord Md2Skin Md2Triangle + s: float
+ s: short + name: char[64] + vertex: short[3] + t: float
+ t: short + Md2Skin(char) + st: short[3] + index: int
+ Md2TextCoord(shot, short) + Md2Triangle(short, short) + Md2GlCmd(float, float, int)
+ listSkins
+ listTextCoords + listTriangles + listGLCommands
md2Loader
Md2Data Md2Header
+ listSkins: Md2Skin[ ] - modelId: int
+ listTextCoords: Md2TextCoords[ ] - version: int
+ listtriangles: Md2Triangle[ ] - skinWidth: int
+ listGLCommands: Md2GlCmd[ ] - skinHeight: int
+ listFrames: Md2Frame[ ] - frameSize: int
+ Md2Data(DataInputStream, Md2Header) - numSkins: int
- read(DataInputStream, Md2Header): void - numVertices: int
- readSkins(Md2LittleEndianDataInputStream, Md2Header): void - numTextcoords: int
- readTextCoords(Md2LittleEndianDataInputStream, Md2Header): void - numTriangles: int
- readTriangles(Md2LittleEndianDataInputStream, Md2Header): void - numGlCommands: int
- readGLCommands(Md2LittleEndianDataInputStream, Md2Header): void - numFrames: int
- readFrames(Md2LittleEndianDataInputStream, Md2Header): void - offsetSkins: int
+ md2Data - offsetTextcoords: int
- offsetTriangles: int
- offsetFrames: int
- offsetGlCommands: int
Md2Normal - offsetEnd: int
+ NORMAL: float[] + Md2Header(DataInputStream)
- read(DataInputStream): void
+ getModelId(): int
Md2Model + getVersion():int
- SCALE: int = 1000 + getGLGommandsOffset(): int
- md2header: Md2Header + md2Header + getGLCommandsCount(): int
Md2LittleEndianDataInputStream - md2Data: Md2Data + getVertexCount(): int
- din: DataInputStream - model: Mesh + getFramesOffset(): int
+ Md2LittleEndianDataInputStream(InputStream) + Md2Model(String) + getFrameCount(): int
+ read(): int + Md2Model(String, String, int) + getFrameSize(): int
+ readFull(byte): void + getModel(): Mesh + getNumFrames(): int
+ readFull(byte, int, int): void - readFile(String): int + getNumGLCommands(): int
+ skipBytes(int): int + getMd2Header(): Md2Header + getNumSkins(): int
+ readBoolean(): boolean + getMd2Data: Md2Data + getNumTextCoords(): int
+ readByte(): byte + TriangleIndices(): int[ ] + getNumTriangles(): int
+ readUnsignedByte(): int + VertexPositions(int): short[ ] + getNumVertices(): int
+ readShrt(): short + VertexPositions(int, int): short[ ] + getOffsetEnd(): int
+ readUnsignedShort(): int + Normals(int): short[ ] + getOffsetFrames(): int
+ readChar(): char + Normals(int, int): short[ ] + getOffsetGLCommands(): int
+ readInt(): int + TextCoords(): short[ ] + getOffsetSkins(): int
+ readLong(): long + TextCoordsByGlcmd(): int[ ] + getOffsetTextCoords(): int
+ readFloat(): float + TriangleLengths(int): int [ ] + getOffsetTriangles(): int
+ readDouble(): double + TriangleLengthsByGlcmds(): int [ ] + getSkinHeight(): int
+ readUTF(): String + TriangleIndicesByGlcmds(): int [ ] + getSkinWidth(): int