FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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... |
#2
|
||||
|
||||
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. |
#3
|
|||
|
|||
Cita:
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. 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. |
#4
|
|||
|
|||
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; ... 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. |
#5
|
|||
|
|||
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. |
|
|
|