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

Temas - XÑA

#81
XNA / Como mejorar el dibujado de sprites
04 de Septiembre de 2010, 08:16:12 PM
Estaba pensando en cómo mejorar la clase SpriteBatch.
Esta clase lo que hace es dibujar toda la lista que hay entre el Begin y el End, ordenando por una série de parámetros, como la transparencia o la Z.
Sin embargo, si utilizas varios niveles de SpriteBatch, la clase falla, puesto que no se da cuenta de que otro spriteBatch te ha cambiado los states. Así si por ejemplo haces esto:

foreach(RenderTarget)
sBatch.Begin
....
   foreach(...)
    sBatch2.Begin
     ...
    sBatch2.End
....
sBatch.End

No funciona bien.  :(

Así que he pensado que lo único que habría que hacer es una clase SpriteBatch con 'memoria de states'. De esta forma no necesita Begin, no necesita End, sólo necesita un Render y listos.

Pero ahora XNA 4.0 lo cambia todo:

http://blogs.msdn.com/b/shawnhar/archive/2010/04/02/state-objects-in-xna-game-studio-4-0.aspx

Ahora se usará el sistema de DX10, que a mi no me gusta en absoluto  >:(

Así que en 4.0 se necesitará utilizar una lista de states, comprobar si ya existe, si no existe, crearlo....

Para que el sistema sea óptimo se necesita una tabla Hash que identifique cada state...

¿Conocéis un sistema rápido y óptimo que cree un hash a partir de una estructura de varios int32?
#82
Programación gráfica / Dibujando graficos Outline con .Net
13 de Agosto de 2010, 05:31:54 PM
Necesitaba un método para dibujar Outlines, que seguro que más de una vez os ha pasado, y creo que he encontrado la manera ideal  :P

Gracias a Vicente, por supuesto, intento aprender las novedades del lenguaje que MS siempre intenta aportar, en lugar de continuar con lo que ya sé. Así que utilizando lambdas he conseguido ....¡EL METODO!


void DrawOutline(Graphics g, Brush brush, Brush outlineBrush, Action<Graphics,int,int,Brush> paintDelegate)
{
for (int ix = -1; ix <= 1; ix+=2)
{
for (int iy = -1; iy <= 1; iy+=2)
{
paintDelegate(g,ix,iy, outlineBrush);
}
}

paintDelegate(g,0,0, brush);
}


¿y cómo se utiliza? Bien, veamos un ejemplo:


// ¿Un Rectángulo relleno?
DrawOutline(g, colorHuella, Brushes.Black,
   (gr, ix, iy, brush) =>
      {
             gr.FillRectangle(brush, 50 + ix, 50 + iy, 20, 20);
      }
);

// ¿Texto?
DrawOutline(g, colorHuella, Brushes.Black,
   (gr, ix, iy, brush) =>
      {
             gr.DrawString("HOLA",Font,brush, 50 + ix, 50 + iy);
      }
);


¡Lo que quieras!  ;)

#83
General Programadores / Steering Behaviours en XNA
31 de Julio de 2010, 01:36:53 PM
Aquí están todos luchando por hacerse un sitio!!! Y da la sensación de que realmente piensan!!!

#84
General Programadores / Cómo evitar el Add en las listas en C#
24 de Febrero de 2010, 04:56:38 PM
Vereis tengo una clase así

class Aplicacion
{
void InsertarMapa()...

public List<Mapa> Mapas { get { return mapas; } }
}

Lo que quiero es evitar que el developer pueda hacer:

Aplicacion.Mapas.Add(mapa);

Porque quiero que haga:

Aplicacion.InsertarMapa(mapa);

¿Puede hacerse esto en C#?
#85
Trabajando en BBDD sabeis que existe un conccepto que es el campo nulo. Muchas veces ocurre que, por ejemplo, no tienen porqué indicar el país, y el valor se deja como nulo. Esto en realidad, por diseño es correcto, sin embargo es fatal para desarrollar. Me explico, resulta que cuando haga un INNER JOIN, tengo que primero analizar si el campo admite valores nulos, y por tanto usar LEFT JOIN. En la aplicación, también tengo que trabajar con la posibilidad de que sea Null, lo que significa controlar if IsNull...

Decidí hace tiempo que el ID=0 se crearía por defecto en todos los campos de este estilo y sería el texto 'Sin Determinar'. De esta forma, NO tengo que preocuparme de si tengo que hacer INNER o LEFT, ni estar recordando si el campo puede o no ser Null.

Bien, pues lo mismo me ocurre en C#. Cuando tengo una lista...¿porqué no obligo a que todas las listas estén inicializadas con un New y simplemente las borro con un Clear cuando tenga que hacerlo? ¿Consumo mucho más memoria? Falso, más consume estar comprobando cada vez if(lista==null) ....

¿Qué os parece la reflexión?
#86
General Programadores / DrawImage muy lento
19 de Febrero de 2010, 05:12:38 PM
Estoy dibujando un montón de clips ( trocitos de un bitmap) utilizando DrawImage. Es bastante lento, de hecho veo como se van 'pintando ' los clips:

                foreach (Clip clip in clipGroup.Lista)
                {
                    clip.Draw(g, x, y);

                    Rectangle rect = new Rectangle(x, y, clip.Rectangulo.Width, clip.Rectangulo.Height);

                    g.DrawRectangle(Pens.Red, rect);
}



¿Es esto normal? ¿tan lento es DrawImage?
#87
General Programadores / Proyecto RPG 2D utilizando c#
15 de Febrero de 2010, 10:40:58 AM
Buenas a todos. Hace un motón que no hago absolutamente nada y lo cierto es que tengo muchas ganas de volver a darle al coding. Por desgracia para mi tiempo, aunque no para mi persona :) , tengo un niño de 10 años y una niña de 3, que me han absorbido un montonazo de tiempo hasta ahora. Pero el otro día le dije al niño a ver si le apetecía hacer un juego de pokemon donde él colocara los monigotes e hiciera lo que él quería, ¡y le hizo un montón de ilusión! Así que me emocioné y busqué software para hacer RPG. Encontré uno muy muy bueno, el Indie Game Maker, que tiene una cosa que está muy muy bien: ¡ compila para XNA y para Flash!

Entonces, me puse a urgar en el editor, y bueno, conseguí hacer algo, pero me pareció demasiado complicado para enseñárselo al niño, además de que la mayoría de cosas las iba descubriendo porque no tiene ayuda.

Así que decidí empezar a hacer un RPG, que no es muy complicado de hacer. Pero como estas cosas se empiezan pero no suelen acabarse, decidí que al menos intentaría aprender algo del proyecto, así si lo dejaba, al menos habría aprendido cosas nuevas.

Finalizada la introducción, espero que no os haya aburrido, aquí está lo que he decidido:

Desarrollo y Diseño de la aplicación:
Utilizar VStudio 2008 C# Framework 3.5 HASTA QUE salga 2010 con framework 4.0
Intentar explotar al máximo .Net 4.0
Utilizar DevExpress para los controles ( puedes usar el trial, que es lo que yo hago)
Utilizar las recomendaciones de programación en C#

Y en cuanto al editor:

Que pueda usarlo mi hijo ( fácil de usar, sustituyendo 'posibilidades' por 'facilidad')
Compilable para XNA (sé bastante XNA ) y SWF ( ni idea).

Bien, a partir de aquí, si la idea gusta y tengo cierto seguimiento, intentaré llevar un blog de cómo voy haciendo el proyecto y porqué tomo ciertas decisiones.

Y me gustaría de vosotros que me dierais todas las aportaciones que pusierais sobre la forma de programar correctamente ( Vicente este es tu punto fuerte!!).

¿Qué documentación tenéis sobre C# Best practices?

Gracias a todos.

#88
Parece que NVidia acaba de sacar Fermi que es un..¡Larrabee a los grande!. Es decir, 512 cores de 'general purpose'. Evidentemente 512 cores son muchos más de los que prometía Larrabee, y también es evidente que pondiendo más cores se 'dará más prisa', pq es una arquitectura escalable. Con esto quiero decir que si se consigue que se programa para esta tarjeta, el tema tiene futuro.

La cuestión aquí es que desaparece el concepto de tarjeta gráfica para convertirse en tarjeta de procesamiento en paralelo. Aunque he mirado muy por encima el tema de la programación en paralelo, la cosa es bastante complicada. Aunque hay cosas que son inherentemente en paralelo como...¡ray tracing! Añadamos a esto que Nvidia tiene su versión GPU de motor Ray-Tracing y podemos estar en un cambio generacional, pero no sólo de cómo se verán los juegos sino de cómo se programan.

La cuestión es ver si Nvidia conseguirá meter esa gráfica en el mundillo y si conseguirá que se programe para ella. Si la velocidad de cálculo es importante, se acabaron las versiones de DX para gráficos, se acabaron los límites en los engines. A partir de ahora, el engine se programa enteramente sobre la tarjeta, y puede hacer teselación, filtrado...todo lo que necesite. Ya no hará falta esperar a una nueva revisión de DX!!

¿qué pensais del tema?
#89
Off-topic / Creación de dominios .loquesea
17 de Junio de 2009, 08:47:30 PM
He leido que durante el 2009 ya se podrán crear dominios con las terminaciones que uno quiera. ¿Sabéis cuándo será realmente esta posibilidad?  :D
#90
Programación en red / Problemas con las cookies
09 de Octubre de 2008, 01:14:47 PM
Hola, a ver tengo un problemilla con las cookies en ASP. Resulta que al crearla:

       Response.Cookies["idioma"].Value = "castellano";
       Response.Cookies["idioma"].Expires = DateTime.MaxValue;

Todo perfecto, pero cuando cierro el explorador y vuelvo a cargarla, y busco el valor de la Cookie

            idioma=page.Request.Cookies["idioma"].Value;

me devuelve "" !!!! :S

¿Porqué no me devuelve el valor que corresponde?

Gracias
#91
Programación gráfica / Motor 3D con iluminación dinámica
09 de Octubre de 2008, 11:06:58 AM
Bueno, aquí está el motor con el que trabajaba, lo que pasa es que lo tengo un poco parado  :(

http://personal.telefonica.terra.es/web/carmasha/CarMa.rar

Necesitais una tarjeta con SM 3.0. Al ejecutar, vereis arriba teclas para cambiar cosas del motor. Fijaos que si activais las Querys ( Shift+F3) baja el rendimiento!! También podeis probar a dismunir el nº máximo de luces, creo que es con CTRL+F8 ( al pulsar CTRL vereis que cambia el texto de arriba e indica las teclas para que sirven)

Todo ello siguie el sistema de generación dinámica de shaders y no se hace multipass, se analizan todas las luces que afectan al mesh en 1 shader.

Las sombras no funcionan. Funcionaban, pero muy lentas, así que metí mano y lo dejé :S. Pero lo que hacía era renderizar la omni en una textura Cube, y averiguaba también con ello qué meshes veía la luz, con lo que ´cuando analizaba el mesh qué luces le afectaban, tenía la lista perfecta!!!

Pero era lento, claro, cada luz se renderizaba en un cube, se calculaban las querys...Sin embargo, no tendría porque hacerlo con las que no se mueven y todo eso :D

Luego me metí a hacer un editor. Si pulsais CTRL+F1 entrareis en el editor. Poco podreis ver, porque me falta toda la parte del SG y materiales. El GUI también se renderiza con el motor, y me lo curré bastante, pero tampoco lo he terminado....

Y es que hay tantas cosas por hacer....



Con Depth Of Field activado:


#92
General / Como se hace esto en web?
01 de Octubre de 2008, 09:32:11 AM
Programo un poco en Web, y hay ciertas páginas que tienen unas cositas que no sé como narices se puede hacer:

Por ejemplo, la de http://www.3djuegos.com/

Se nota que la página está centrada y con una resolución de 800 de ancho, pero luego tienen por los lados un degradado chulísimo, que se ajusta al tamaño del navegador.

¿Cómo se hace esto?

Gracias  ;)
#93
General / Master Page y Child Page con Asp
04 de Septiembre de 2008, 10:53:56 AM
Bueno, no sé si alguien sabrá responderme, porque esto no es que esté origentado a juegos, pero ahí va:

Tengo una master page con 3 combos. Cuando selecciono un elemento del 3er combo, hago un Response.Redirect a otra página ( que tiene como master page la master)

El problema es que los combos pierden el SelectedIndex. Es decir, yo al cambiar de un combo a otro, y hacerme un postback, todo va bien. Pero cuando le hago un redirect, pierde el ViewState de los combos.

¿Alguna idea?
#94
Vereis, tengo un conjunto de grafiquitos dentro de una textura. Lo utilizo para hacer un GUI, y por tanto tengo las coordenadas de cada clip que luego utilizo para dibujar un rectángulo con los métodos de D3D, y así puedo tener un GUI propio.

Bien, el problema que tengo es que a veces al dibujarse me coge un pixel más del que toca. Entonces resolví el problema del ajuste sumando 0.5 y restando 0.5:

_TextureClip clip=texture->Clips[clipIndex];

u=(float)(clip.X+0.5f)/(float)texture->GetWidth();
v=(float)(clip.Y+0.5f)/(float)texture->GetHeight();
u2=(float)(clip.X2()-0.5f)/(float)texture->GetWidth();
v2=(float)(clip.Y2()-0.5f)/(float)texture->GetHeight();


Pero el problema que tengo ahora es que en algunos clips, este pixel que me sobraba me falta!

En realidad el problema está en que las coordenadas de textura no se adaptan a los pixels, pero la cuestión es que no sé cómo solucionar este problema.

¿Alguna idea?

Postdata:
Ya resto -0.5/viewport al dibujar el Quad en D3d.
#95
General / Duda sobre Web y SQL Server
20 de Mayo de 2008, 08:48:47 PM
Vereis estoy haciendo una aplicación en .Net que ataca a una base de datos SQL Server que está en mi ordenador.

Pero después haré una pequeña aplicación en ASP.Net que permite modificar ciertos valores desde la web. Cuando haga la aplicación NO podré tener la BBDD en mi ordenador y ahí está el problema.

Si contrato un hosting windows con ASP y SQL Server...¿Cómo le indico a la aplicación en .Net que acceda al servidor? ¿La dirección del servidor sería algo así como..www.mispruebas.com ?

Gracias!!!
#96
General Programadores / Conocer el numero de Cores presentes
14 de Noviembre de 2007, 09:33:13 AM
Necesito saber cuantos cores tengo presentes en mi sistema. MS me dice que utilice GetLogicalProcessorInformation, pero cunado hago esto:
   Glpi = (LPFN_GLPI) GetProcAddress(

                           GetModuleHandle(TEXT("kernel32")),

                           "GetLogicalProcessorInformation");

   if (NULL == Glpi)

   {

       _tprintf(

         TEXT("GetLogicalProcessorInformation is not supported.\n"));

       return (-1);

   }


en mi Windows XP, me deveulve un NULL, indicando que no está soportado.

¿Cómo puedo saber el nº de cores? Gracias
#97
General / Directorios en ASP
10 de Octubre de 2007, 03:49:11 PM
Vereis, tengo que hacer una Web ASP donde se van generando carpetas y dentro de las carpetas archivos. El problema es que cuando hago CreateDirectory, me lo coloca en un directorio que yo no quiero. Lo lógico es que el directorio raíz fuera el sitio donde está la página, pero no es así.

Entonces, si yo quiero que esto me funcione cuando lo suba a un servidor...¿Cómo indico que me cree un directorio a partir del sitio donde ejcuta el ASP?

Gracias
#98
General Programadores / Vstudio 2005 y editor de texto
25 de Septiembre de 2007, 05:49:08 PM
Cuando estoy en modo de depuración, me pongo enciam de una variable y me aparece una lupa. Pulso encima y me aparece una caja de texto donde veo el contenido de la variable(si es un string, claro).

¿puedo decirle al VStudio que en lugar de cargar esta caja de texto tan simple me cargue el notepad?

Gracias!!
#99
General / duda sobre controles y hosting
19 de Septiembre de 2007, 01:33:11 PM
Imaginaos que tengo una aplicación desarrollada utilizando controles ASP de una librería (http://www.devexpress.com/ )

Ahora quiero contratar un hosting, pero claro, ellos TIENEN que instalar la librería en su servidor.

¿Sabeis cómo funciona esto? ¿Querrán? ¿Te cobrarán? ¿Tengo que buscar uno que ya tengo esta librería instalada?
#100
General Programadores / ZBuffer con NVidia
23 de Noviembre de 2006, 10:50:06 AM
¿sabeis si hay algo diferente de como se trata el ZBuffer con ATI que con NVidia? Es que Jade con ATI va bien, pero no con NVidia, y el problema es el ZBuffer. Si se desactiva sí va bien. Parece como si sólo se escribiera bien la primera vez y luego no.

Yo creo que el problema es que en NVidia debe hacer un discard del surface, y quizás haya que hacer algo adicional, recuperarlo en cada frame, o algo así.

¿ideas?





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.