PDA

Ver la Versión Completa : Opengl???


craven
24-06-2003, 17:01:54
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.

Majo
13-07-2003, 00:27:10
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....

marcoszorrilla
13-07-2003, 20:24:20
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;



Si quieres bajarte la Unit completa la tienes en la DelphiSuperpage.

Un Saludo.

kakarotv5
20-02-2007, 02:42:15
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 (http://www.grupoalbor.com/Articulos/OpenGL/OpenGL.pdf)

Suerte....

El articulo en pdf acerca de OpenGL que te descargaste ya no se encuentra en el link que has dado, ¿sabes donde lo podemos encontrar?. Gracias y un saludo.

roman
20-02-2007, 03:45:14
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

kakarotv5
20-02-2007, 03:58:09
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

Ya lo vi, para los que lo quieran éste (http://www.grupoalbor.com/descarga/articulos/opengl/opengl.pdf) es el tutorial y éstos (http://www.grupoalbor.com/descarga/articulos/opengl/opengl_p.zip) son ejemplos que acompañan al artículo anterior, muchas gracias roman.

kakarotv5
20-02-2007, 16:00:00
Si quieres bajarte la Unit completa la tienes en la DelphiSuperpage.

Un Saludo.

Hola, he buscado en Delphi Superpage (http://delphi.icm.edu.pl/) y no he encontrado la tan ansiada unit OpenGL.pas, también he buscado por otros sitios y me he encontrado con otras units pero que no se ajustan al programa que tengo (es un programa de un tutorial de Carlos García Trujillo que quiero hacer funcionar para aprender), voy a seguir con mi búsqueda de todas formas te agradecería mucho que me dijeras donde puedo encontrarla. Muchas gracias y un saludo.

EDITO: Ya he conseguido la unit OpenGL.pas que necesitaba, la he conseguido aquí (http://www.grupoalbor.com/descarga/articulos/opengl/opengl_p.zip), 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í:

const FirstContext : Boolean = True;
LastPixelFormat : Integer = 0;

El caso es que luego en el código de la unidad se hacen asignaciones a esas constantes por ejemplo:

...
FirstContext:=False;
...
FirstContext:=True;
...
LastPixelFormat:=PixelFormat;
...
LastPixelFormat:=0;
...

Y claro al intentar compilar me da el error de "Left side cannot be assigned to", esto está claro pues FirstContext y LastPixelFormat son constantes y no se puede hacer eso con ellas en tiempo de compilación, así que he comentado el código donde hay asignaciones, he compilado y los programas me funcionan. ¿A alguno más le ha pasado esto?. Gracias y un saludo.

marcoszorrilla
20-02-2007, 16:36:34
Aquí esta.

Lo siento no puedo cargarla porque el fichero excede el tamaño permitido.


Bueno aquí tienes un enlace (http://arrowsoft.ifrance.com/opengl.html)que funciona para descargarla.

Un Saludo.

seoane
20-02-2007, 16:44:13
Y claro al intentar compilar me da el error de "Left side cannot be assigned to"


Prueba con la directiva {$J+}

kakarotv5
20-02-2007, 17:22:33
Prueba con la directiva {$J+}

Perdona mi ignorancia pero ¿cómo activo esa directiva?. Muchas gracias.

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.

seoane
20-02-2007, 19:13:26
Simplemente escribe {$J+} al principio de la unit

kakarotv5
21-02-2007, 13:52:27
Simplemente escribe {$J+} al principio de la unit

Muchas gracias.

MAXIUM
21-02-2007, 15:57:03
Usa GDI+ con imagenes vectoriales de formato *.emf o *.wmf (no recomendable). Para crearlos usa el Adobe Ilustaritor o el Corel Draw.

kakarotv5
21-02-2007, 18:25:29
Usa GDI+ con imagenes vectoriales de formato *.emf o *.wmf (no recomendable). Para crearlos usa el Adobe Ilustaritor o el Corel Draw.

Me estoy iniciando en esto de los gráficos, lo que me acabas de decir me suena a chino. He tomado la iniciativa de seguir el tutorial de Carlos García Trujillo para empezar a hacer algo con gráficos, va a ser un camino duro (más teniendo en cuenta que aun me queda un año para acabar la ingniería técnica). Un saludo.