viernes, 14 de diciembre de 2012

KH Project Update 15/12/2012

Coding the game's title screen is proving to be harder than I expected.
I need to improve the handling and display of 3D models for a faster rendering. Currently it decreases the framerate by a lot. Hopefully I'll be able to to fully understand and use the new OpenGL functions such as glDrawArrays and glDrawElements.

2 comentarios:

  1. Vaya, si no usas glDrawArrays ni glDrawElements, significa que no estás aprovechando los Vertex Buffers del adaptador gráfico, con lo cual pierdes las ventajas de optimización de los VBO's, IBO's y PBO's.

    Deduzco por tanto, que usas el modo inmediato de renderizado (glBegin/glEnd). Ahí estaría el problema de optimización. Eso me lleva a pensar que desarrollas con openGL edición de escritorio (en lugar de GLES), con lo cual debes estar usando un provider (GLUT? SDL?) que probablemente esté minando también la velocidad de ejecución.

    Mi recomendación: olvídate completamente de la edición de escritorio, contiene cantidad de chorradas descatalogadas que no hacen más que limitar el rendimiento y la compatibilidad (ya que el por ejemplo, el modo inmediato va a desaparecer, y que harías luego con tu código?).

    En GLES 2.0, además de ser 100% multiplataforma, sólo tienes un subconjunto reducido de funciones openGL (las de alto rendimiento); la desventaja que es obligatoriamente tienes que usar el pipeline programable (GLSL, vertex/fragment shaders, etc...), con lo cual no hay modo inmediato ni transformaciones matriciales del lado de la CPU.

    La ventaja es que el código desarrollado va brutalmente rápido puede ser ejecutado en Android, IOS, PS3, Windows, etc...

    Eso sin hablar de optimización: yo consigo 1.8 millones de vértices (completos: posiciones, normales, texcord, colores, huesos y pesos) + animación esqueletal por vertex shadders a 30 fps constantes en un Android con Tegra 2... No está nada mal.

    Tal y como lo estás haciendo ahora, supongo que piensas liberar el proyecto para Windows/Linux: En windows openGL es como si no existiera, casi no hay soporte y los juegos "de verdad" se desarrollan en DirectX con XNA. En Linux, sencillamente, no se juega ;)

    ResponderEliminar
    Respuestas
    1. La verdad es que no estoy usando SDL ni GLUT, uso simplemente OpenGL legacy y la API de Windows para crear la ventana y el contexto en el que corre OpenGL.

      Y sí, tienes razón. Estoy usando el modo inmediato glBegin/glEnd, pero hasta ahora no sabía ni que existía otra forma de mostrar vértices, normales y demás.

      Sé que en Windows OpenGL no está muy soportado, pero la razón por la que quería hacerlo es para que el código pudiera más tarde portearse a otras plataformas con facilidad.

      De todas formas me considero muy noob a la hora de trabajar con pipeline gráficas ya que no tengo apenas experiencia. Precisamente estaba haciendo esto para ponerme seriamente a aprenderlo bien.
      Tampoco quería pasarme a una versión más adelantada de OpenGL porque sinceramente no creo que sea capaz de programar shaders aún. Prefiero acostumbrarme un poco más a ver cómo funciona la programación gráfica antes de meterme en cosas más complejas.

      De todas formas gracias por este comentario tan lleno de información. Tendré muy en cuenta todo lo que has dicho.

      Eliminar