TU ANUNCIO / YOUR PUBLICITY

AQUÍ PODRÍA ESTAR TU ANUNCIO: / HERE COULD BE YOUR AD E-mail

lunes, 7 de octubre de 2013

Fifth step: 3D viewing / Quinto paso: Visualización en 3D

Primeras consideraciones

First considerations


A primera vista no parece importante contar con una visualización en 3D. El objetivo primordial es tener una aplicación que nos permita hacer cosas que otros no hacen. Pero después se nos ocurrió que podría ser parte de un proyecto mayor. Por ejemplo, podríamos ir creando fotogramas de una película. Ese factor fue el que nos convenció para la realización de esta parte.

At first glance, this does not seem important to have a 3D display. The primary objective is to have an application that allows us to do things that others do not. But then we thought that might be part of a larger project. For example, we could be creating frames of a movie. That factor was convinced us to carry out this part.

Bibliotecas a utilizar.

Libraries to be used.


En las primeras pruebas intentamos hacer una visualización construida "a pinrel", desde cero. Estas primeras fases de programación fueron muy desalentadoras ya que el renderizado nos salía malo y lento.

Un pequeño golpe de suerte nos desvió hacia la biblioteca de OpenGD. Nos resultó muy fácil de utilizar. Una vez insertado en nuestro proyecto. Resulta fácil ir añadiendo funcionalidades.

In the first test we tried to display built by hand, from scratch. These early stages of programming, they were very disappointing because the rendering was of poor quality.

A small lucky break we drifted to OpenGD library. It was really easy to use. Once inserted into our project. It is easy to be adding features.


Existen muchos ejemplos en la web de cómo ir creando estos elementos en 3D. Símplemente realiza una búsqueda con: Visual Basic openGD y aparecerán cientos de ejemplos. en nustro caso la programación es muy sencilla:

There are many examples on the internet on how to get creating these 3D elements. you simply do a search with "Visual Basic openGD" and hundreds of examples appear. in our case the programming is very simple:

[...]
    Dim Pfd As PIXELFORMATDESCRIPTOR
    Dim PixelFormat As Integer
    Pfd.nSize = Len(Pfd)
    Pfd.nVersion = 1
    Pfd.dwFlags = 32 Or 4 Or 1 Or 0
    Pfd.iPixelType = 0 'PFD_TYPE_RGBA
    Pfd.cColorBits = 24
    Pfd.cDepthBits = 24
    Pfd.iLayerType = 0 'PFD_MAIN_PLANE:
    PixelFormat = ChoosePixelFormat(lhDC, Pfd)
    SetPixelFormat lhDC, PixelFormat, Pfd
    GLRC = wglCreateContext(lhDC): wglMakeCurrent lhDC, GLRC
    glMatrixMode GL_PROJECTION
    gluPerspective 80, Aspe, 0, 100: 'gluPerspective 45, 1, 0.1, 100
    glMatrixMode GL_MODELVIEW '
    If (m_superf > 0) Then glDeleteLists m_superf, 1
    m_superf = glGenLists(1)
    glNewList m_superf, GL_COMPILE_AND_EXECUTE
    glPushMatrix
    glPointSize TamanoPunto
    glBegin GL_POINTS
    glColor3d 0, 1, 0
For i = 0 To LosPuntosQueTengo
      glColor3d roj(i), ver(i), azu(i)
      glVertex3d X(i), Y(i), Z(i)
Next i
    glEnd
    glPopMatrix
  glEndList
  glLoadIdentity: glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
  glCallList m_superf
  SwapBuffers elh
[...]

Es un poco difícil de comprender todos los pasos previos hasta poder utilizar las funciones  glColor3d y glVertex3d  pero no imposible. Aconsejo paciencia y jugar antes con programs más sencillos.

It's a bit hard to understand all the previous steps until you can use the functionsglColor3d y glVertex3d  but not impossible. I advise patience and play before with simplest programs.

Empezando.

Starting.


Pinchando "Visulización 3D", nos aparecerá el siguiente pantallazo:

Clicking "3D visualization features" ("Visulización 3D"), we see the following screenshot:


Ejemplo con un tamaño de punto de 2px
Example with a point size of 2px


Nos aparecen las siguientes opciones:

  • Opciones que permiten giros: Gx, Gy y Gz: nos permiten girar el conjunto de puntos en torno al punto central en los ejex X, Y y Z.
  • Opciones que permiten desplazamientos: Mx, My y Mz que nos permiten desplazar el conjunto de puntos según esos ejes.
  • Opciones de perspectiva: Ax, Ay y Az que nos permites cambiar el punto de visión.
Al lado de cada "Scroll" se irá colocando un valor numérico que nos permitiría, en un futuro, volver a colocar las constantes en donde quisiéramos.

Las funciones del botonado son las siguientes:

Recuadro EXT.: Visualiza todos los puntos seleccionados en Detalle del recuadro exterior. Si vienen de un pk. La primera visualización será en la dirección del eje.

Recuadro INT.: Visualiza todos los puntos seleccionados en Detalle del recuadro interior.

Guarda: permite almacenar la imagen en formato JPG, BMP, PNG y GIF. Paso previo para la creación de películas.

We have the following options:



  • Options that allow twists: Gx, Gy and Gz: let us turn the set of points around a central point in the axes X, Y and Z.
  • Options that allow movements: Mx, My and Mz that allow us to move the set of points according to these axes.
  • Perspective Options: Ax, Ay and Az let us change the point of view.
  • Beside each "Scroll" will leave placing a numerical value that would allow us, in the future, replace the constants in where we wanted.


The button functions are:

Box EXT.(Recuadro EXT.): Displays all selected points in detail outer box. If you come from a KP. The first display will be in the direction of the axis.

Box INT.(Recuadro INT): Displays all selected points in Inset detail inner box.

Save (Guarda): Save the image in JPG, BMP, PNG and GIF. First step to creating movies.



Creación de películas.

Filmmaking.


Aquí ponemos algunas de las películas que hemos subido a YouTube como ejemplo de lo que se puede hacer, jugando con los tamaños de los puntos, giros y optando por recuadros exteriores y/interiores.

Here we put some of the movies we've uploaded to YouTube as an example of what can be done, playing with the sizes of the points twists and opting for external and internal boxes.


1 comentario:

  1. Javier Álvarez: ¿Por qué no se ha utilizado la típica conexión a OpenGL a traveś de un módulo de VB?

    ResponderEliminar