Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ayuda con los index buffers de Direct3D

Iniciado por DraKKaR, 12 de Octubre de 2002, 09:08:18 PM

« anterior - próximo »

Haddd

                                Prueba a cambiarlo por:

void *auxdat=dib->Lock(0,0);


Pero es un poco a ciegas...                                

DraKKaR

                                Nada, pasa exactamente lo mismo.                                

DraKKaR

                                Bueno, tengo buenas noticias, sobre todo para mi salud mental: y es ke al fin lo he conseguido (creo). El fallo lo tenia en hacer la llamada a DrawIndexedPrimitive, mas concretamente en el tercer parámetro: numVertices;

HRESULT DrawIndexedPrimitive(
D3DPRIMITIVETYPE Type,
UINT MinIndex,
UINT NumVertices,
UINT StartIndex,
UINT PrimitiveCount
);

Pues bien, lo he conseguido solucionar interpretando el tercer parámetro como el mayor indice del vértice a renderizar, en vez de como el numero de vertices a renderizar.

Esto es lo ke pone el MSDN acerca de ese parametro:

The minIndex and NumVertices parameters specify the range of vertex indices used for each DrawIndexedPrimitive call. These are used to optimize vertex processing of indexed primitives by processing a sequential range of vertices prior to indexing into these vertices. It is invalid for any indices used during this call to reference any vertices outside of this range.

Es decir, parece ke esta documentacion kiera decir ke NumVertices sea el limite superior de un rango. Si este parametro se toma de esta manera la cosa funciona, si se toma como el numero de vertices a renderizar, no funciona.
Lo he comprobado varias veces con arrays pekeños, por ejemplo.

WORD indices1[3]={0,1,2};
WORD indices2[3]={3,4,5};

Bien, Si intentamos renderizar usando el "indices1" con :
DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 3, 0, 1);

la cosa funciona.

Pero NO funciona si usamos la variable "indices2" con esa misma drawindexedprimitive.

En cambio, SÍ ke konsideraremos renderizarlo correctamente si lo hacemos asi:
DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 6, 0, 1)

Diciendole entre el segundo y el tercer parametro, ke el rango de indices a renderizar esta en [0,6].


Kisiera ke me confirmarais estas conjeturas para estar seguro de todo esto y aclararme un poco. Ahora mismo tomando ese tercer parametro como maxIndex (relativo a minIndex), la cosa me va de perlas. Si lo tomo como el número de vertices a renderizar, entonces no ira bien a no ser que el numero de vertices a renderizar coincida con el maximo indice de estos.                                

Lord Trancos

                                todo parece indicar q tienes razon :)                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

DraKKaR

                                Alguien podria confirmarme todo esto, plis? Todos los ke os hayais enfrentado a hacer un engine o un programita ke con oscenarios ke usen BSPs, Octrees y otro algoritmo de esta indole, debes haber pasado por esto antes.                                

Haddd

                                Yo uso octrees y no he tenido ese problema, pero el nº de vértices es fijo, sólo cambia el nº de índices.                                

_Grey

                                Pues si mas no, yo lo uso asi como indicas en tu penultimo post, es decir, esto, DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 3, 0, 1); no te funciona con indicex2[] por el 0,3 que hace que solo tenga encuenta los 3 vertices desde el vertice 0 del buffer de vertices, esto puede habilitar optimizaciones si ignoras los vertices que no se van a usar, pero eso ya es otro tema.

chao.                                

DraKKaR

                                Haddd: yo estoy como tu, tengo el numero de vertices fijo y solo cambio el numero de indices. Cuando vas a renderizar que valor le pones al tercer parametro de DraIndexedPrimitive?

_Grey: entonces me estas dando la razon no? ese tercer parametro especifica el ancho del rango de indices validos en base a minIndex no?                                

_Grey

                                Pues pretendia dartela....... pero e estado haciendo pruebas, y, para mi sorpresa ¡FUNCIONA!  por lo que parece indicar la documentacion en NumVertices es condicionado por el valor de StartIndex y el segundo valor de la funcion "SetIndices(X,X)", de todas formas te dire que yo siempre lo e usado como te e indicado, o sea com el ejemplo que has puesto que funciona y siempre me a funcionado bien, estas ultimas experiencias han sido por las pruebas que e hecho para estar mas seguro..............

parece que el misterio no se aclarara del todo.... pero usalo como tu segundo ejemplo, que al fin y alcabo es lo que se deduce de la documentacion.                                

Haddd

                                Yo siempre envio todos los vértices y sólo los índices necesarios. Las opciones añadidas se utilizan para procesar múltiples atributos, que son vértices que comparten el mismo VertexBuffer, pero que deben renderizarse en llamadas diferentes porque utilizan texturas diferentes. Pero esto es un tremendo ##$$&& y aunque lo utilizaba en engines anteriores, en Haddd lo quité porque te complica un motón y un grafista puede vivir sin ello(o utilizar otras técnicas)                                

DraKKaR

                                Hola, aun no he aclarado el significado de este famoso tercer parametro de la función DrawIndexedPrimitive y la CORRECTA manera de usarlo. Agradeceria si alguien pudiese confirmarmela, o mejor aun me encantaria que alguien me pasara algun codigo donde se usen index buffers y algun algoritmo de visualización tipo BSPs, Octrees, Beamtrees...

Gracias.                                






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.