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 - kaito

#1
Principiantes / Código vb .net 2008: Pizarra
22 de Septiembre de 2012, 08:28:51 PM
He retomado visual basic .net para crear una aplicación de dibujo/pintado por capas utilizado la funciones del GDI+. Anteriormente realicé otra aplicación, compuesta por 3 minijuegos o formularios, que implementaba una librería de sonido y una base de datos creada con acces: http://www.stratos-ad.com/forums/index.php?topic=14554.msg149416#msg149416

Durante el proceso, he descompuesto una imagen en blanco y negro (para colorear) en varias partes. De este modo logramos pintar o dibujar áreas específicas fácilmente.


Descargar: https://app.box.com/s/q2j5m4l1pfz7mp0g0dmf

Para obtener el alphaMask de cada capa o layer, he utilizado una pequeña parte del código creado por: http://www.codeproject.com/Articles/313143/VB-NET-Image-Filters

Para el dibujo, inicialmente utilizaba la función 'drawline', pero finalmente he utilizado el ejemplo de 'drawpath' utilizado en el código: http://www.codeproject.com/Articles/4634/A-Simple-VB-NET-Freehand-Drawing-method (aunque en este proyecto no dibujaba sobre un bitmap).

-------------------------

PROBLEMA SURGIDO: Superponer dos o más imágenes con canal alfa en VB.

En el ejemplo, dentro de la carpeta imágenes(que se encuentra dentro de la carpeta debug de la solución) encontramos la imagen principal -sin descomponer-. Las diversas partes de la imagen se encuentran dentro de la subcarpeta 'imgs' que comparten el mismo nombre y se encuentra numeradas desde cero.

En la primera imagen cero o capa/layer inicial, ubicamos las líneas o trazos en negro del dibujo junto a las partes del dibujo que no queramos colorear (por ejemplo el blanco de los ojos, alguna sombra, etc...).

En VB, las imágenes se muestras desde un objeto 'PictureBox'. Pero si superponemos dos o más 'PictureBox' las partes transparentes de la imagen se muestran opacas.

Para poder superponer varias imágenes (en el ejemplo utilizo 12 capas o layers), se debe superponer las imágenes desde un 'Bitmap' utilizando la GDI+ mediante la clase 'Graphics'. Después asociamos el bitmap generado durante la composición a un único 'PictureBox', actualizando la imagen mediante el método 'Refresh'.

Con este método, se podría crean las animaciones y composiciones necesarias para un juego 2D básico.

--------------------------------------------

La composición de pintado consta de:rellenar completamente del color seleccionado, dibujar alphaMask, hacer transparente color negro, montar encima el resto de capas no seleccionadas, y la composición del dibujo: mostrar capa con el área específica seleccionada, dibujar trazos, dibujar alphaMask, hacer transparente color negro, montar encima el resto de capas no seleccionadas.

En la composición,  utilizamos el evento click del ratón (para el pintado), y los eventos mousemove y mouseup (para el dibujo).

-----------------------------------------

También, en el primer proyecto que hice en vb, utilicé unas dimensiones fijas de ventana 1024x768 centrado. Me pareció muy complicado realizar un cambio de resolución de pantalla desde un proyecto WindowsForm con vb, lo que en los motores de juego se realiza sin mucha dificultad.

Este nuevo proyecto es completamente SIZEABLE. El formulario está diseñado desde una resolución de 800x600 (existente en todos o casi todos los equipos actuales), donde todos los controles (excepto la barra de menú) se ajustan a las dimensiones actuales del formulario. Para esto, he guardado en la propiedad de texto 'AccesibleDescription' de cada control 'sizeable' su localización y dimensiones separado por ;

Luego una rutina se encarga de separar cada dato y calcular la nueva posición y dimensión del control.
#2
Siguiendo algunos tutoriales de la web (aconsejo el excelente trabajo de Willy Dev: http://www.willydev.net/descargas/Cursos/vbnet/ ) y algunas muestra de código en foros, he conseguido finalizar un proyecto que tenía en mente.

El proyecto utiliza una base da datos de Access 2007, de donde obtiene la ruta de acceso de las imágenes, y el vocabulario compuesto por 5 idiomas (español, inglés, alemán, francés e italiano), junto a los archivos de sonido con las respectivas voces. En total, está compuesto por 494 términos en los diferentes idiomas que forman 2470 definiciones y 2470 voces.

Para realizar la base da datos, he preferido crearla desde Excel que tiene más opciones de "autocompletado" para después importarla desde Access.

En sistemas de 64-bits ADO.NET da problemas del tipo: El Proveedor 'Microsoft.ACE.OLEDB.12.0' no está registrado en el equipo local. Por lo que he realizado una segunda versión que funciona tanto en 32 como 64 bits, que utiliza un archivo binario como fuente de datos a través de una matriz del tipo 'string', después de volcar los datos de la base de datos Access mediante una pequeña solución o proyecto de Visual Basic.

Para obtener las voces en los diversos idiomas he utilizado el programa "Balabolka": http://www.cross-plus-a.com/es/balabolka.htm

Visual Basic soporta los archivos de sonido ".wav", mientras que los archivos de audio utilizados se encuentran en formato ".wma" (más ligeros), por lo que ha sido necesario utilizar la librería de sonido BASS ( http://www.un4seen.com/ ) junto a un plugin.

Para utilizar la librería de sonido BASS es necesario instalar su .NET API ( http://www.un4seen.com/download.php?z/4/Bass24.Net.zip
  ), para poder añadir una referencia a dicha API desde el menú Proyecto--> Propiedades 'nombre proyecto'--> Referencias--> 'Pulsar sobre botón -Agregar-'. Finalmente añadimos la línea de código 'Imports Un4seen.Bass' en la cabecera de nuestro código para poder utilizar la librería BASS.

El proyecto está compuesto por:

- Un módulo con variables y funciones genéricas (sobre todo las de sonido)

- Un cuadro de diálogo con el que, al inicio del programa, seleccionamos el idioma.

- Tres formularios que representan los 3 tipos de juego que son:

*DICCIONARIO*

*ABECEDARIO*

*JUEGO DE CARTAS*

-----------------------------------------------------------------------------------------------------------

Las descargas incluyen el proyecto completo, donde encontraréis tanto el diseño de las diferentes ventanas como el código generado para Visual Basic, para lo que será necesario tener instalado Visual Basic 2008 Express Edition: http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express

También está disponible la versión 2010 Express Edition: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express  Pero esta versión no la tengo instalada.

Para la primera versión que funciona sólo en 32 bits y utiliza una base de datos Access 2007, en el caso de no tener instalado Office 2007, también es necesario '2007 Office System Driver: Data Connectivity Components': http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23734

El enlace de descarga de la primera versión para sólo 32 bits que utiliza base de datos Access 2007: http://www.box.net/shared/szd9dktflrv2i8uz9ty3

El pequeño proyecto o solución que he utilizado para volcar el contenido de la base de datos Acces a un archivo binario ha sido este: http://www.box.net/shared/dxtocp8uj4jzlpu0o8u7

La versión final, que funciona tanto para 32 como para 64 bits, utiliza un archivo binario como fuente de datos (creado con la aplicación anterior) en lugar de la base de datos Acces, y además incluye la versión de 32 y 64 bits de la librería de sonido BASS y su plugin para archivos de sonido ".wma", donde mediante código detecta la plataforma existente y carga los .dll's requeridos.

Enlace de descarga de versión final 32-64 bits: http://www.box.net/shared/l8zb4qvhyarxye546dtf

En ambas descargas, encontrareis las carpetas de compilación donde se encuentra el archivo ejecutable '.exe', y sólo es necesario tener instalado el 'Framework 3.5': http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=21 (y para la primera versión, además, el 'Data Connectivity Components': http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23734 si no tienes instalado Office 2007 )

Saludos.
#3
Hola.

Todos conocen el tema relacionado con el modding de juegos, donde podemos extraer los recursos del juego para ser modificados.

Si quisieramos utilizar esos recursos fuera de ese juego, en un nuevo proyecto desarrollado con un motor de juego ¿nosotros podríamos?.

Cuál es la normativa vigente (creo que cada país aplica normas diferentes, como Estados Unidos y España), o cuáles son las limitaciones de uso de estos recursos (modelos 3D, sonidos, texturas, ... ).

Creo que sería posible utilizar los recursos de un juego comercial para un proyecto personal y no comercial, pero no podríamos dejar un enlace de descarga de ese proyecto que incluye los recursos extraídos de un juego comercial.

Por último, sería posible, a base de ciertas modificaciones en el modelo 3D, poder ser utilizado libremente.

Saludos.




#4
Principiantes / TRIGONOMETRIA y juegos 3D
20 de Febrero de 2009, 03:00:21 PM
Saludos.

He realizado un pequeño ejemplo de código donde comento las diferentes funciones utilizadas en Esenthel para controlar la cámara: http://perso.orange.es/tomas_cg75/TallerCamara.html

En el ejemplo necesité calcular el angulo vertical y horizontal entre dos posiciones 3D (x,y,z), y al mismo tiempo hice otra función donde calcular la distancia.

La cuestión es que me puse a buscar información sobre trigonometría y sólo encontraba las fórmulas elementales pero ningún sitio donde se comentara la trigonometria aplicada sobre juegos.

Tal vez la razón de esto sea que los motores de física (PhysX, ODE, etc...) ya incorporan funciones que calculan estas cosas.

Quería preguntar al foro si conocen otras funciones que contengan fórmulas matemáticas (en c++ si es posible) útiles para realizar juegos 3D (movimiento, parábola al lanzar un objeto, trazar un camino (path) para la cámara a partir de una matriz de posiciones, simular el balanceo de un barco en el agua,....)   ???

También agradecería que echaran un vistazo a las funciones Yaw y Pitch del código de ejemplo.
#5
General / ¿Existe algún game engine hispano?
24 de Enero de 2009, 05:03:53 PM
Sólo por curiosidad, conocen algún game engine creado o desarrollado por algún programador hispano. Y si es posible que utilice al menos las librerías del DirectX 9.

Una dificultad añadida, sobre todo a los programadores noveles, es el idioma ya que todos los game engines, tanto comerciales  como 'open source', tienen su documentación en inglés.
#6
General / ESENTHEL Engine. ¿Lo conocian?
12 de Enero de 2009, 01:38:32 PM
Saludos Foro.

Buscando modelos3d gratuitos he encontrando este engine del que no había escuchado hablar en ningún foro, pero creo que tiene muchas posibilidades y futuro.


ESENTHEL Engine es GRATUITO para su uso NO comercial.


Página oficial: http://www.esenthel.com/en/engine/screens.html

Más imágenes:
http://es.youtube.com/watch?v=pwGkvEctT4Q&feature=channel_page
http://es.youtube.com/watch?v=fMzXYALnpsQ&feature=channel_page
http://es.youtube.com/watch?v=R99EUSYdSVM&feature=channel_page
http://es.youtube.com/watch?v=ODubyrnhAb8&feature=channel_page
http://es.youtube.com/user/drean37
http://es.youtube.com/watch?v=ZXpDjwWCu4Y&feature=channel_page
http://www.moddb.com/engines/esenthel-engine/images/esenthel-engine2
http://www.devmaster.net/forums/showthread.php?p=64112#post64112


Sitio de descarga de la SDK del engine: http://www.esenthel.com/en/engine/download.html



Juegos creados con el engine:

Esenthel Game: http://www.esenthel.com/en/game/download.html

Cyber FX: http://es.youtube.com/watch?v=DjzwOMUfX90&eurl=http://grabonstudio.tnb.pl/news.php

Forest Valley: http://es.youtube.com/watch?v=o7UqS6fRg7M&eurl=http://www.pbgame.dbv.pl/news.php?readmore=19



HERRAMIENTAS: World Editor, Gui Editor, Mesh Editor, calculator, converter, Functions, Icons, Image Viewer, Mouse Extend, Pak Viewer, Synchronizer.

TEXTURAS: Each texture is required to be in GFX format, however importing of BMP PNG JPG TGA DDS formats is allowed.

Tipos de 'Mesh' que soporta:

3DS - 3D Studio (mesh, no custom normals)
ASE - Ascii Scene Export (mesh)
OBJ - Wavefront OBJ (mesh)
WRL - VRML97 (mesh)
X - DirectX (mesh + skin + animation)
XML - Ogre Xml (mesh + skin + animation)

SONIDO:

WAV - wave - no compression
OGG - ogg vorbis - lossy compression

VIDEO:

THEORA - ogg, ogm, ogv



Después de instalarlo he probado "algunos" ejemplos, todavía no he podido probarlos todos, que vienen en archivos de código fuente del c++ (.cpp). Estos son:


BASICOS:

Start.cpp, Drawing.cpp, Input.cpp, Image.cpp, Cache.cpp, Gui.cpp, 3D.cpp, Mesh.cpp


AVANZADOS:

*GEOMETRIA: Camera.cpp, Matrix.cpp

*GRAFICOS: 2D Effects.cpp, Color Transformations.cpp, Colors HSB.cpp, Dynamic Image.cpp, Font Make.cpp, Import Image.cpp, VI-Vertex Index Buffer.cpp

*GUI: Bars.cpp, Buttons.cpp, Tabs.cpp, Window Menu.cpp, List.cpp, ComboBox.cpp, Game Menu.cpp, Loading Gui Objects.cpp, Extending Gui Objects.cpp, Multiple Viewports.cpp

*MISC: Calculator.cpp, Config.cpp, Cpu.cpp, Cursor.cpp, Drag&Drop.cpp, File.cpp, FileFind.cpp, FileText.cpp, IO Path.cpp, Memory.cpp, Number.cpp, Pak.cpp, Pak Create.cpp, Pathfind.cpp, Random.cpp, Sort.cpp, States.cpp, Sort.cpp, States.cpp, Threads.cpp, Threads2.cpp, Video Playback.cpp, Zip.cpp

*SONIDO: Music.cpp, Sound.cpp, Sound 3D.cpp, Volume Groups.cpp

*NET: Downdload.cpp, Socket.cpp

*ANIMACION: Animation.cpp, Skeleton Points.cpp, Blending.cpp, Manual Editing.cpp

*PHYSICS: Physics.cpp, Multi shaped actor.cpp, Joints.cpp, Joints 2.cpp, Controllers.cpp, Testing.cpp, Detecting objects under cursor.cpp, Grabbing.cpp, Physical meshes.cpp, Ragdoll.cpp, Vehicle.cpp, Cloth.cpp

*RENDERING: Rendering.cpp, Sky.cpp, Fog.cpp, Bumpmapping.cpp, Viewport.cpp, Motion Blur.cpp, Materials.cpp, Shadows.cpp, Volumetric Lights.cpp, Ambient Occlusion.cpp, Early Z.cpp, Bloom.cpp, Depth of Field.cpp, Particles.cpp, Blood.cpp, Explosion.cpp, Layered Clouds.cpp, Volumetric Clouds.cpp, Water.cpp, Markers.cpp, Mesh Outline.cpp, Laser and Electricity.cpp, Multi-Threaded Rendering.cpp

*MESH: Grass.cpp, Grass 2.cpp, Separate parts rendering.cpp, Terrain.cpp, Tree.cpp

*DEMOS: Auto Depth of Field.cpp, Day Night Cycle.cpp, Facial Animation.cpp, Lights.cpp, Nature.cpp

*GAME BASICS: Character.cpp, World.cpp, World with Character.cpp, Lights.cpp, Saving and Loading.cpp, Pathfind.cpp, Doors.cpp, Custom Parameters.cpp, Extending Game Object Class.cpp, Dynamically Created Objects.cpp, Waypoints.cpp, Character Animations.cpp, Character Default Animations.cpp, Character Facial Animations.cpp, Character Ragdoll.cpp, Camera Modes.cpp, Camera Collisions.cpp, Object References.cpp, Big Overlays.cpp

*SIMPLE PROJECT (Simula el proceso de un juego convencional, pero no contiene ningún juego. Para que funcione tienes que agregar todos los archivos .cpp y .h de la carpeta): Intro.cpp, Menu.cpp, Main.cpp, Game.cpp


---------------------------------------



REQUISITOS INSTALACION:

Microsoft Visual C++ 2008 (ejecutarlo al menos una vez después de instalarlo):
http://www.microsoft.com/express/download/

DirectX SDK Nov08:
http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en

PhysX System Software:
http://developer.nvidia.com/object/physx_downloads.html#System

Después de haber instalado el software anterior, extraemos la carpeta 'EsenthelEngineSDK' que se encuentra en el archivo .rar del engine que hemos descargado de aquí: http://www.esenthel.com/en/engine/download.html . Si utilizas windows Vista, mejor extraerlo fuera de la carpeta 'Archivos de Programa'.

Una vez hecho esto, ejecutamos VC++ 2008 y vamos al menú 'Herramientas-->Opciones'. Desde la ventana 'Opciones' seleccionamos 'Proyectos y soluciones' en la lista que aparece a la izquierda. Se abrirá mostrando nuevas opciones donde seleccionamos 'Directorios de VC++'.

Ahora, en la esquina superior derecha aparece la casilla 'Mostrar directorios para:' y la cambiamos, pinchando sobre ella, seleccionando 'Archivos de Inclusion'. Debajo de esta casilla se muestra una lista de rutas que comienzan por el signo $. Haz doble click debajo del último elemento de esa lista (utiliza la barra de desplazamiento si es necesario para ver el último elemento de la lista).

A continuación, mostrará un botón con 3 puntos seguidos '...'. Pincha sobre él y busca la carpeta 'Installation' que se encuentra dentro de la carpeta del engine que hemos instalado (es decir, dentro de la carpeta 'EsenthelEngineSDK'). Pulsa el botón 'Seleccionar Carpeta' para aceptar.

Seguimos, y cambiamos 'Mostrar directorios para:' a 'Archivos de biblioteca'. Volvemos a repetir los pasos anteriores para agregar otra vez la carpeta 'Installation' que se encuentra dentro de la carpeta del engine (otra vez, dentro de la carpeta 'EsenthelEngineSDK').

Pulsamos el botón Aceptar para cerrar la ventana Opciones.

Dentro de la carpeta del engine, para ejecutar los ejemplos vamos a la carpeta 'Tutorials'. Allí se encuentra la solución 'Tutorials.sln', pero sólo contiene el archivo 'Start.cpp' (dentro de la carpeta 'Source' de la solución). Pulsa F5. Si aparece el mensaje 'Este proyecto no está actualizado: ¿Desea Generarla?'. Pulsamos 'Sí'. Luego pulsa la telca 'Escape' para finalizar la demostración.


Para ir probando cada uno de los archivos .cpp, haz lo siguiente. Pincha con el botón derecho del ratón sobre el archivo .cpp (lista a la izquierda de la ventana), en este caso Start.cpp, y seleccionas 'Excluir del Proyecto'. Con esto lo habremos eliminado del proyecto.

Ahora para seleccionar un nuevo .cpp, ejecutamos la orden del menú 'Proyecto-->Agregar Elemento Existente' y abrimos un archivo .cpp que se encuentra en la carpte 'Source'. Para ejecutarlo vuelve a pulsar F5.

Tienes que ir probándolos 1 a 1, de otro modo te daría errores de compilación. Dentro de la carpeta 'Source' existe la carpeta 'Advanced' donde se encuentran el resto de ejemplos.


------------------------------------------



Ejemplo de Código. (Drawing.cpp)
================================

/***************************************************/
#include "stdafx.h"
/***************************************************/

   Here are presented the most basic drawing functions

/***************************************************/
void InitPre()
{
   App.name="Drawing";
   App.flag=APP_NO_FX;
   PakAdd("../data/engine.pak");
}
/****************************************************/
Bool Init()
{
   return true;
}
/******************************************************/
void Shut()
{
}
/******************************************************/
Bool Main()
{
   if(Kb.bp(KB_ESC))return false;
   return true;
}
/******************************************************/
void Draw()
{
   D.clear(WHITE); // clear to white

   // draw texts
   {   
      D.text(0,0,"Default text settings"); // default text draw

      TextDS tds; // text draw settings, contains information about font size, aligning, color, ..

      tds.color=BLACK; // set black color
      tds.scale*=1.4f; // change scale
      D.text(tds,0,-0.2,"Bigger");
     
      tds.scale/=1.4f;    // reset scale
      tds.align.set(1,0); // change aligning
      D.text(tds,0,-0.4,"Right Aligned");

      tds.color=GREEN;     // change color to green
      tds.align.set(-1,0); // change aligning
      D.text(tds,0,-0.6,"Colored Left Aligned");

      tds.align.set(0,0);              // reset aligning
      tds.color=ColorHue(Tm.time()/2); // assign color to Color Hue according to current time
      D.text(tds,0,-0.8,"Multi colored");
   }

   // draw shapes
   {
      D.rect  (BLUE  , 0.5,0.5, 0.6,0.6);  // draw blue rectangle at given coordinates
      D.circle(RED   , 0.1, -0.5,0.5);     // draw red circle with 0.1 radius at (-0.5,0.5) position
      D.dot   (BLACK , 0,0.5);             // draw black dot at (0,0.5) position
      D.line  (GREEN , -0.4,0.5, 0.4,0.6); // draw green line
      D.tri   (YELLOW,Vec2(-0.5,-0.4),Vec2(-0.4,-0.2),Vec2(-0.4,-0.4)); // draw yellow triangle from given points
   }
}
/******************************************************/





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.