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:
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:
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:
Código [Seleccionar]
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:
Código [Seleccionar]
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
