|
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 ... 12 13 [14] 15 16 ... 30
326
« en: Lunes 19 de Julio de 2004, 13:56 »
me alegra que un experto como tu comente mi humilde libro No me considero un experto, aún me queda bastante por aprender de C++ (las excepciones, la herencia múltiple, templates y, sobre todo, el STL dan para bastante más de lo que parece al principio). Hablas como si fuera un escritor famoso que te aconseja . "Teach Yourself C++ in 21 Days" Si el título fuera "Teach Yourself QBasic in 21 Days" me lo creería, pero tratandose de C++ creo que es un poco engañoso (como las dietas de 'pierda 10 kilos en un mes sin ejercicio'). Veo imposible que el libro enseñe todo lo que hay que saber de C++ de manera correcta y esté pensado para que se complete en 21 días (hombre, puede coger y enumerar rápidamente todo lo que hay que saber, pero de esa manera creo que será más bien poco didáctico). Te aconsejo Thinking in C++ 2nd Edition by Bruce Eckel, que se puede descargar de su web. A ver si tengo tiempo y empiezo con el segundo volumen. Así que también debes quejarte con el Si sirviera para algo o me hiciera caso lo haría "El Arte de Programar -PHP" Qué barbaridad, no paras. Si acabaste hace nada el gato cheko, tomate un respiro . Yo ahora mismo tengo que empezar con ASP.NET, pero creeme que le echaré un ojo (a modo de sugerencia, podrías escribir un primer capítulo de introducción indicando de manera sencilla cómo instalar el Apache con PHP, o lo que sea que uses (aunque el Apache es multiplataforma)). Bueno, me quedo esperando tu siguiente obra Un saludo. Ruben3d
327
« en: Domingo 18 de Julio de 2004, 21:23 »
Hola. Hace tiempo que quería echarle un vistazo al arte de programar c++, pero hasta ahora no había tenido mucho tiempo. El libro está bastante bien, pero te voy a hacer algunas críticas (constructivas, claro ). Creo que deberías actualizar los códigos de ejemplo para que dejaran de utilizar las cabeceras antiguas (con el .h), usar las versiones de C++ de las de C (cstdio en vez de stdio.h) y contar algo sobre los namespaces y ámbito y visibilidad, y resolución de conflictos de visibilidad derivados del 'using namespace'. También creo que deberías evitar el uso de conio.h, pues es específico de Borland y creo que el código se debería poder compilar en cualquier entorno y sistema operativo. Por otro lado, creo que deberías introducir el uso de los arrays bastante antes, que llega un poco tardío, y también punteros y referencias, todos ellos antes de las clases. Luego en las clases, haces algún apartado que trate estos puntos en relación con los objetos. Las secuencias de control también deberían ir antes. En el capítulo de Herencia, explicas el polimorfismo en la sección de métodos virtuales (que es eso, pero no lo mencionas), y en el capítulo de Polimorfismo lo que estás explicando es la herencia múltiple, no el polimorfismo (no creo que ese tema deba ir en un libro de introducción). Por último, creo que deberías usar desde el principio algunas clases del STL, como string y vector, y no usar para cadenas de caracteres char*. Es más correcto tratandose de C++. Además, deberías dedicar un capítulo al manejo de ficheros con streams. A veces me da la impresión de que es un C con clases, en vez de C++. Más o menos, creo que con estos cambios mejoraría el libro. Ya me dirás lo que opinas. Un saludo. Ruben3d
329
« en: Domingo 18 de Julio de 2004, 13:15 »
Hola.
El sistema operativo Windows trae soporte para la ejecución de aplicaciones en C++, por lo que si no has usado librerías diferentes a las estándar no deberías tener problemas. Si lo hiciste, incluyelas junto a tu aplicación a la hora de distribuirla (pero ten en cuenta la licencia de estas librerías en cuanto a distribución).
Un saludo.
Ruben3d
330
« en: Domingo 18 de Julio de 2004, 13:13 »
Hola.
Todas las aplicaciones tienen que devolver un código de error cuando finalizan. El código 0 significa que la aplicación ha terminado sin problemas. El resto de códigos sirven para indicar algún problema (en MS-DOS se podía ver el código de retorno de la última aplicación ejecutada con errorlevel en un BAT). Si el main es declarado retornando void en vez de int, se asumirá que retorna siempre 0 (el compilador se encarga de insertar el código necesario). Puedes devolver otro valor mediante la función exit.
Un saludo.
Ruben3d
331
« en: Domingo 18 de Julio de 2004, 13:02 »
Hola.
Una función es un fragmento de código al que se salta con una llamada y se pasan los parámetros por la pila. Una macro es un bloque de código que es insertado donde sea usado por el preprocesador, pero carece de chequeo de sintaxis y tipos. Una función inline es como una macro para C++, pero se resuelve en tiempo de compilación, por lo que tiene chequeo de sintaxis y tipos (aunque es menos flexible que una macro).
En cuestión de velocidad, lo más rápido son las funciones inline y las macros, pero hacen que el tamaño del programa sea muy grande, ya que se repite el código encada lugar en donde sea utilizado (además, las macros tienen el problema añadido de que no se comprueba su corrección hasta la sustitución en el código).
Un saludo.
Ruben3d
332
« en: Domingo 18 de Julio de 2004, 12:55 »
Hola.
Cuando se reinicia el ordenador claro que se libera la memoria. Es más, en sistemas como Windows XP se libera también cuando sales de la aplicación. Lo importante no es liberarla al salir, sino liberarla cuando ya no se use. Imagina un programa que esté continuamente ejecutando un bucle que reserva un número de bytes. Si no los vas liberando cuando los dejas de usar, acabarás por llenar la memoria (y ya de poco sirve que tuvieras pensado liberarlos al salir de la aplicación).
Un saludo.
Ruben3d
333
« en: Domingo 18 de Julio de 2004, 12:44 »
Hola. Como has mencionado, necesitas un puntero a puntero, algo así: void NuevaMemoria(unsigned char **Texto, long Tam) { if ((*Texto = (unsigned char *)realloc(*Texto, Tam)) == NULL) // Realoja memoria { printf("Error en memoria, programa interrumpido..."); exit(1); } }
Un saludo. Ruben3d
334
« en: Sábado 17 de Julio de 2004, 13:26 »
Hola.
Con Milkshape 3D puedes modelar fácilmente cosas simples, y exportarlas a una infinidad de formatos. Luego, según el formato que hayas elegido, deberás cargarlo y almacenarlo en las estructuras de tu programa (no genera directamente código fuente).
Un saludo.
Ruben3d
335
« en: Miércoles 14 de Julio de 2004, 13:16 »
Aunque esa es la web oficial de Microsoft, siempre me ha parecido más útil esta: Pocket PC Developer NetworkUn saludo. Ruben3d
336
« en: Lunes 12 de Julio de 2004, 22:29 »
La mayor parte de la gente suele empezar por la determinación de visibilidad y dejar para después la física, ya que las optimizaciones de lo uno sirven para lo otro.
El PVS es el Potential Visible Set de cada hoja el árbol, es decir, el conjunto de hojas que pueden ser vistas desde cada una. Esto lo tienes bastante bien explicado en el segundo link que te he puesto.
Un saludo.
Ruben3d
337
« en: Lunes 12 de Julio de 2004, 12:41 »
Hola. En teoría, en cada hoja del árbol sólo puede haber conjuntos convexos de triángulos, para que se pueda pintar sin necesidad de Z-Buffer. Durante la generación del árbol lo correcto es, si un triángulo es atravesado por el plano de partición espacial, partirlo y enviar cada parte al nodo que corresponda. Si en la escena tienes objetos (imagina un adorno en una habitación) puedes computar en qué hoja del árbol estaría y pintarlo tras pintar esa hoja (gracias al back-face removal no va a ser tapado por un polígono de esa misma hoja). Si el objeto no se va a mover (es estático) podrías simplemente haber añadido sus polígonos al conjunto de polígonos del escenario y haber generado el árbol con él, pero esto es lento a la hora de comprobar colisiones. Si no creas el árbol de esta manera te verás obligado a utilizar el Z-Buffer, ya que se pierde la propiedad de que todos los triángulos se pintan en orden de más lejano a más cercano (si estás usando una aceleradora gráfica puedes hacer la vista gorda, ya que el Z-Buffer por hardware es muy rápido). Con respecto a las colisiones, te recomiendo que las realices empleando el árbol BSP, que ya lo tienes creado. Como has mencionado, calcula colisiones elipsoide/triángulo para cada triángulo y contra cada bounding box de cada objeto del nodo actual y para cada nodo en el PVS del actual (si no has calculado el PVS de cada hoja tras generar el árbol BSP no sé a qué esperas!). Aqui tienes un par de enlaces que explican esto: Binary Space Partitioning Trees FAQBinary Space Partitioning Trees and Polygon Removal in Real Time 3D RenderingEspero que con esto te haya aclarado tus dudas. Un saludo. Ruben3d
338
« en: Viernes 9 de Julio de 2004, 19:55 »
No está mal, pero toca demasiadas cosas muy superficialmente (he visto también algunos libros así). Creo que sería mejor profundizar en cosas concretas. Algunos algoritmos de ordenación dan para bastante más, y la parte de memoria virtual es bastante escasa.
Un saludo.
Ruben3d
339
« en: Viernes 9 de Julio de 2004, 19:41 »
no se para mocosofth no viva Linux, Unix, FreeBSD No te ha preguntado tu opinión sobre la plataforma que ha elegido. Ha pedido colaboración.
340
« en: Viernes 9 de Julio de 2004, 19:37 »
Hola.
Windows XP se puede instalar en modo de actualización. Antes de instalarse puedes analizar el ordenador para detectar futuras incompatibilidades y así decidir si sigues con la instalación o no.
Un saludo.
Ruben3d
341
« en: Viernes 9 de Julio de 2004, 19:32 »
ademas, para que correr programas de Win en GNU? ¿Te das cuenta de lo absurdo de lo que has dicho? ¿Tal vez los quieras correr porque los necesitas y no hay ningún programa GNU tan bueno como MAX o Maya? Reconozcamos que Blender está muy bien, pero aún lejos de los dos productos comerciales que he mencionado. Por cierto, hay versión de Maya para Linux y, si quieres, puedes usar VMware para ejecutar el MAX. Un saludo. Ruben3d
342
« en: Viernes 9 de Julio de 2004, 19:02 »
Hola.
La única manera de poder usar un método de una clase sin crear una instancia de ella es haciendolo estático, pero este método sólo podrá usar miembros/métodos estáticos. No se puede hacer de otra manera. Planteate por qué un método estático iba a necesitar métodos no estáticos, o por qué no quieres crear una instancia de la clase.
Un saludo.
Ruben3d
343
« en: Viernes 9 de Julio de 2004, 16:24 »
Hola. Me he encontrado, navegando por internet, el Quake 2 portado íntegramente a Delphi. Lo dejo aqui a modo de curiosidad: Quake 2 Delphi ConversionTambién puse hace algún tiempo un link a la versión en Java. A ver si lo encuentro en algún otro lenguaje . Un saludo. Ruben3d
344
« en: Viernes 9 de Julio de 2004, 13:24 »
int bufsize = width * height * 4; GLubyte* rgbaBuffer = new GLubyte[bufsize]; glDisable(GL_TEXTURE_2D); glReadPixels ( 0, 0, (GLsizei)width, (GLsizei)height, GL_RGBA, GL_UNSIGNED_BYTE, (GLubyte*)rgbaBuffer);
Este código guarda en rgbaBuffer lo que haya en el buffer de color. Cada píxel son 4 unsigned char: rojo, verde, azul y canal alfa. Con esto ya puedes hacer lo que quieras: puedes guardarlo en disco en algún formato, y luego abrirlo con un programa gráfico e imprimirlo, o cualquier otro tratamiento que se te ocurra. Un saludo. Ruben3d
345
« en: Viernes 9 de Julio de 2004, 02:43 »
Y dale con el linux. Si probablemente esté usando Windows. De todas formas, puedes ejecutar 3dsmax o maya con wine, o usar la versión de Blender para Linux.
Un saludo.
Ruben3d
346
« en: Viernes 9 de Julio de 2004, 01:33 »
Asombroso, porque yo he realizado la modificación y compila perfectamente. Aqui tienes el archivo:
usaArchivo.cpp <!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1--> ///////////////////////////////////////////////////////// //Archivo: usaArchivo.cpp ///////////////////////////////////////////////////////// #include <cstdio> //#include <conio.h> #include <cstdlib> #include <iostream> #include "archivo.h" using namespace std;
int main(int argumentos, char *archivos[]) { archivo *matriz = new archivo, *comandos = new archivo, *nuevo = new archivo;
char *nomMatriz, *nomComandos, *nomNuevos;
//Verifica que solo se coloquen 2 argumentos if(argumentos > 3) { printf("\n\nDemasiados argumentos, coloque solo dos."); printf("Presione una tecla para terminar..."); cin.get(); exit(1); } nomMatriz = &archivos[1][0]; cout << "Nombre matriz: " << nomMatriz << "\n"; nomComandos = &archivos[2][0]; cout << "Nombre comandos: " << nomComandos << "\n";
nomNuevos = "nuevo.txt"; cout << "Nombre nuevo: " << nomNuevos << "\n"; nuevo->abrirArchivoEscribir(nomNuevos); // Esto dá el error!!!
nuevo->cerrarArchivo(); matriz->cerrarArchivo(); comandos->cerrarArchivo(); delete nuevo; delete comandos; delete matriz;
cin.get(); return 0; }<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
Un saludo.
Ruben3d
347
« en: Jueves 8 de Julio de 2004, 20:09 »
pFunc es el parámetro de la función enlace, y está declarado según el estándar de C. Cuando se llama a la función enlace se le pasa como parámetro la dirección de memoria de otra función, que es ejecutada desde el interior a través de pFunc.
348
« en: Miércoles 7 de Julio de 2004, 21:38 »
pFunc es un puntero a una función.
349
« en: Miércoles 7 de Julio de 2004, 19:58 »
no decia eso sino que eme entro al duda de como ahcerlo en c En el ejemplo que puse, es el caso en el que se pasa una función como parámetro. En C es igual. Un saludo. Ruben3d
350
« en: Miércoles 7 de Julio de 2004, 19:54 »
Hola. En esta serie de artículos se explica cómo hacer un Tetris con DirectX, programando en ensamblador: Win32 ASMUn saludo. Ruben3d
Páginas: 1 ... 12 13 [14] 15 16 ... 30
|
|
|