• Lunes 18 de Noviembre de 2024, 03:28

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.


Mensajes - Ruben3d

Páginas: 1 ... 13 14 [15] 16 17 ... 30
351
Programación de Videojuegos / Re: Sobre Aabb/esfera Ambos Moviles
« en: Miércoles 7 de Julio de 2004, 13:41 »
Hola.

Citar
Lo otro que estaba pensando, es simplemente ver si ambos objetos se intersectan, calcular el nivel de penetración ,separarlos
esta distancia , y aplicar un impulso a uno o ambos objetos

Esto se puede hacer de manera sencilla sabiendo que las bounding boxes están alineadas con los ejes de coordenadas. Digamos que la esfera la tienes representada como un punto que representa el centro y un flotante que representa el radio:
Código: Text
  1. struct punto3d
  2. {
  3.     float x, y, z;
  4. };
  5.  
  6. struct esfera3d
  7. {
  8.     punto3d centro;
  9.     float radio;
  10. };
  11.  

nota: Estoy usando un LHS.

Y cada bounding box está representada por un punto situado en su centro, su anchura/2, su longitud/2 y su altura/2 (recordemos que está alineada con los ejes). Puedes representarla de muchas maneras, pero esta me biene bien para la explicación:
Código: Text
  1. struct bbox
  2. {
  3.     punto3d centro;
  4.     float anchura2;    // Eje X
  5.     float altura2;    // Eje Y
  6.     float longitud2;    // Eje Z
  7. };
  8.  

Imaginemos que tenemos el árbol ya construido, y que cada nodo tiene una operación llamada ComprobarColision. En seudocódigo sería algo así:
Código: Text
  1. bool nodo::ComprobarColision(esfera3D esfera)
  2. {
  3.     if (esfera abarca la bounding box)
  4.         return true;
  5.     if (esfera intersecta la bounding box)
  6.     {
  7.         if (este nodo es una hoja)
  8.         {
  9.             if (colisiona con la geometría englobada)
  10.                 return true;
  11.             else
  12.                 return false;
  13.         }
  14.         else
  15.         {
  16.             for (cada hijo de este nodo)
  17.             {
  18.                 if (hijo->ComprobarColision(esfera))
  19.                     return true;
  20.             }
  21.         }
  22.     }
  23.     return false;
  24. }
  25.  

Según tu pregunta, la parte que quieres saber es la de averiguar si la esfera ha tocado la bounding box, y saber cuánto. Con la representación que te he dado antes es bastante sencillo, y te voy a poner una versión sencilla, la cual detecta más de lo que debería en las esquinas, pero es muy eficiente:
Código: Text
  1. // Retorna la cantidad de unidades que la esfera ha penetrado en la caja
  2. float bbox_esfera(bbox bb, esfera3d esfera)
  3. {
  4.   if (  bb.centro.x + bb.anchura2 > esfera.centro.x - esfera.radio &&  // +X
  5.     bb.centro.x - bb.anchura2 < esfera.centro.x + esfera.radio &&  // -X
  6.     bb.centro.y + bb.altura2 > esfera.centro.y - esfera.radio &&  // +Y
  7.     bb.centro.y - bb.altura2 < esfera.centro.y + esfera.radio &&  // -Y
  8.     bb.centro.z + bb.longitud2 > esfera.centro.z - esfera.radio &&  // +Z
  9.     bb.centro.z - bb.longitud2 < esfera.centro.z + esfera.radio  )  // -Z
  10.   {
  11.     return 0.0f;  // No hay colisión
  12.   }
  13.  
  14.   float xgt = bb.anchura2 - esfera.centro.x + bb.centro.x;
  15.   /*
  16.   Se calcula de igual manera para las otras cinco caras, eliges la menor, o la que
  17.   quieras, y la retornas.
  18.   */
  19. }
  20.  
  21.  

Espero que esto te sirva.

Un saludo.

Ruben3d

352
C/C++ / Re: Funciones De Clase
« en: Miércoles 7 de Julio de 2004, 12:23 »
Cita de: "JuanK"
pero la solucion de Ruben es para C++
O se me ha ido mucho la cabeza :P, o Ticos está preguntando cómo hacerlo en C++:
Cita de: "Ticos"
función privada de una clase

Un saludo.

Ruben3d

353
C/C++ / Re: Funciones De Clase
« en: Miércoles 7 de Julio de 2004, 01:32 »
Hola.

La única manera que hay de pasar un método de una clase como parámetro a una función ya hecha de C es si el método es estático. Si el método no lo es, o bien diseñas una función que acepte punteros a métodos en vez de usar la función de la librería, o bien le pasas otra función y te olvidas del método.

Si en cambio tú creas una función que quieres que pueda aceptar métodos (no estáticos) de objetos o funciones tienes dos opciones:
  • Sobrecargar la función para que acepte ambos casos.</li>
  • Que la función acepte un functor, con dos clases hijas que hagan de wrapper para un método y para una función.</li>
El método del functor es, para mi, el más elegante y el que más flexibilidad para muchas cosas da, pero también el que más conocimientos de C++ requiere. Por ello te voy a mostrar el otro:
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
//
// main.cpp
//

#include <iostream>
#include <string>

using namespace std;

// Esta es nuestra función de prueba
void funcion(string texto)
{
    cout << "Este texto se escribe desde una funcion:" << endl;
    cout << "   " << texto << endl;
}

// Esta es nuestra clase de prueba
class CMiClase
{
public:
    void metodo(string texto)
    {
        cout << "Este texto se escribe desde un metodo:" << endl;
        cout << "   " << texto << endl;
    }
    static void metodoEstatico(string texto)
    {
        cout << "Este texto se escribe desde un metodo estatico:" << endl;
        cout << "   " << texto << endl;
    }
};

// Versión que acepta punteros a funciones
void enlace(void (*pFunc)(string texto))
{
    pFunc("Texto de prueba");
}

// Versión que acepta punteros a métodos
void enlace(CMiClase *pObj, void (CMiClase::*pFunc)(string texto))
{
    (pObj->*pFunc)("Texto de prueba");
}

int main()
{
    // La versión para funciones.
    enlace(funcion);

    // También funciona para métodos estáticos.
    enlace(CMiClase::metodoEstatico);

    // La sintaxis para métodos no estáticos varía y, además, hace
    // falta tener una instancia de la clase.
    CMiClase objeto;
    enlace(&objeto, &CMiClase::metodo);

    cout << "Presione ENTER para finalizar." << endl;
    getchar();
    return 0;
}<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

Como ves, la sintaxis de a versión para métodos difiere. Además, hay que saber el tipo de objeto al crear la función enlace. Con el método de los functors sólo habría que crear una función enlace y se tratarían todos los casos igual. Si estás interesado en ello dimelo y te posteo cómo se hace.

Un saludo.

Ruben3d

354
Visual Basic 6.0 e inferiores / Re: Puertos En Vb
« en: Miércoles 7 de Julio de 2004, 00:57 »
Cita de: "FERNANDO_LOZANO"
me gustaria en VB
Pues ponlo en el foro de Visual Basic.

355
C/C++ / Re: Principiante
« en: Miércoles 7 de Julio de 2004, 00:55 »
Hola.

Yo aprendí C con el curso de Nacho Cabanes, que está en esta web.

Un saludo.

Ruben3d

356
OpenGL / Re: Imprimir Pantalla
« en: Martes 6 de Julio de 2004, 16:03 »
Pues ni idea de cómo usar la impresora. Eso prueba a preguntarlo en el foro de C/C++. Si quieres te puedo decir cómo obtener la imagen, pero imprimirla ya es otra cosa.

Un saludo.

Ruben3d

357
OpenGL / Re: Rendimiento
« en: Martes 6 de Julio de 2004, 16:02 »
Tiene toda la pinta de estar reservando continuamente memoria y no liberarla después.

358
Visual C++ / Re: Numero De Lineas.
« en: Martes 6 de Julio de 2004, 00:33 »
Cita de: "_.B._"
VS 6.0

Horror :( Yo lo estuve usando un tiempo y tampoco encontré esa opción. Lo siento.

359
OpenGL / Re: Imprimir Pantalla
« en: Lunes 5 de Julio de 2004, 14:46 »
Cuando dices imprimir, ¿te refieres a sacarlo por la impresora?

360
Visual C++ / Re: Numero De Lineas.
« en: Lunes 5 de Julio de 2004, 02:19 »
En VS.NET haz clic en el menú Herramientas. Abre el diálogo Opciones. Haz clic en la categoría Editor de texto, en la subcategoría C/C++. A la derecha, bajo la etiqueta Mostrar, aparecerá la opción Números de línea.

Un saludo.

Ruben3d

361
Sobre los Foros de SoloCodigo / Re: Descontento
« en: Domingo 4 de Julio de 2004, 15:03 »
Hola.

A mi particularmente no me importa que la gente hable mucho en la taberna del bit. Sin embargo, puestos a limitarlo, se me ocuren varias posibilidades, algunas basadas en lo ya dicho:

Limitar la vida de cada discusión. Que sólo se pueda contestar en los primeros X días. Creo que esto podría ocasionar que surgieran nuevas discusiones para poder continuar las caducadas, del estilo "Discusión absurda", "Discusión absurda - Parte 2", "Discusión absurda - Parte 3", etc.

Limitar el número de respuestas por discusión. Creo que tendría los mismos problemas que la propuesta anterior.

Limitar el número de respuestas/nuevas discusiones por usuario al día. Esto evitaría que un usuario hablara demasiado en ese foro en concreto, y permitiría participar a todos los que quisiesen en cualquier momento. De esta forma, se eliminarían muchos post de contenido nulo, vacío, porque la gente se lo pensaría más al escribir (y si no lo hace, tendría que esperar al día siguiente).

La opción de poder postear en ese foro en función del número de mensajes en el resto no me convence, ya que hay periodos en los que la actividad es bastante baja (vacaciones, por ejemplo). Además, se corre el riesgo de que se posteen muchos mensajes sin contenido útil en el resto de foros para poder alcanzar la cota.

Se me ocurren variaciones a los anteriores, pero creo que esas son las mejores opciones.

Un saludo.

Ruben3d

edit: Ejemplo de posts vacíos, que no aportan nada: Linux -> Grafico (hay cinco, ver los dos últimos).

362
PDA / Re: Depuración En Embedded Visual C++ 4.0
« en: Domingo 4 de Julio de 2004, 14:44 »
Hola.

A mi me ocurre a veces también lo que mencionas. No sé por qué, muchas veces no se conecta al emulador para transmitir el programa. Finalmente opté por tener siempre abierto el emulador y configurarlo para que tomara como tarjeta de memoria el directorio en donde se compila. De esta manera puedo hacer clic sobre el ejecutable con el explorador de archivos.

En cuanto a depurar, uso un sistema de log y examino los resultados tras la ejecución.

Un saludo.

Ruben3d

363
PDA / Re: Aplicación Evc Para Llamar A Través Modem
« en: Domingo 4 de Julio de 2004, 14:40 »
Hola.

Me ocurre lo mismo que a ti :(. He probado diferentes configuraciones y proyectos y me ocurre lo mismo en todos.

Me he fijado en que la función pertenece al Windows CE Standard SDK. Como PocketPC es una adaptación reducida, tal vez esté para Windows CE pero no para PocketPC. De todas formas, he probado varias configuraciones para Windows CE y tampoco funciona.

No se me ocurre lo que puede estar sucediendo, porque se comporta como si no estuviera linkando la librería, pero sí lo hace.

Prueba a preguntar en los foros de PocketPC Development Network, tal vez te puedan ayudar.

Un saludo.

Ruben3d

364
Pascal / Re: De Bmp A Ascii
« en: Domingo 4 de Julio de 2004, 13:21 »
Hola.

Lo único que he encontrado sobre pasar imágenes a ASCII es esto:
AA Project

Está en C, pero no he encontrado nada en Pascal.

Un saludo.

Ruben3d

365
C/C++ / Re: Union De Abb
« en: Domingo 4 de Julio de 2004, 13:11 »
No sé cómo queréis hacerlo exactamente. Lo mejor sería unir los dos árboles sobre un tercero. Pero decís que no podéis usar nada auxiliar. ¿Quiere decir eso que se une sobre uno de los dos?

Un saludo.

Ruben3d

366
Sobre los Foros de SoloCodigo / Re: Programación De Eventos.
« en: Domingo 4 de Julio de 2004, 12:54 »
Creo que sería mejor que cuando alguien se enterara de esos eventos los publicara como noticia.

Un saludo.

Ruben3d

367
Programación de Videojuegos / Re: Necesito Ayuda
« en: Sábado 3 de Julio de 2004, 21:08 »
En la sección Tutorials de la web hay diversos tutoriales, entre ellos están cómo usar el motor con Visual Studio, con Dev-C++ y con CodeWarrior. Eso quiere decir que con esos tres debe funcionar bien. Elige el que más te agrade (o el que más sencillo te resulte de conseguir).

Un saludo.

Ruben3d

368
Programación de Videojuegos / Re: Extraer Musica
« en: Sábado 3 de Julio de 2004, 21:02 »
No conocía ese programa, y no sé qué herramientas tendrá, ni qué formato usa para almacenar el audio. Prueba a preguntar en webs dedicadas al programa.

Un saludo.

Ruben3d

369
Sobre los Foros de SoloCodigo / Re: Contento
« en: Sábado 3 de Julio de 2004, 20:55 »
Hola!

También yo estoy contento por el crecimiento del foro, y porque no se ha convertido en un lugar de peticiones de trabajos hechos (como otros foros del tema, donde la mayor parte de los post son del estilo 'Necesito un código que haga tal cosa').

Un saludo.

Ruben3d

PD: Gracias JuanK!

370
Programación de Videojuegos / Re: Extraer Musica
« en: Viernes 2 de Julio de 2004, 18:04 »
Si el nombre completo es "Pump it up", las canciones están en formato mp3 en su web oficial:

http://www.pumpitup.co.kr/sp/down/mp3.html

Un saludo.

Ruben3d

371
C/C++ / Re: Como Salgo De Un Programa?
« en: Viernes 2 de Julio de 2004, 17:53 »
Hola.

Efectivamente, si el hilo de ejecución está en main con return saldrás de la función, y en este caso, del programa.

En cambio, si estás en alguna subfunción has de usar exit. Esta función realiza las misma acciones que un return en main: para la ejecución del programa y ejecuta las tareas de limpieza (se pueden registrar funciones para que se ejecuten al finalizar) y, a continuación, devuelve al sistema operativo el código de retorno.

Sin embargo, dependiendo de la gravedad de lo sucedido para tener que abortar la ejecución, podrías necesitar el uso de abort. Esta función cancela la ejecución sin realizar las tareas de limpieza y devuelve el control al SO inmediatamente.

En C++ la diferencia entre exit y abort es aún mayor. Con la primera los destructores de los objetos son llamados, mientras que con la segunda no.

Un saludo.

Ruben3d

372
C/C++ / Re: Error: Infracción De Acceso (0xc0000005)
« en: Viernes 2 de Julio de 2004, 17:41 »
Hola.

Ya vi tu problema. No es fopen el que da el error, es la asignación de lo que retorna a la variable miembro, a través del '='. Si te fijas, en vez de declarar los objetos declaras punteros a los objetos, y los utilizas sin haber reservado memoria para ellos. Por ello, cuando al método se le pasa el puntero this, que apunta a las variables miembro del objeto, se le pasa un puntero sin inicializar. De esta manera, cuando desde el método intentas escribir en la variable miembro estás incurriendo en una violación de protección de memoria, pues no se ha reservado. ¿Cómo hacer esto? Así:

Código: Text
  1. archivo *nuevo = new archivo;
  2.  

y cuando acabes de usarlo, has de hacer:

Código: Text
  1. delete archivo;
  2.  

Con estas llamadas se realiza también las llamadas a los constructores y destructores.

Un saludo.

Ruben3d

373
Programación de Videojuegos / Re: Extraer Musica
« en: Viernes 2 de Julio de 2004, 12:02 »
Hola.

Ayudaría que dijeras de qué juego se trata. Muchos están basados en un engine común y disponen de utilidades para manipular sus archivos de datos.

Un saludo.

Ruben3d

374
Programación de Videojuegos / Re: Necesito Ayuda
« en: Viernes 2 de Julio de 2004, 12:00 »
Hola.

Yo te recomendaría que antes de hacer un juego 3D practicaras haciendo juegos 2D, para luego poder saber diferenciar los problemas debidos a la dimensión adicional de los de diseño del juego. Si quieres ahorrar trabajo de recomiendo algún engine ya hecho. Para lo que quieres creo que este te vendría muy bien:
Irrlicht Engine

Un saludo.

Ruben3d

375
C/C++ / Re: Error: Infracción De Acceso (0xc0000005)
« en: Miércoles 30 de Junio de 2004, 22:42 »
De acuerdo, mañana te lo pruebo.

Páginas: 1 ... 13 14 [15] 16 17 ... 30