Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - _Grey

#1
Gracias por las respuestas.

Mis temores sobre los parametros del pipeline por defecto son ciertos. Me tocaría usar rendertargets y jugar con los stages de las texturas, usando la superficie de destino como textura de entrada.

Matar moscas a cañonazos, como dice tamat.

Probablemente lo intente aplicar de todas formas, por tener la capacidad más que nada, todo y que sería un proceso bastante costoso en cuestión de rendimiento.

Gracias.
#2
Actualmente para un additive blending hago lo siguiente:


pD3dDevice7->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE , TRUE );

pD3dDevice7->SetRenderState( D3DRENDERSTATE_SRCBLEND , D3DBLEND_SRCALPHA);
pD3dDevice7->SetRenderState( D3DRENDERSTATE_DESTBLEND , D3DBLEND_ONE);


Cómo podría hacer un subtractive blending?? por la naturaleza de la operación, la cual incluye una suma, parece que es imposible.

Hay alguna manera sencilla de hacer subtractive blending?? cuando digo sencilla me refiero a poco más que jugar con el render state, es un código de hace algún tiempo que usa DirectX7.
#3
Me cuesta creer, pero por más que fuerzo el programa con cambios de fullscreen a ventana y viciversa ¡me respeta los iconos!.

El problema me estaba minando en cantidad, sólo encontraba gente desahogándose contra la documentación de Microsoft, o comformándose con que era problema de la API de Win. En la documentación advierten del problema, invitándote a llamar a la función desde otro Thread sin HWND asociado a él, pero después de hacerlo seguía ocurriendo. Hasta ahora!
Tus sospechas parecen ser ciertas, ha bastado con el SendMessage para despistar a Windows y que no hiciera de las suyas.

Gracias mil !!.
#4
Por lo poco que se es cosa de ChangeDisplaySettings(), no de los flags de la ventana, pero no encuentro la forma correcta de llamarla. Es más, en mucho codigo que se puede encontrar por internet se llama exactamente como yo hago, lo que me recuerda que más de uno y de dos programillas freeware o incluso share te hace la "broma" de trastocarte el escritorio.
Respecto a hacerlo con las DirectX... bueno, también trabaja a nivel de Dx sin tal problema, pero lo tengo hecho de tal manera que pueda funcionar sin Dx usando rutinas por soft y GDI, y claro, ahí no puedo usar SetDisplayMode() sino las funciones de la API de Windows.

Supongo que el código de [EX3] podra ayudar, que esté en VB6 no debería ser problema mientra se vea la llamada y demás.

Gracias a los dos por vuestro tiempo.
#5
Utilizo el ChangeDisplaySettings() para pasar a fullscreen y salir de él, pero una vez de cada muchas me encuentro que al regresar al escritorio los iconos han cambiado de lugar. He buscado por san Google, y parece que es algo más o menos común, pero curiosamente no encuentro por ningún lugar la forma correcta de llamar a ChangeDisplaySettings() para que no haga tal fechoría.

Puede alguien decirme por qué ocurre y como evitarlo?!?!?

Para entrar en fullscreen hago esto:
// Pone la ventana a pantalla completa segun GDI
bool Window::SetFullScreenGDI(int x,int y,ColorMode cm,int hz){ // GDI

bool creada;
DEVMODE ModoPantalla;

// Si no esta creada, la crea
if(!GetProperty(CREATE)){
Create(true);
creada=true;
} else creada=false;

// Pone pantalla completa
ModoPantalla.dmSize = sizeof(DEVMODE); // Tamaño de la estructura
ModoPantalla.dmBitsPerPel = (cm==COLOR8INDEX)?8:(cm==COLOR16RGB)?16:(cm==COLOR16XRGB)?16:(cm==COLOR24RGB)?24:(cm==COLOR32XRGB)?32:(cm==COLOR32ARGB)?32:0;// Profundidad de color
ModoPantalla.dmPelsWidth = x; // Ancho
ModoPantalla.dmPelsHeight = y; // Alto
ModoPantalla.dmDisplayFrequency = hz; // Refresco
ModoPantalla.dmFields = DM_PELSWIDTH | // VALORES A USAR DE LA ESTRUCTURA
DM_PELSHEIGHT |
DM_BITSPERPEL |
DM_DISPLAYFREQUENCY;

// Pone pantalla completa
if(ChangeDisplaySettings(&ModoPantalla,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL){
// No pudo poner pantalla completa
if(creada) // Se creo en la funcion, la destruye
Destroy();
logMsg("( ~ %d ) ( %s ) Window::SetFullScreen(int x,int y,ColorMode cm,int hz) : fallo el ChangeDisplaySettings() con %dx%dx%s %dHz.",
__LINE__,__FILE__,x,y, (cm==COLOR8INDEX)?"8":(cm==COLOR16RGB)?"16RGB":(cm==COLOR16XRGB)?"16XRGB":(cm==COLOR24RGB)?"24":(cm==COLOR32XRGB)?"32XRGB":(cm==COLOR32XRGB)?"32ARGB":"?(solo son validos COLOR8INDEX,COLOR16RGB,COLOR24RGB,COLOR32XRGB)", hz);
return false;
}

// Guarda valor de Stickykeys
m_skOriginal.cbSize= sizeof (STICKYKEYS);
m_skOriginal.dwFlags = 0;
SystemParametersInfo(SPI_GETSTICKYKEYS,sizeof (STICKYKEYS),&m_skOriginal,0);
// Desactiva Stickykeys
STICKYKEYS stickyOff = m_skOriginal;
stickyOff.dwFlags &=SKF_STICKYKEYSON;
SystemParametersInfo(SPI_SETSTICKYKEYS,sizeof (STICKYKEYS),&stickyOff,0);

// Fuerza estilo WS_POPUP, necesario para ventana a pantalla completa
m_bFullScreen=true;
SetWindowLong(m_hWnd,GWL_STYLE,WS_POPUP);
m_nXFullScreen=x;
m_nYFullScreen=y;
m_cmFullScreen=cm;
m_nHZ=hz;
SetWindowPos(m_hWnd,HWND_TOPMOST/*HWND_TOP*/,0,0,x,y,SWP_SHOWWINDOW); // Se asegura que sea la visible

return true;
}


He puesto también el codigo del Stikykeys y demás por si tiene algo que ver... todo y que lo dudo.

Y para salir de fullscreen hago esto otro:
// Sale de pantalla completa segun GDI
void Window::FullScreenExitGDI(){

if(!m_bFullScreen) return;

// sale de fullscreen
ChangeDisplaySettings(NULL,0);

// Desactiva flag m_bFullScreen(para que funcionen SetSize() y SetPosition())
m_bFullScreen=false;

// Restaura la ventana normalmente
if(GetProperty(CREATE)){
// Restaura estilo,posicion y tamaño de ventana
SetWindowLong(m_hWnd,GWL_STYLE,GetStyleWindow(m_wtWindowType));
SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW); // Se asegura que sea la visible
SetPosition(m_uX,m_uY);
SetSize(m_uWidth,m_uHeight);
}

// Restaura valor de stickykeys
SystemParametersInfo(SPI_SETSTICKYKEYS,sizeof (STICKYKEYS),&m_skOriginal,0);

}


Gracias.
#6
General / minijuego con/de fisicas
13 de Junio de 2007, 04:58:30 PM
pensandolo, pensandolo... que bien estaria esto en una DS, aun que solo fuera por la pantalla tactil, a ver si hay suerte y le clonan descaradamente...  :P  :mrgreen:

Saludos.
#7
General / minijuego con/de fisicas
11 de Junio de 2007, 11:32:45 PM
He encontrado este mini juego atraves del blog de th2bears.com(y este desde www.gameproducer.net).

Y antes de que pase desapercibido os dejo el link, que tiene su puntito, un juego experimento sobre fisicas.

Saludos.

Espero que no se haya posteado ya...
#8
Industria y mercado / Videojuego para campaña electoral
02 de Mayo de 2007, 05:53:50 PM
No esta mal que usen juegos los politicos para hacer campaña, pero siendo los politicos españoles me doleria un tanto ... Quiza por que son los que me tocan, no se....

Saludos.
#9
Lo mio no son las mates, pero este tema lo he tocado un poco, a ver si te puedo ayudar.

Veamos el siguiente codigo:

int x=10,y=0;
int nx=0,ny=0;
float rot=3.1415f;

nx=(x * cos(rot) - y * sin(rot));
ny=(x * sin(rot) + y * cos(rot));

cout << "x: " << x << " y: " << y << endl;
cout << "rot: " << rot << endl;
cout << "nx: " << nx << " ny: " << ny << endl;


Este programilla te mostrada las coordenadas (10,0) rotadas 180º;
x e y,  son las coordenadas del punto a rotar,nx y ny, son las coordenadas del punto rotado, rot es el angulo de rotacion;
lo de enmedio es la formula usada para rotar las coordenadas, y el final es solo para mostrar el resultado.

Pruebalo y en seguida lo veras.

Tienes que tener en cuenta algunas cosas, esta rotacion es siempre sobre un punto central, que estaria situado en (0,0), Si quieres rotar sobre otro centro, simplemente tendras que desplazar las coordenadas, en tu ejemplo seria sumar las coordenadas resultantes de la rotacion a la posicion del sprite "padre".

Estas funciones de la libretia matematica de C/C++ (sin(), cos()) USAN RADIANES NO GRADOS, una vuelta completa, 360º, seria pi*2, 180º, seria pi, y 90º seria pi/2.

A partir de ahi, deberias tener en cuenta tu sistema de coordenadas 2D, segun sea, la rotacion sera en el sentido de las agujas del reloj, o a la inversa.

Espero haberlo dicho bien... saludos.
#10
General Programadores / precision float
26 de Marzo de 2007, 10:00:50 PM
Si usas double en lugar de float, quitando la f como te dicen, quiza funcione mejor.

De todas formas, seguiras teniendo una precision finita, y es que estos problemas, son normales, son errores de precision minimos, pero, no caben todas las infinitas posibilidades, y ocurren estas cosas.

Saludos.
#11
Programación gráfica / OGL 2D
22 de Febrero de 2007, 04:15:36 PM
CitarPero por ejemplo, ¿si pinto un poligono 100x100 con una textura 100x100, y luego si pinto otro poligono 200x200 con la misma textura de antes? ¿No afectara a la hora de la calidad el usar mipmaps? ¿o afecta solamente a la hora de renderizar mas cerca o lejos (Z), en vez del tamaño del poligono donde se pinte....?

Si haces efectos de "Zoom" como el dices, puedes aprovechar los mipmaping. No importa la Z, la grafica mira si ha de "estirar" la textura, y coge el nivel de mipmaping que mejor le venga.

Al margen de lo que algun entendido pueda decir de tu otra consulta sobre GLUT, si finalmente optas por codigo Windows, puedes conocer el estado del teclado con una sola llamada a GetKeyboardState(); con lo que dependera de las soluciones nativas a este respecto de los otros sistemas si es algo facil o no, pero desde windows poco codigo habrias de cambiar.

Saludos.
#12
Industria y mercado / Análisis de Fairy Match en NJ
21 de Febrero de 2007, 08:09:41 PM
No tengo experiencia propia, pero en los foros de indiegamer ya se ha hablado alguna vez de este tema.

En cuanto aparece alguien con intencion de poner 14.95$ de precio, lo primero que le dicen es que tendra las mismas ventas que poniendolo a 19.95$.
Respecto a los precios bajos, como 9.95$, advierten que puede dar "mala" imagen tener tan bajo precio, parece que la gente pensase que muy bueno no debe ser para costar tan poco... o algo asi.

Otra cosa al respecto que se dice desde algun tiempo, es poner el precio bajo en forma de promocion para luego ponerle el normal.Sacas un nuevo juego, y lo pones a 9.95$ o 14.95$ durante el primer mes, por ejemplo, dejando claro que despues de ese tiempo subira al precio normal de 19.95$.
Ya digo que no es por experiencia propia, si no por lo que se ve de vez en cuado en los foros de indiegamer.

A mi por lo menos, esto ultimo me parece lo mejor, pero no creo que de mucho resultado en la gente que cae en la pagina "casualmente" por que pueden llegar justo despues de la promo o cuando queden pocos dias, y piense que no le da tiempo de probar la demo... o que no sepa que esperar de ti. En cambio quiza si pueda ser util con los clientes que tienes, que ya te conocen, y que pueden saber de tu nuevo juego desde el primer dia por email. Quiza cupones de descuento para anteriores clientes, o para que estos lo den a sus amigos/familiares para ampliar la bolsa de clientes, de buen resultado. Creo que el truco en el shareware, esta no en vender "un" juego, si no en mantener tus clientes e ir ganando nuevos, con el paso del tiempo seguro que se nota... pero aqui los portales que mal venden los juegos de terceros parece que ganan... :?

Saludos.
#13
Industria y mercado / Ayuda sobre Plimus y trato con Portales
04 de Febrero de 2007, 01:09:48 PM
Good job!  Estas cosas siempre vienen bien conocerlas.

Saludos.
#14
Off-topic / juegos DS
30 de Enero de 2007, 04:23:43 PM
CitarTodos menos los plataformas.

Hombre, en las portatiles tiran las 2D, y en las 2D los plataformas; pero puestos asi quiza podrias hacercarte al trauma center, se puede hacer bastante dificil cuando esta avanzado ,y realmente es mas o menos lo mismo cuando llevas tiempo... pero....es todo un experimento de jugabilidad con la tactil, y seguro que te sera algo mas o menos nuevo.

Saludos.
#15
Off-topic / juegos DS
30 de Enero de 2007, 11:38:51 AM
El Castelvania, que por cierto, dentro de poco sale una secuela mas para DS no se el momento exacto, New Super mario si aprecias los plataformas.

Saludos.





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.