Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: averbell en 09 de Marzo de 2005, 01:57:49 PM

Título: Colisiones Superficies Directx8
Publicado por: averbell en 09 de Marzo de 2005, 01:57:49 PM
 pueso no consigo detectar las colisiones con el color transparente ni atraves de mascara, alguien sabe como hacerlo?
Título: Colisiones Superficies Directx8
Publicado por: nsL en 09 de Marzo de 2005, 03:59:43 PM
 Para colision entre 2 sprites aun no lo he implementado, pero para raton si. Te pongo el codigo qu yo uso:

Esto devulve false si no hay colision en el Bounding Box y si hay colision, llama al metodo de mascaras:

bool CSprite::colisionRaton(SDL_MouseMotionEvent Event){
int w1,h1,x1,y1;

w1 = getw();
h1 = geth();
x1 = getx();
y1 = gety();

if (((Event.x)>x1) && ((Event.x)<(x1+w1)) && ((Event.y)>y1) && ((Event.y)<(y1+h1)))
 {
  return chkMask(Event.x,Event.y);
 } else {
  return false;
 }
}


y este es el metodo para ver si hay colision en la mascara, viendo el color del pixel donde este el puntero:

bool CSprite::chkMask(int X,int Y)
{
SDL_Color col;

col = getPixel(FrameSelec->frMask,X-posx,Y-posy);

if ((col.r == 0) && (col.g == 0) && (col.b == 0))
{
 return false;
} else {
 return true;
}
}


Hay mas metodos, pero de momento a mi me vale este y funciona (tengo pensado cambiarlo).

Saludos!  B)  
Título: Colisiones Superficies Directx8
Publicado por: averbell en 09 de Marzo de 2005, 05:17:28 PM
 lo malo es que yo uso directx, y no consigo que me reconzca el color trasnparente ya que no sale, uso (VB)
Título: Colisiones Superficies Directx8
Publicado por: averbell en 09 de Marzo de 2005, 11:22:29 PM
 HaBE, aquí os dejo un link con lo que e conseguido, para que veais que consigo la colision con el box, pero kiero que me detecte si despues hay un color transparente o no. Y me estoy RAllando XDDD

EJEMPLO.EXE

REQUIERE DIRECTX 8
Título: Colisiones Superficies Directx8
Publicado por: averbell en 11 de Marzo de 2005, 08:06:05 AM
 ya ta solucionado
Título: Colisiones Superficies Directx8
Publicado por: [EX3] en 11 de Marzo de 2005, 05:56:36 PM
 Cual fue el problema? para asi tenerlo en cuenta si lo tengo que implementar alguna vez ;)

Salu2...
Título: Colisiones Superficies Directx8
Publicado por: averbell en 11 de Marzo de 2005, 07:13:19 PM
 Es algo cutre de la manera que lo echo, cargo un picturebox con la imagen orginal dandole el tamaño actual segun resolución i luego comprueba el pixel, por ahora tengo desobras, pero seguro que no se queda asi.

Otra cosa Tu usas los threads?.
Me podrias explicar el concepto...?
La idea es ejecutar varios scripts a  la vez.
Título: Colisiones Superficies Directx8
Publicado por: [EX3] en 12 de Marzo de 2005, 02:36:08 AM
 Si estas programando en VB6, un consejo, olvidate de usar Threads. Usar Threads en VB6 genera programas altamente inestables. Ya escarmente yo en su dia cuando lo probe ;)

Yo cuando el TLSA Engine aun usaba el M$ Script Control podia ejecutar varios scripts a la vez, vamos, en realidad eran ejecuciones secuenciales, ejecutas una lista de scripts, un script detras de otro en cada ciclo del bucle principal. Imagino que asi lo haran la mayoria de programas y da buen resultado.

Sobre lo del PictureBox para las colisiones... como me usas un control del VB utilizando DirectX por dios? :P No me quedo claro que problema fue el que tuvistes antes de aplicar lo del PictureBox: valores equivocos en la lecutura de pixeles? problemas con las dimensiones de las texturas?

Salu2...
Título: Colisiones Superficies Directx8
Publicado por: averbell en 12 de Marzo de 2005, 09:19:32 AM
 No habras entendido bien el conzepto de usar el picturebox, no se muestra por pantalla solo es para analizar los pixels transparentes.

El problema es que no conseguia detectar la colision con colores transparentes. solo con el box.
Título: Colisiones Superficies Directx8
Publicado por: [EX3] en 13 de Marzo de 2005, 01:42:09 AM
 
Cita de: "averbell"No habras entendido bien el conzepto de usar el picturebox, no se muestra por pantalla solo es para analizar los pixels transparentes.
Si ya me imaginaba que no lo presentarias por pantalla :P (aunque lo intentaras no lo llegarias a visualizar ya que el render del DirectX lo taparia) pero no se, yo que me he vuelto un poco "recatado" en VB con estas cosas huyendo de usar controles y componentes visuales seguramente hubiera cargado la imagen mediante el API de Windows y hubiera leido desde ahi los pixeles, todo desde codigo, aunque claro, esto trae mas trabajo que usar el PictureBox ;)

Cita de: "averbell"El problema es que no conseguia detectar la colision con colores transparentes. solo con el box.
Como realizabas la lectura de pixeles en D3D?

Salu2...
Título: Colisiones Superficies Directx8
Publicado por: averbell en 13 de Marzo de 2005, 11:01:06 AM
 lo probe de tantas maneras que ya no me acuerdo, pero me dava los pixels del fondo, no del color transparente
Título: Colisiones Superficies Directx8
Publicado por: [EX3] en 13 de Marzo de 2005, 11:20:31 PM
 Explicate un poco mas :P Yo no he tenido problemas con la lectura de pixeles por el momento, se supone que el ColorKey que seria el color transparente del sprite, por ejemplo azul ARGB(255, 0, 0, 255), es color que me devuelve la funcion que implemento para la lectura de pixeles. El ColorKey solo varia de color cuando salvas el sprite a BMP en disco, el ColorKey pasa a ser Negro.

Lees el pixel del sprite o del backbuffer?

Salu2...