Graphics, Games and GIS Developing.

Desenvolvimento de aplicações SIG, Jogos e Computação Gráfica.

Developing UTF & DGL Technology presentation

 

- UTF & DGL Overview:

 

The Ultimate Technology to develop new applications.

Project Goals:

Project Defenition:

 

 

 

 

- Download

 

 

- Download UTF_DEMO, program from witch were captured most of the pics posted here (executable, aprox 650kB)

 

 

(FROM THIS PART ON, DOCUMENT IS NOT COMPLETED)

 

UTF - Universal Data Structure definition (Only Graphical parts for now)

 

The base data type in UTF is the identity, in graphical applications, for example, a indentity can be a vehicle or a terrain. The identity is declared as it follows:

typedef struct dg_identity

{

dg_Array Name; //Name of the identity

dg_Array path; //path of the UTF file that descibes the identity, this value is used to load resource files, such as textures and wav files.

dg_CoordSystem *Coord; //a pointer to a structure that contais identity position and orientation, if NULL, identity is not drawn.

dg_DynamicSystem *Dynamics; // pntr to a struct with user defined dynamic chracteristics of the identity, if NULL, no dynamics, only user defined transformations in ControlSystem and/or calculated forces.

dg_ForceSystem *Force; // pntr to a struct containing calculated forces and momentums and user defined or calculated inertial information of the identity, never NULL.

dg_ControlSystem *Control; //pntr to a struct containing user defined transformations (translations and rotations), if NULL, static identity

dg_part *part; // pntr to a list of strutcs with the user defined identiy geometry, if NULL, no geometry

dg_vertec *options; //pntr to a struct with options about the struct, for example may contain information of what kind of intelgence controls this identity , human, AI or network.

dg_tria *tria; //the list of triangles that is actualy rendered, this list is generated by the function: dg_GenTriaIdList(dg_identity *iroot,dg_CoordSystem *camera); then, the triangle list, must be colored, by using the function: dg_ColorTriaList(dg_tria troot, dg_CoordSystem *camera) with parameters identity->tria and dg_MainCamera for the default camera;finaly to render the identity call dg_RenderTriaList(dg_tria *troot, dg_CoordSystem *camera), with parameters identity->troot,dg_MainCamera.*

dg_identity *next; // pointer to the next identity of the list, NULL if any.

};

*-Here is the source code to render and display a identity:

If (camera==NULL) camera=dg_MainCamera //if no user camera defined, set up camera to be the default camera

dg_Clear(3,0.0f,0.0f,0.0f,0.0f); //clear screen, the flag 3 says that the screen must be cleared with sky color, if this flag is set to ZERO, the screen is cleared with the programers defined R G B colors.

dg_Camera(camera); //set up camera in it's correct position

dg_stringHud("01234567891123456789212345678931234567894123456789512345678961234567897123456789",0.0f,0.0f,0.0f,0,0,camera); //display a string in the screen, with color R=0.0;G=0.0;B=0.0 on line 0, row 0

dg_stringHud("DAVID GIL GRAPHIC LIBRARY AND UNIVERSAL FILE FORMAT DEMONSTRATION",1.0f,0.0f,0.0f,24,7,camera); //display a red string in the screen, with color R=1.0;G=0.0;B=0.0 on line 24, row 7 //the screen has 25 lines and 80 rows like in the old MS-DOS LOL J

dg_GenTriaIdList(planta,camera); //generate a triangle from a identity list (planta) is pointer to a list o identities, this function adds the generated triangles to the list pointed by dg_troot AND to the pointer planta->tria

dg_ColorTriaList(dg_troot,camera); // to set up color on each vertex of the triangles

dg_RenderTriaList(dg_troot,camera); //to render the triangles

dg_controlHelp(actid,1,dg_IDHelp,camera); //if dg_IDHelp flag set, this function shows on screen help about controling parts on identity pointed by actid, in this program actid is a pointer to the identity that the user wants to control

 

Eu ja ando metido com o OpenGL á 4 anos, e ja percebo alguma coisinha, nao acho que seja assim tao simples... ja viste a complicação que é só para rodar uma camara??? eu cá tou a usar quaterniões, mas eles bem que podiam fazer uma função do tipo glRotateCamera...

whatever, mesmo assim, apesar de usar o OpenGL para todas as aplicacoes gráficas que eu faço, tenho alguma relutancia em usar as primitivas do OpenGL, são mais lentas do que as programadas manualmente por mim e mais imprecisas.

Alguns dos comandos que para mim são tabus:

glFog

GL_AUTO_NORMAL

GL_SMOOTH

glEnable(LIGHT)

glMaterial....

glLight

etc....

tudo isto são funções que eu não uso, porque são lentas e imprecisas, e substitui-as a todas por funçoes minhas, mais rapidas e mais precisas.

 

glFog é um aborto, embora não seja imprecisa, pois o nevoeiro primitivo do openGL até fica bem feito, esta função é muito mas muito lenta.... extremamente lenta!!!!! o meu nevoeiro fica igual ao do OpenGL mas é muito mais rápido, mesmo muito mais rápido!

 

GL_SMOOTH e GL_AUTO_NORMAL, seguem o mesmo caminho mas pecam ainda mais por serem imprecisas, descobri a sua imprecisão quando no ano passado andei a fazer o projecto do SpaceShuttle em Orbita, o planeta terra ficou com shading quase FLAT.... Quando fiz o Terrain Viewer (http://www.geocities.com/drgportugal/dgtv), descobri, que programando eu os meu agoritmos para fazer smooth shading, a performance e a precisão eram muito melhores. Claro que para isso, tive de deixar de utilizar as funcoes do OpenGL que regulam as luzes, substituindo-as por alternativas minhas, o que claro, ainda veio melhorar mais a performance :))))))))) o que foi uma grande alegria.

Por isso, posso assegurar, que as unicas funcoes do OpenGL que eu uso são:

GluViewPort

glCamera

glClear

glBegin(GL_TRIANGLE_FAN)

glBegin(GL_LINES)

glColor4f

glEnable(GL_TEXTURE_2D) e respectivo glDisable mais comandos que regulam as texturas (embora a substituição destes, tambem esteja programada para breve, devido a imprecisão*)

glEnable(GL_BLEND) e respectivo glDisable (apesar das imprecisões, este não consigo substituir)

glVertex3f

glTextCoord

glEnd

 

Funções do OpenGL, só as básicas e inevitáveis.

Eu prefiro usar as coisas programadas por mim, é a velha história, se queremos alguma coisa bem feita, faça-mos nós mesmos! mas para quem está a começar, aconselho a utilização das primitivas do OpenGL, pois para fazer o que eu faço, tem-se de perceber muito de geometria 3D, transformações de coordenardas e essas coisas (arranjo bibliografia.)

 

Correntemente, estou a programar o simulador de tanques de guerra e paralelamente estou a fazer as minha bibliotecas gráficas que estou a pensar publicar em DLL. depois disso, por exemplo, se quisermos fazer uma janela com um carro a rodar tipo montra, será tão simples como isto:

 

dg_identity *root=dg_ReadIdentity("carro.utf"); //para ler o ficherio

dg_RotGen(root,0.0f,1.0f,0.0f,5.0f); //para rodar o carro 5 graus em torno do eixo dos y (eixo vertical)

dg_triangle_root=GenerateID(root); //para gerar os triangulos para a geometria do carro.

dg_render_triangle_list(root); //para apresentar o carro no ecran

claro que a este codigo, teria de se acrescentar o as inicializacoes e o Timer para correr este codigo de tanto em tanto tempo, para rodar o carro de 5 em 5 graus em cada frame.

Para quem começa aconselho vivamente a explorar um exemplo que vem no CD1 do MSDN que se chama "AUXDEMO" foi mexendo e remexendo com este exemplo que eu dei os primeiros paços.

bem, este testamento todo foi so para precisar o quanto eu percebo ou não do assunto... sempre que precisar de algum exclarecimento sobre o OpenGL, diga-me alguma coisa que eu respondo com boa vontade :) Já algumas pessoas em Portugal tentaram envolver-se em OpenGL mas quase todas desistiram, alem de mim, so conheço mais um rapaz que já estava nisto antes de eu entrar, mas que está a desenvolver um programa de modelação 3D que se vai chamar kshara,é do tipo 3DStudio Max e tipo MAYA. Seja como for, espero não continuar sozinho durante muito mais tempo.

Um abraço

David Gil

 

Hello,

My name is David Gil and I program in OpenGL for around 4 years, and since then, It has been my favourite Hobby.

I've just arrived here at this list and I'm just writing this mail to presentate my self to you expecialists. I'm also seeking someone here in Lisbon, Portugal to share knowledge and interests in OpenGL and game developping.

Here a list of what I've been doing last 4 years:

1-C.A.S.A. Flight Simulator (1998/1999) (http://alfa.ist.utl.pt/~l43398)- My first and the most complex program, a fine 3D Flight Simulator, aircraft and scenery readed from file, includes another program (RCDesigner) to edit aircrafts, the Aircraft dynamics are calculated from it's user defined geometry.

2-Crazy Wings (Summer 2000) - Just a 2D small game to fly a aircraft from a carrier and fire bombs and rockets over enemy targets on an Island, Some of the enemy targets (tanks and boats) can fire up on the player's aircraft.

3-Orbiter Project(Summer 2001)

4-Terrain Viewer (Summer 2001) (http://www.geocities.com/drgportugal/dgtv) - Tool to visualize real 3D landscapes

5-Tank Simulator (Winter 2001/2002) (On developping) Just to explore an real landscape while shooting enemy targets.

I'm currently working on a Tank Simulator. And I want to use realistic terrain on it! But I'm yet on that fase in witch I'm defining my data structures and making the functions to read, display, control and simulate them.

I'm reading Triangles, Quads and Beams from file, and I hope that is enougth to describe a tank! Blended and texture parts are enabled! When I start making the scenery, I'll have to read other kind of parts, such as the terrain, roads, trees, houses, walls and things like that, but I'm not Yet at that state. I'm still developing the tank shape, control and simulation.

 

Best Regards and Thank you

David Gil

 

COPYRIGHT 2002 DAVID GIL