Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Per Pixel Lightning

Iniciado por Haddd, 05 de Julio de 2004, 11:01:44 PM

« anterior - próximo »

Haddd

 Pasa una cosa muuuy rara. Tengo una esfera con iluminación por pixel y el bumpy se ve perfectamente. Pero en lugar de la esfera pongo un cubo de 8 vértices y me aparece todo el cubo iluminado igual, como si no hubiera iluminación por pixel.

Después pongo un rectángulo con 4 vértices y hace lo mismo que el cubo. Pongo más vértices y me desfigura el rectángulo, me pone los vértices como le da la gana. El error está en la rutina que calcula la tangente, aver si veis algo, u os ha pasado algo parecido:
void CXMeshContainer::EstablecerDeclaracion(D3DVERTEXELEMENT9 *declaracion)
{
LPD3DXMESH Malla2=NULL;

HRESULT hr=MeshData.pMesh->CloneMesh(D3DXMESH_MANAGED,declaracion,Video.Device(),&Malla2);

if(FAILED(hr)) {
 Haddd.m_Error.EstablecerYMostrar(hr,_T("EstablecerDeclaracion"));
 return;
}

SAFE_RELEASE(MeshData.pMesh);

MeshData.pMesh=Malla2;

}

D3DVERTEXELEMENT9 decl[] =
{
   { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
   { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },  
   { 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
   { 0, 32, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 },
   D3DDECL_END()
};

void CXMeshContainer::PrepararNormalesYTangente(D3DVERTEXELEMENT9 *declaracion)
{
if(declaracion==NULL) declaracion=decl;

EstablecerDeclaracion(declaracion);

// Normales

HRESULT hr=D3DXComputeNormals(MeshData.pMesh,NULL);
if(FAILED(hr)) {
 Haddd.m_Error.EstablecerYMostrar(hr,_T("CXMeshContainer::PrepararNormalesYTangente"));
 return;
}

   //compute the tangent vectors in the texture space and load them into
   //the tangent field (which is 3d), read the texture coords from the 0th texture
   //stage. Don't need the V direction vector since it is assumed to be U x N.

hr=D3DXComputeTangent(MeshData.pMesh,0,0,0,TRUE,NULL);

if(FAILED(hr)) {
 Haddd.m_Error.EstablecerYMostrar(hr,_T("CXMeshContainer::PrepararNormalesYTangente"));
 return;
}
}

BeRSeRKeR

 Pues no sé por qué puede ser. Pero lo del cubo de tan sólo 8 vértices es raro. Aunque supongo que posteriormente lo convertiras a uno de 24, de lo contrario no habrán suficientes normales que definan la orientación de las caras del cubo.

En cualquier caso, lo que sí es raro que te ocurra en el caso del plano, en el cual todas las normales de los vértices apuntan en el mismo sentido.

Para comprobar que el fallo no está en los cálculos de la tangente, prueba a meter tú manualmente la tangente, es decir, prescindiendo de la función D3DXComputeTangent. Evidentemente prueba con el plano que es el más sencillo ya que como he dicho, tanto la normal como la tangente como la binormal son iguales para todos los vértices.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Haddd

 Resuelto. No era un error de aquí, era un error de otro sitio que modificaba los vértices. Gracias. (ole)  






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.