Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Generacion de terrenos

Iniciado por CoLSoN2, 05 de Noviembre de 2002, 07:54:04 PM

« anterior - próximo »

CoLSoN2

                                Vereis, e creado un programa en c++ builder que carga un heightmap bmp y exporta un .map , donde están los vertices y los triangulos (osea los indices). asi como otras cosas que no son de interes.
Vereis, el problema que tengo es el siguiente: la rutina de creacion de triangulos parece estar mal por como renderiza, pero no veo donde está el fallo... Shots del render (renderizo usando DrawPrimitiveUP, poniendo un array de vertices creado de la lista de vertics y de triangulos. Vaya, que eso no es).

Wireframe:

Aquí veis que uno de los fallos está al final de las filas, ya que se enlaza el ultimo triangulo con el primero de la otra...

Sólido:

Segundo fallo, solo renderiza la mitad de triangulos (¿?)

El codigo del generador es el siguiente:


      char aux[250];



       numTriang = (width-1)*(height-1)*2;

       numVertices = (width-1)*(height-1)*4;

       numIndex = (width-1)*(height-1)*2*3;



       if (numIndex > 65000)

               ShowMessage("ERROR! Demasiados indices, utiliza una textura más pequeña");

       else

       {

        vertices = new sVERTEX[numVertices];

        triangles = new sTRIANGLE[numTriang];



       // generacion

       Byte *ptr;  

       Byte *ptr2;

        for (int i = 0;i<(height-1);i++)

        {

             ptr = (Byte *)map->Picture->Bitmap->ScanLine[i];

             ptr2 = (Byte *)map->Picture->Bitmap->ScanLine[i+1];

             for (int j = 0;j<(width-1);j++)

             {

                   GenerateQuad(i,j,ptr[j],ptr[j+1],ptr2[j],ptr2[j+1]);

             }

        }

        unsigned int current = 0;

        for (unsigned int i = 0; i < numTriang; i+=2)

        {

            triangles[i].v1 = current;

            triangles[i].v2 = current+1;

            triangles[i].v3 = current+2;

            triangles[i+1].v1 = current;

            triangles[i+1].v2 = current+2;

            triangles[i+1].v3 = current+4;

            current+=4;

        }



// y generateQuad es...



void GenerateQuad(int z, int x, Byte h1, Byte h2, Byte h3, Byte h4)

{

       vertices[current].x = x;

       vertices[current].y = h1;

       vertices[current].z = z;

       vertices[current].u = 0.0f;

       vertices[current].v = 0.0f;

       current++;

       vertices[current].x = x+1;

       vertices[current].y = h2;

       vertices[current].z = z;

       vertices[current].u = 1.0f;

       vertices[current].v = 0.0f;

       current++;

       vertices[current].x = x+1;

       vertices[current].y = h4;

       vertices[current].z = z+1;  

       vertices[current].u = 1.0f;

       vertices[current].v = 1.0f;  

       current++;

       vertices[current].x = x;

       vertices[current].y = h3;

       vertices[current].z = z+1;

       vertices[current].u = 0.0f;

       vertices[current].v = 1.0f;

       current++;

}




Yo creía que en "             triangles[i+1].v3 = current+4;" había un fallo, ya que debería haber un 3 en vez de 4. Pero al hacerlo, renderiza así:
y ademas, si mueves la camara algunos triangulos desaparecn y otros aparecen .. Tengo el backculling ese desactivao, y el far y near bien puestos.


Para que entendais un poco como funciona, os dire ke ptr = (Byte *)map->Picture->Bitmap->ScanLine; toma los valores de los pixeles de esa fila, para las alturas. (aunque recordemos que el fallo esta en los x & z) Creo tanto los vertices como los triangulos por quads, osea de 4 en 4. Algo así:


NOTa: ande pone 5 tien k pone 7

Realmente estoy atascao con esto xq no se ke leches pasa, si alguien sabe ke leches pasa...

thx

pd: si kereis el resultado de un .map de un heightmap de 4x4 (para ke no aia tanta cosa) es esto:


STARSHIP ARENA MAP FILE

Width: 4

Height: 4

Vertices: 36

0.000000 0.000000 0.000000 0.000000 0.000000

1.000000 0.000000 0.000000 1.000000 0.000000

1.000000 0.000000 1.000000 1.000000 1.000000

0.000000 0.000000 1.000000 0.000000 1.000000

1.000000 0.000000 0.000000 0.000000 0.000000

2.000000 0.000000 0.000000 1.000000 0.000000

2.000000 0.000000 1.000000 1.000000 1.000000

1.000000 0.000000 1.000000 0.000000 1.000000

2.000000 0.000000 0.000000 0.000000 0.000000

3.000000 0.000000 0.000000 1.000000 0.000000

3.000000 0.000000 1.000000 1.000000 1.000000

2.000000 0.000000 1.000000 0.000000 1.000000

0.000000 0.000000 1.000000 0.000000 0.000000

1.000000 0.000000 1.000000 1.000000 0.000000

1.000000 0.000000 2.000000 1.000000 1.000000

0.000000 0.000000 2.000000 0.000000 1.000000

1.000000 0.000000 1.000000 0.000000 0.000000

2.000000 0.000000 1.000000 1.000000 0.000000

2.000000 0.000000 2.000000 1.000000 1.000000

1.000000 0.000000 2.000000 0.000000 1.000000

2.000000 0.000000 1.000000 0.000000 0.000000

3.000000 0.000000 1.000000 1.000000 0.000000

3.000000 0.000000 2.000000 1.000000 1.000000

2.000000 0.000000 2.000000 0.000000 1.000000

0.000000 0.000000 2.000000 0.000000 0.000000

1.000000 0.000000 2.000000 1.000000 0.000000

1.000000 0.000000 3.000000 1.000000 1.000000

0.000000 0.000000 3.000000 0.000000 1.000000

1.000000 0.000000 2.000000 0.000000 0.000000

2.000000 0.000000 2.000000 1.000000 0.000000

2.000000 0.000000 3.000000 1.000000 1.000000

1.000000 0.000000 3.000000 0.000000 1.000000

2.000000 0.000000 2.000000 0.000000 0.000000

3.000000 0.000000 2.000000 1.000000 0.000000

3.000000 0.000000 3.000000 1.000000 1.000000

2.000000 0.000000 3.000000 0.000000 1.000000

Triangles: 18

0 1 2

0 2 3

4 5 6

4 6 7

8 9 10

8 10 11

12 13 14

12 14 15

16 17 18

16 18 19

20 21 22

20 22 23

24 25 26

24 26 27

28 29 30

28 30 31

32 33 34

32 34 35

FILE END



                               
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

CoLSoN2

                                aprovcho pa decir, ke en el shot en blanco y negro, despues de acer ese cambio, no renderiza 1 triang si 1 no, renderiza bien en ese aspecto.                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

Mars Attacks

                                Casi que me aventuraría a darte un par de hipótesis, cada una para cada parte de tu problema:
Para el problema del "1 sí, 1 no" diría que la cosa está en que pones las normales de las caras una hacia arriba y otra hacia abajo.
Para el problema de la unión del último triángulo con el primero, deberías desactivar la creación de triángulos una vez has recorrido cada columna del mapa, y volverlo a activar al comenzar la siguiente.
En fin, espero que te sirva de alguna ayuda.                                

CoLSoN2

                                weno, normales ni uso xq no uso nada de lighting.
y lo otro, y lo de 1 si 1 no, se corrige con el cambio ese que hago del 4 por el 3. (si ves el otro shot, el que se ven solo "trozos volantes" de terreno). Pero claro, ahora el fallo es ese , ke se ven solo trozos :                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

Lord Trancos

                                Lo de que "Yo creía que en " triangles[i+1].v3 = current+4;" había un fallo, ya que debería haber un 3 en vez de 4", creo q tenias razon, ahi hay un fallo, tiene que haber un 3.

En cuanto lo que dices de q cuando lo cambias te salen segmentos de terreno en el aire y aparecen y desaparecen.... ya se que dices que tienes el culling desactivado.... pero por la imagene ese problema tienes tienen pinta de ser culpa del backface culling.

Asegurate q lo tienes desactivado poniendo esto antes de dibujar el terreno:
SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

CoLSoN2

                                Joder.. no lo tenia activado, pero tampoco desactivado (el codigo de desactivacion lo tenia comentado). Lo e descomentado y voilà!



thxx lord tarncos ;****                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

Mars Attacks

                                Yo de mayor quiero ser como Lord Trancos  8O                                

Lord Trancos

                                CoLsoN2, por defecto en DirectX hay ciertas cosas activadas como por ejemplo el backface culling, asi q si no quieres usarlos se lo has de indicar.

De todos modos te recomiendo q acabes usando el backface culling (viendo tus poligonos parece que son CW) ya q por lo general no te importara que el terreno no se pinte por abajo o por detras...

gracias a los dos por vuestros elogios, pero simplemente soy un paraooo al q le sobra el tiempo libre para ayudar ;)                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

CoLSoN2

                                si son CW. Ya lo activaré para CW.

P.D: espero ke sigas parao muxo tiempo y nos aiudes! XDDDDDDDDD es coñaaaa, as probao en buscar curro en el sector?                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

Lord Trancos

                               
Citar
P.D: espero ke sigas parao muxo tiempo y nos aiudes! XDDDDDDDDD es coñaaaa, as probao en buscar curro en el sector?

pues la verdad es q nop...  :I  de todos modos no se programar en VC (aunque si en C) asin q (por ahora) no creo q tuviera muchas posibilidades...                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

synchrnzr

                                Hace poco buscaban gente con conocimientos de Delphi en CIRSA pero no sé si ya la encontraron. En fin, por probar... ;)

Sync                                

Grugnorr

                                Tranquete, explícame eso de que sabes programar en C y NO en VC ;)

Hablas de que no estás acostumbrado a la IDE, o hablas de esas chorradas de marketing en plan academia. O te refieres a MFC?                                
hat the hells!

CoLSoN2

                                1) io tpc tengo nidea de MFC XD
2) despues de comprobar algunas cosas raras en el render, en cuanto a las montañas ke salian y tal,ke no cuadraban con los heightmap, hice la siguiente prueba: puse este heightmap:



como podeis comprobar, tiene 6 barras horizontales y 2 barras verticales gordas asi como 7 mas pequeñas. El resultado, sin embargo es este:

6 horizontales .. OK


peeeeero, solo la primera gorda vertical y 5 (en la 5º se corta) pequeñas.


alguien me lo explique??? la cantidad de vertices, sin embargo, es la que debería ser. Y ya en el .map veo que esto está mal. Viendo el algoritmo que hay en el primer post deste topic podeis ver xq pasa esto ?? o_O                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

Lord Trancos

                                sync por ahora creo q me buscare algun trabajo ""normal"" como informatico en alguna empresa de por aqui cerca, lo de los juegos para mi es (por ahora) un hobby, tal vez mas adelante intente aventurarme profesionalmente en ese mundo.

grunni se ANSI C aunque no demasiado, lo basico, lo suficiente para no tener demasiados problemas para entender el codigo de los ejemplos q encuentro por aqui y por alla. pero si me pongo a hacer un programa en C me cuesta horrores... me vuelvo loco con tantos herrores y lo quisquilloso q es el muy #~@#~@~ xDDD no se, me encuentro mas a gusto con el Pascualin

colson creo que estas leyendo incorrectamente en bitmap; probablemente no sea de 8bpp (aunque el bmp sea de 8bpp, al cargarlo seguramente el windows te lo cambia de formato o algo asi), por eso supongo que te sale bien las rayas horizontales y no las verticales.... creo que no lees la parte derecha de la imagen,... por eso solo sale una barra vertical... no se si me explico. Weno, si eso te lo explico con mas paciencia luego q ahora tengo hambre :P                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

CoLSoN2

                                        for (int i = 0;i<(height-1);i++)

        {

             ptr = (Byte *)map->Picture->Bitmap->ScanLine[i];

             ptr2 = (Byte *)map->Picture->Bitmap->ScanLine[i+1];

             for (int j = 0;j<(width-1);j++)

             {

                   GenerateQuad(i,j,ptr[j],ptr[j+1],ptr2[j],ptr2[j+1]);

             }

        }


segun este codigo, que es donde leo el bitmap, todo deberia ir bien. lo jodidamente raro es: la en vertical se lee bien pero enhorizontal solo se lee 1/3 de todo el heightmap mas o menos (¿?) y también, al renderizar, es un cuadrado como el heightmap, a pesar de ke solo se lee un trozo en ancho (¿?) .. no lo entiendo                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.