Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2003
Majo Majo is offline
Miembro
 
Registrado: jun 2003
Posts: 43
Poder: 0
Majo Va por buen camino
Cool CreateRenderingContext

Hola amigos,

quisiera saber si "CreateRenderingContext" es una funcion del API de windows o de OpenGL, y lo mas importante... para que sirve?. Esta funcion la encontré en un código fuente que me descargue... y el programa no corre ya que no conoce esa función..

Gracias...
Responder Con Cita
  #2  
Antiguo 14-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Efectivamente es una función de OpelGL, te recomiendo buscar en la Web que seguramente encontrarás documentación de la misma.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 20-02-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Poder: 18
kakarotv5 Va por buen camino
Cita:
Empezado por Majo
Hola amigos,

quisiera saber si "CreateRenderingContext" es una funcion del API de windows o de OpenGL, y lo mas importante... para que sirve?. Esta funcion la encontré en un código fuente que me descargue... y el programa no corre ya que no conoce esa función..

Gracias...
Tengo exáctamente tu mismo problema, ¿lo solucionaste?. Voy a poner aquí el código que me falla (supuestamente no debería fallar).

Código:
unit Unit1;

interface

uses
 Windows, Forms, OpenGL, Classes, ExtCtrls, Messages, Controls, StdCtrls,
 Graphics, SysUtils, Dialogs;
type
 TForm1 = class(TForm)
           Timer1: TTimer;
           procedure FormCreate(Sender: TObject);
           procedure FormDestroy(Sender: TObject);
           procedure FormPaint(Sender: TObject);
           procedure FormResize(Sender: TObject);
           procedure Timer1Timer(Sender: TObject);
          private
           { Private declarations }
           procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
          public
           { Public declarations }
         end;
var
 Form1: TForm1;
 RC: HGLRC;
 Angulo: GLInt;
implementation
 {$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
 RC := CreateRenderingContext(canvas.Handle,[opDoubleBuffered],32,0); //Primero Creamos un contexto...
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 DestroyRenderingContext(RC); //Se libera el Contexto...
end;

procedure TForm1.FormPaint(Sender: TObject);
Var X,Y,Z:GLInt;
begin
 ActivateRenderingContext(canvas.Handle,RC); // Se asocia el contexto con el manejador del Canvas...
 glClearColor(0,0.2,0,0); // Ponemos un color Verde Oscuro de Fondo...
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // Algo así como borrar la Pizarra...
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity;
 gluLookAt(0,0,3,0,0,0,0,1,0); // Posición y punto de vista de la cámara...
 glRotatef(30,1,0,0); //Primero hacemos una rotación de 30 grados respecto a X para obtener perspectiva...
 glRotatef(Angulo,0,1,0); //Se Rota la figura en el eje Y a partir de la variable Angulo...
 GLPointSize(2.0); //Asignamos un tamaño de 2 pixeles para cada punto...
 //Ahora con tres ciclos anidados dibujamos un cubo con puntos de colores variados...
 GLBegin(GL_POINTS);
 For x := -5 to 5 do
  for y := -5 to 5 do
   for z := -5 to 5 do
    begin
     GLColor3f(X,Y,Z);
     GLVertex3f(X/10,Y/10,Z/10);
    end;
 GLEnd;
 SwapBuffers(canvas.Handle); //Copiar el Back Buffer en el canvas del formulario...
 DeactivateRenderingContext; //Libera el contexto...
end;

procedure TForm1.FormResize(Sender: TObject);
begin // Cuando se cambia de tamaño hay que actualizar el puerto de visión...
 wglMakeCurrent(canvas.handle,RC); // Otra manera de hacer el contexto dibujable cuando este ya está creado...
 glViewport(0,0,Width,Height); // Especificar un puerto de visión....
 glMatrixMode(GL_PROJECTION); // Activar matriz de proyección...
 glLoadIdentity; // Poner estado inicial en esta matriz...
 gluPerspective(35,Width/Height,1,100); // Especificar Perspectiva ...
 wglMakeCurrent(0,0); // Otra manera de liberar el contexto...
 Refresh; // Redibujar la escena ...
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Inc(Angulo,4); //Rotamos el angulo de observación de la escena...
 Angulo := Angulo mod 360;
 Refresh; //y la volvemos a dibujar ...
end;

procedure TForm1.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin //Para borrar el fondo, y evitar el parpadeo ...
 Message.Result:=1;
end;
end.
Un saludo.

EDITADO: He estado trasteando un poco y el error es debido a que la unidad OpenGL.pas que usamos (la que viene con el propio Delphi) es antigua, hay que descargarse una versión que se adapte al programa.

Me he bajado esta versión http://www.inf.tu-dresden.de/content...L/OpenGL12.zip

En esta versión si que se encuentra la función CreateRenderingContext pero recibe más parámetros que los que el programa hace uso, seguiré investigando y ya os contaré, si alguien sabe que versión de OpenGL.pas es la adecuada que por favor nos lo diga pues estamos aprendiendo y sería una pena pararse aquí, un saludo.

Última edición por kakarotv5 fecha: 20-02-2007 a las 17:34:57.
Responder Con Cita
  #4  
Antiguo 20-02-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Poder: 18
kakarotv5 Va por buen camino
Cita:
Empezado por delphi.com.ar
Efectivamente es una función de OpelGL, te recomiendo buscar en la Web que seguramente encontrarás documentación de la misma.

Saludos!
¿Cuándo dices Web te refieres a http://www.clubdelphi.com o te refieres a que tiremos de Google. Gracias y un saludo.

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;
El caso es que luego en el código de la unidad se hacen asignaciones a esas constantes por ejemplo:
Código:
...
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.

EDITO: He arreglado la chapucilla esa de comentar lo que no funcionaba, lo he conseguido usado la directiva de compilación {$J+} para poder cambiar en tiempo de compilación el valor de las constantes tipadas, he de agradecer esto al forero seoane que me ha ayudado con esto. Saludos.

Última edición por kakarotv5 fecha: 21-02-2007 a las 00:02:34.
Responder Con Cita
  #5  
Antiguo 04-03-2010
hernanpr hernanpr is offline
Registrado
 
Registrado: feb 2008
Posts: 1
Poder: 0
hernanpr Va por buen camino
Smile Sobre el Ejemplo Sacado del Manual Delphi y OpenGL

Yo me descargue el manual, intente probar el codigo, pero no funciono, debido a que la funcion no estaba declarada en OpenGL que viene con delphi.

Pues bien se me ocurrio buscar por aqui y por alla primero dentro del componente GLScene y luego la web, me di con este tema similar a lo mio.

Finalmente se me ocurrio que debia ser la version del OpenGL (OpenGL12, OpenGLX) y Eureka !!!

El problema se arregla cambiando en units OpenGL por OpenGL2 y no hay que cambiar nada del codigo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:05:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi