Ver Mensaje Individual
  #3  
Antiguo 20-02-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Reputación: 20
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