Pues eso, justo hara poco he comenzado a programar un juego bajo directx7. Ya hize las rutinas basicas d inicializacion en 800x600 16bits, tb hize prueba de sacar un grafico en la pantalla tras cargar el bitmap. Y bueno empeze a codificar una rutina de putpixel(x,y,color) mas o menos, y no me imprime en el lugar donde deberia ser.
Yo pensaba que el calculo de la posicion seria algo asi: offset=(coordenadaY*800)+CoordenadaX
Y entonces screenpointer[offset]=(WORD)color16; siendo screenpointer un puntero al principio de la pantalla.
Tambien lo he probado directamente asi:
screenpointer[0]=(WORD)color16; 0,0
screenpointer[800]=(WORD)color16; 0,1
screenpointer[1600]=(WORD)color16; 0,2
screenpointer[2400]=(WORD)color16; 0,3
Y no salen alineados, salen los pixels dispersados. Alguien me puede decir como es el formato de pantalla de 800x600 16 bit?????
Cita de: notoi en 13 de Marzo de 2009, 06:42:26 PM
Pues eso, justo hara poco he comenzado a programar un juego bajo directx7. Ya hize las rutinas basicas d inicializacion en 800x600 16bits, tb hize prueba de sacar un grafico en la pantalla tras cargar el bitmap. Y bueno empeze a codificar una rutina de putpixel(x,y,color) mas o menos, y no me imprime en el lugar donde deberia ser.
Yo pensaba que el calculo de la posicion seria algo asi: offset=(coordenadaY*800)+CoordenadaX
Y entonces screenpointer[offset]=(WORD)color16; siendo screenpointer un puntero al principio de la pantalla.
Tambien lo he probado directamente asi:
screenpointer[0]=(WORD)color16; 0,0
screenpointer[800]=(WORD)color16; 0,1
screenpointer[1600]=(WORD)color16; 0,2
screenpointer[2400]=(WORD)color16; 0,3
Y no salen alineados, salen los pixels dispersados. Alguien me puede decir como es el formato de pantalla de 800x600 16 bit?????
Hola buenas, creo que deberias probar a multiplicar la formula del offset x2:
offset=(coordenadaY*800)+CoordenadaX *2
Si trabajas con graficos de 16 bits se supone que usaras 2 bytes por cada punto en pantalla para la paleta.
También puedes definir una variable para los bpp , y usar esta formula :
int bpp = 16;
offset=(coordenadaY*800)+CoordenadaX *( bpp / 8 ) ;
Esto debería funcionar, ya nos contarás.
Salu2.
Gracias por tu respuesta pero no se si funcionara. Porque como he puesto anteriormente:
------------------------------------------------ X,Y
screenpointer[0]=(WORD)color16; 0,0
screenpointer[800]=(WORD)color16; 0,1 1*800+0= 800
screenpointer[1600]=(WORD)color16; 0,2 2*800+0=1600
screenpointer[2400]=(WORD)color16; 0,3 3*800+0=2400
El offset siempre esta a 0(coordenada X) entonces segun lo anterior deberian salir alineados, pero a mi me aparece los pocos puntos separados bastante en horizontal. Igual me hace pensar q a lo mejor hay algo que he definido mal, el puntero o yo q se. Lo mirare con calma. Porque no me cuadra.Gracias de todas maneras.
No se supone que en una surface de dx tienes que usar el pitch?
O sea, tienes que llamar a get surface description (no se como se llama la funcion) y te devuelve una estructura con informacion de la surface.
Luego, uno de los datos se llama pitch
void* dir = (byte*)pointer + pitch * y + x * bytes_per_pixel;
Fijate en la documentacion.
Ahora si lo veo mas claro. Acabo de ver el esquema de una surface en la documentacion y lo que es el Pitch. Gracias amigo ;)