FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
Opengl???
Hola a todos. En esta ocasión os remito este mensaje para que me aconsejeis. En aplicación que estoy desarrollando he de dibujar un sistema de coordenadas en 2D que permita realizar gráficas y otras funciones como zoom y desplazamiento. Esta última solo estará activa cuando el zoom se encuentre al 100% y las gráficas dibujadas sobresalgan de los límites de la ventana. Pues bien, estoy estudiando la posibilidad de realizar esta aplicación con OpenGL, aunque no estoy muy decidido debido a que la complejidad del programa no es tan alta como para optar por esta opción. Por otro lado, para realizar el zoom y los desplazamientos, OpenGL es ideal, ya que éstos se podrán realizar sin parpadeos y de forma suave al poder implementarlos mediante un movimiento de cámara. En fin, que no me decido. A ver si podeis darme vuestro consejo: ¿qué pensais sería mejor para esta aplicación, OpenGL o el simple TCanvas?
Antes de despedirme me gustaria realizaros otra pregunta: ¿sabeis donde puedo encontrar un buen manual de openGL para Delphi, en el que vengan detalladas las funciones y tal...? Gracias de antemano a todos. Un saludo.
__________________
craven |
#2
|
|||
|
|||
Hola Craven
Me descargue un articulo en pdf acerca de OpenGL, en el hay ejemplos con programas echos en delphi, talvez te pueda servir, y sino, por lo menos podrás leerlo es bien interesante. La pagina es: www.grupoalbor.com/Articulos/OpenGL/OpenGL.pdf Suerte.... |
#3
|
||||
|
||||
Código:
function CreateRenderingContext(DC: HDC; Options: TRCOptions; ColorDepth: Integer; StencilBits: Byte): HGLRC; // Set the OpenGL properties required to draw to the given canvas and // create a rendering context for it. var PFDescriptor : TPixelFormatDescriptor; PixelFormat : Integer; begin FillChar(PFDescriptor,SizeOf(PFDescriptor),0); with PFDescriptor do begin nSize:=sizeof(PFDescriptor); nVersion:=1; dwFlags:=PFD_SUPPORT_OPENGL; if GetObjectType(DC) in [OBJ_MEMDC,OBJ_METADC,OBJ_ENHMETADC] then dwFlags:=dwFlags or PFD_DRAW_TO_BITMAP else dwFlags:=dwFlags or PFD_DRAW_TO_WINDOW; if opDoubleBuffered in Options then dwFlags:=dwFlags or PFD_DOUBLEBUFFER; if opGDI in Options then dwFlags:=dwFlags or PFD_SUPPORT_GDI; if opStereo in Options then dwFlags:=dwFlags or PFD_STEREO; iPixelType:=PFD_TYPE_RGBA; cColorBits:=ColorDepth; cDepthBits:=32; cStencilBits:=StencilBits; iLayerType:=Byte(PFD_MAIN_PLANE); end; InitOpenGL; // just in case it didn't happen already PixelFormat:=ChoosePixelFormat(DC,@PFDescriptor); SetPixelFormat(DC,PixelFormat,@PFDescriptor); // check the properties just set DescribePixelFormat(DC,PixelFormat,SizeOf(PFDescriptor),@PFDescriptor); with PFDescriptor do if (dwFlags and PFD_NEED_PALETTE) <> 0 then SetupPalette(DC,PFDescriptor); Result:=wglCreateContext(DC); // read implementation properties if FirstContext and (Result > 0) then begin wglMakeCurrent(DC,Result); ReadImplementationProperties; FirstContext:=False; wglMakeCurrent(0,0); end; end; Un Saludo. Última edición por marcoszorrilla fecha: 13-07-2003 a las 19:26:23. |
#4
|
|||
|
|||
Cita:
|
#5
|
||||
|
||||
Si accedes al hilo referenciado te muestra un mensaje indicándote que la falta del archivo quizá se deba a la restructuración del sitio y te recomienda que lo busques desde su página principal. Así lo acabo de hacer, y aunque no veo que tengan una opción de búsqueda, entré a la sección de Delphi, y luego a Artículos, y ahí en la lista se ve el artículo citado.
// Saludos |
#6
|
|||
|
|||
Cita:
Última edición por kakarotv5 fecha: 20-02-2007 a las 15:08:59. |
#7
|
|||
|
|||
Cita:
EDITO: Ya he conseguido la unit OpenGL.pas que necesitaba, la he conseguido aquí, bajaros el archivo comprimido y luego la unit OpenGL.pas se encuentra en el archivo comprimido OpenGL1.zip (también se encuentra en algunos otros). De todos modos me ha dado un par de errores que he subsanado, os los pongo aquí a ver que os parecen: La unidad OpenGL.pas tiene definidas dos constantes así: Código:
const FirstContext : Boolean = True; LastPixelFormat : Integer = 0; Código:
... FirstContext:=False; ... FirstContext:=True; ... LastPixelFormat:=PixelFormat; ... LastPixelFormat:=0; ... Última edición por kakarotv5 fecha: 20-02-2007 a las 17:38:29. |
#8
|
||||
|
||||
Aquí esta.
Lo siento no puedo cargarla porque el fichero excede el tamaño permitido. Bueno aquí tienes un enlace que funciona para descargarla. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
Última edición por marcoszorrilla fecha: 20-02-2007 a las 15:40:42. |
#9
|
||||
|
||||
Cita:
|
#10
|
|||
|
|||
Cita:
EDITO: Me he informado un poco a cerca de las directivas de compilador. Primero: ¿Qué es el IDE? IDE significa Integrated Developement Environment, es decir, Entorno Integrado de Desarrollo. Es la forma en que se nos ofrece el lenguaje Object Pascal (lenguaje que usa Delphi por ejemplo). Delphi ofrece un determinado IDE, Lazarus ofrece otro IDE similar a Delphi pero ambos usan Object Pascal como lenguaje de programación. Segundo: ¿Qué es una directiva de compilación? También se las llama normativas de compilación, normativas de compilador o directivas de compilador. Una directiva de compilación es un comando para el compilador, no para el IDE. Este comando es usado por el compilador para saber de que modo hacer las cosas. Tercero: Ejemplos de directivas de compilación. Por ejemplo cuando el compilador se encuentra con la directiva de compilador {$R *.RES}, el compilador hace que el archivo de recursos (el de extensión *.res) tenga el mismo nombre que el archivo del proyecto, de modo que si cambiamos de nombre al proyecto no tengamos que cambiar a mano también el archivo de recursos sino que es el propio compilador el encargado de hacer esta tarea. Por ejemplo si hacemos una aplicación de consola habrá que usar una determinada directiva de compilación para que el compilador "sepa" que estamos haciendo un programa de consola y no un programa para windows, habrá que usar la directiva de compilación {$APPTYPE CONSOLE} al principio del programa. Muy importante a la vez que curioso es este caso, ¿podemos variar en tiempo de compilación el valor de una cosntante? la respuesta sería no, bueno esto es lo que hemos estudiado por lo menos, el caso es que si la constante es una constante tipada, si que se puede hacer si usamos la directiva {$J+}. Cuarto: ¿Dónde se usa una directiva de compilación? Una directiva de compilación se usa en aquella unidad o programa que lo requiera. Es bueno ser ordenados y ponerla después del uses o antes de ninguna declaración de tipos, constantes o variables. Última edición por kakarotv5 fecha: 20-02-2007 a las 23:51:52. |
#11
|
||||
|
||||
Simplemente escribe {$J+} al principio de la unit
|
#12
|
|||
|
|||
Cita:
|
#13
|
||||
|
||||
Usa GDI+ con imagenes vectoriales de formato *.emf o *.wmf (no recomendable). Para crearlos usa el Adobe Ilustaritor o el Corel Draw.
|
#14
|
|||
|
|||
Cita:
|
|
|
|