Avatar billede disken Nybegynder
11. maj 2002 - 17:30 Der er 30 kommentarer og
1 løsning

www.opengl-delphi.dk

Hej

Jeg er igang med at læse tutorialsne om opengl inde på www.opengl-delphi.dk men da jeg satte "TNewContext = record" sagde den "Expected ':' but '=' found." hvad har jeg gjort galt.
Avatar billede hermandsen Juniormester
11. maj 2002 - 17:43 #1
Det skal stå inde under type lige før din form er erklæret... Har du gjort det?
Avatar billede disken Nybegynder
11. maj 2002 - 17:45 #2
ja dettror jeg den ser sådan ud
type
  TForm1 = class(TForm)
  TNewContext = record
  dc: hdc;
  rc: hglrc;
Avatar billede disken Nybegynder
11. maj 2002 - 17:55 #3
Vil du ikke nok hjælpe mig
Avatar billede hermandsen Juniormester
11. maj 2002 - 17:55 #4
Nope...

type
  TNewContext = record
    dc: hdc;
    rc: hglrc;
  end;
  TForm1 = class(TForm)
Avatar billede disken Nybegynder
11. maj 2002 - 18:00 #5
Nu står der "undeclared indentifier 'glmatrixmode'", "undeclared indentifier 'gl_projection'" og "undeclared indentifier 'glfrustum'".
Avatar billede hermandsen Juniormester
11. maj 2002 - 18:02 #6
Du til skal tilføje OpenGL under uses:

uses
  Windows, Forms, ........, OpenGL;

//..... er selvfølgelig alle de andre units der er tilføjet! ;)
Avatar billede disken Nybegynder
11. maj 2002 - 18:05 #7
Det blir da bedre men når jeg prøver programet kommer en dialog box frem hvor der står "Acces violation at address 00000000. read of address 00000000"
Avatar billede hermandsen Juniormester
11. maj 2002 - 18:08 #8
Hvor kommer den acces violation? Hvornår?
Avatar billede disken Nybegynder
11. maj 2002 - 18:09 #9
når formen kommer frem i midten af skårmen
Avatar billede hermandsen Juniormester
11. maj 2002 - 18:11 #10
Altså OnCreate, eller OnShow, eller hvornår?

Har du fuldt alle tutorials? Du skal starte fra den første, og så så småt begynde på de næste...
Avatar billede disken Nybegynder
11. maj 2002 - 18:11 #11
nå der står også "File not found 'open.dcu'"
Avatar billede disken Nybegynder
11. maj 2002 - 18:12 #12
det er den første jeg er igang med.
Avatar billede hermandsen Juniormester
11. maj 2002 - 18:16 #13
Du har kun tilføjet "open"... Du skal skrive "opengl"!
Avatar billede disken Nybegynder
11. maj 2002 - 18:17 #14
først kommer det der vindue med "cpu" som titlen frem og så "debugger exception notification" og så acces violation.
Avatar billede disken Nybegynder
11. maj 2002 - 18:18 #15
min uses ser sådan ud:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, opengl;

vil du ikke have hele koden
Avatar billede hermandsen Juniormester
11. maj 2002 - 18:19 #16
Jojo... Smid hele lortet ind! :)
Avatar billede disken Nybegynder
11. maj 2002 - 18:19 #17
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, opengl;

type

  TNewContext = record
  dc: hdc;
  rc: hglrc;
  end;
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  NC : TNewContext;

implementation

{$R *.dfm}

function SetupOpenGL(dc : hdc; rc : hglrc; form : Tform; zNear, zFar : single) : TNewContext;
var
pfd: TPixelFormatDescriptor;
i : integer;
begin
fillchar(pfd,SizeOf(pfd),0);
with pfd do
begin
nsize := sizeof(pfd);
nversion := 1;
dwflags := pfd_support_opengl or pfd_draw_to_window or pfd_doublebuffer;
ipixeltype := pfd_type_rgba;
ccolorbits := 24;
cdepthbits := 32;
cstencilbits := 0;
ilayertype := pfd_main_plane;
end;
dc := getdc(form.handle);
i := choosepixelformat(dc,@pfd);
if i = 0 then
exit;
if not setpixelformat(dc,i,@pfd) then
exit;
rc := wglcreatecontext(dc);
if rc = 0 then
exit;
if not wglmakecurrent(dc,rc) then
exit;
glmatrixmode(gl_projection);
with form do
glfrustum(-1.0, +1.0, -(clientheight/clientwidth), clientheight/clientwidth, zNear, zFar);
result.dc := dc;
result.rc := rc;
end;

procedure ReleaseOpenGL(MyContext : TNewContext; MyForm : TForm);
begin
with MyContext do
begin
wglmakecurrent(dc,0);
wgldeletecontext(rc);
releasedc(MyForm.handle,dc);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with NC do
NC := SetupOpenGL(dc,rc,form1,2,30);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ReleaseOpenGL(NC,form1);

end;

procedure TForm1.FormPaint(Sender: TObject);
begin
SwapBuffers(NC.dc);
end;

end.
Avatar billede disken Nybegynder
11. maj 2002 - 18:34 #18
er du her stadig
Avatar billede hermandsen Juniormester
11. maj 2002 - 18:35 #19
Du får lige min unit... Jeg nåede lige længere! ;)


unit uTest;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OpenGL;

type
  TNewContext = record
    dc: hdc;
    rc: hglrc;
  end;
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  NC : TNewContext;
 
implementation

{$R *.DFM}

function SetupOpenGL(dc: hdc; rc: hglrc; Form: Tform; zNear, zFar: Single): TNewContext;
var
  pfd: TPixelFormatDescriptor;
  I : integer;
begin
  FillChar(pfd, SizeOf(pfd), 0);
  with pfd do
  begin
    nSize := sizeof(pfd);
    nVersion := 1;
    dwFlags := PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or PFD_DOUBLEBUFFER;
    iPixelType := PFD_TYPE_RGBA;
    cColorBits := 24;
    cDepthBits := 32;
    cStencilBits := 0;
    iLayerType := PFD_MAIN_PLANE;
  end;
  dc := GetDC(Form.Handle);
  I := ChoosePixelFormat(dc, @pfd);
  if I = 0 then Exit;
  if not SetPixelFormat(dc, I, @pfd) then Exit;
  rc := wglCreateContext(dc);
  if rc = 0 then Exit;
  if not wglMakeCurrent(dc, rc) then Exit;
  glMatrixMode(GL_PROJECTION);
  with Form do
    glFrustum(-1.0, +1.0, -(ClientHeight/ClientWidth), ClientHeight/ClientWidth, zNear, zFar);
  Result.dc := dc;
  Result.rc := rc;
end;

procedure ReleaseOpenGL(MyContext: TNewContext; MyForm: TForm);
begin
  with MyContext do
  begin
    wglMakeCurrent(dc, 0);
    wglDeleteContext(rc);
    ReleaseDC(MyForm.Handle, dc);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with NC do
    NC := SetupOpenGL(dc, rc, Form1, 2, 30);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ReleaseOpenGL(NC, Form1);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  glClearColor(0.0,0.0,0.0,0.0);
  glClear(gl_Color_Buffer_Bit);

  glPushMatrix;

  glTranslatef(-0.3,0.0,-10.0);
  glRotatef(45,+1.0,0.0,0.0);
  glRotatef(45,0.0,+1.0,0.0);
  glRotatef(45,0.0,0.0,+1.0);
  glScalef(+4.0,+2.0,0.0);

  glBegin(gl_Polygon);
  glVertex3f(-0.5,-0.5,0.0);
  glVertex3f(-0.5,+0.5,0.0);
  glVertex3f(+0.5,+0.5,0.0);
  glVertex3f(+0.5,-0.5,0.0);
  glEnd;

  glPopMatrix;

  SwapBuffers(NC.dc);
end;

end.
Avatar billede disken Nybegynder
11. maj 2002 - 18:37 #20
der sker det samme
Avatar billede disken Nybegynder
11. maj 2002 - 18:43 #21
er du der
Avatar billede disken Nybegynder
11. maj 2002 - 18:54 #22
Kan du ikke sende mig filerne på kasper.t@mail.dk
Avatar billede hermandsen Juniormester
11. maj 2002 - 19:16 #23
Sendt! :)

Beklager det tog så lang tid... Var lige ude og spise! ;)
Avatar billede disken Nybegynder
12. maj 2002 - 13:22 #24
Det virker stadig ikke, jeg tror jeg prøver at geninstaller Delphi
Avatar billede hermandsen Juniormester
12. maj 2002 - 13:32 #25
Hehe... Nok en god ide! :)

Hvilken Delphi-version har du?
Avatar billede disken Nybegynder
14. maj 2002 - 09:36 #26
Delphi 6
Avatar billede hermandsen Juniormester
14. maj 2002 - 10:16 #27
Jah, men standard, Prof eller Enterprise?
Avatar billede cpjg Nybegynder
14. maj 2002 - 10:32 #28
Du skal huske at læse ALLE tutorials'ene igennem...
De er lavet således, at man ikke kan forstå den sidste, hvis man ikke har læst og forstået den første del af den.

Start fra en ende af!
Avatar billede hermandsen Juniormester
14. maj 2002 - 10:34 #29
Jeg er nemlig ikke sikker på at OpenGL er med i standard udgaven, men jeg kan selvfølgelig tage fejl!

>>cpjg
Davs! Hvor langt er du efterhånden med dine tutorials? Har du fundet noget nyt og spændende? :)
Avatar billede disken Nybegynder
16. maj 2002 - 11:33 #30
Jeg fået det til at virke, jeg skulle bare geninsteller Delphi.

Hermandsen lav et svar så du kan få dine point.
Avatar billede hermandsen Juniormester
16. maj 2002 - 13:29 #31
Svar!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester