AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

3D Kugel mit OpenGL

Ein Thema von Loni · begonnen am 27. Jun 2007 · letzter Beitrag vom 27. Jun 2007
Antwort Antwort
Loni

Registriert seit: 31. Mär 2007
77 Beiträge
 
#1

3D Kugel mit OpenGL

  Alt 27. Jun 2007, 17:00
Beim compilieren meines Quellcodes bekomme ich immer eine Fehlermeldung ich verstehe aber nicht was falsch iich ast.
Den Code fuer die 3DKugel habe ich aus dem Internet und so wirklich kommentiert war dieser nicht.

Fehlermeldung:
Delphi-Quellcode:
[DCC Fehler] KyteUnit.pas(58): E2005 'TVector3f' ist kein gültiger Typenbezeichner
[DCC Fehler] KyteUnit.pas(58): E2005 'TVector3f' ist kein gültiger Typenbezeichner
[DCC Fehler] KyteUnit.pas(65): E2005 'TVector3f' ist kein gültiger Typenbezeichner
[DCC Fehler] KyteUnit.pas(65): E2005 'TVector3f' ist kein gültiger Typenbezeichner
[DCC Fehler] KyteUnit.pas(72): E2005 'TVector2f' ist kein gültiger Typenbezeichner
[DCC Fehler] KyteUnit.pas(78): E2005 'TVector3f' ist kein gültiger Typenbezeichner
[DCC Fehler] KyteUnit.pas(85): E2005 'TVector4i' ist kein gültiger Typenbezeichner
[DCC Fehler] KyteUnit.pas(95): E2005 'TVector3f' ist kein gültiger Typenbezeichner
[DCC Fehler] KyteUnit.pas(95): E2005 'TVector2f' ist kein gültiger Typenbezeichner
[DCC Fehler] KyteUnit.pas(96): E2007 Konstante oder Typenbezeichner erwartet
[DCC Fehler] KyteUnit.pas(97): E2007 Konstante oder Typenbezeichner erwartet
[DCC Fehler] KyteUnit.pas(98): E2007 Konstante oder Typenbezeichner erwartet
[DCC Fehler] KyteUnit.pas(104): E2007 Konstante oder Typenbezeichner erwartet
[DCC Fehler] KyteUnit.pas(105): E2007 Konstante oder Typenbezeichner erwartet
[DCC Fehler] KyteUnit.pas(317): E2008 Inkompatible Typen
[DCC Fehler] Kyte.dpr(5): F2063 Verwendete Unit 'KyteUnit.pas' kann nicht compiliert werden

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, StdCtrls, AppEvnts, ExtCtrls, OpenGL;

type
  TFKyte = class(TForm)
    MainMenu1: TMainMenu;
    StatusBar: TStatusBar;
    Datei1: TMenuItem;
    Bearbeiten1: TMenuItem;
    procedure FormResize(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure IdleHandler(Sender: TObject; var Done: Boolean);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    StartTime, TimeCount, FrameCount : Cardinal; //FrameCounter
    Frames, DrawTime : Cardinal; //& Timebased Movement
     myDC : HDC;
     myRC : HGLRC;
     myPalette : HPALETTE;
     procedure SetupPixelFormat;
     procedure ErrorHandler;
  public
    { Public-Deklarationen }
  end;

var
  FKyte: TFKyte;
  scale : single = 1; //Für die Skalierung
  rotation : integer = 0; //Zahl in °, um die gedreht wird
  XMove, YMove, ZMove: Single; //Größe der Bewegung
  Verschieben, Drehen, Tiefe : Boolean;
  XAnfangVerschiebung, YAnfangVerschiebung, ZAnfangVerschiebung,
  Klick : Integer;
  TVector2f : Array [0..1] of Single;
  TVector3f : Array [0..2] of Single;
  TVector4i : Array [0..3] of Integer;

implementation

{$R *.dfm}


Function VectorAdd(const vector: TVector3f; Value: Single): TVector3f;
Begin
  Result[0] := vector[0] + Value;
  Result[1] := vector[1] + Value;
  Result[2] := vector[2] + Value;
End;

Function VectorMult(const vector: TVector3f; Value: Single): TVector3f;
Begin
  Result[0] := vector[0] * Value;
  Result[1] := vector[1] * Value;
  Result[2] := vector[2] * Value;
End;

Function ToVector2f(x, y: Single): TVector2f;
Begin
  Result[0] := x;
  Result[1] := y;
End;

Function ToVector3f(x, y, z: Single): TVector3f;
Begin
  Result[0] := x;
  Result[1] := y;
  Result[2] := z;
End;

Function ToVector4i(x, y, z, w: Integer): TVector4i;
Begin
  Result[0] := x;
  Result[1] := y;
  Result[2] := z;
  Result[3] := w;
End;

Procedure DrawSphereObject(radius: Single; n: word;
                           typ: byte; inverted: boolean;
                           voffset: TVector3f; toffset, tscale: TVector2f);
Var alpha : TVector2f; // i*beta around x axis
    SinAlpha: TVector2f; // sin(alpha)
    CosAlpha: TVector2f; // cos(alpha)
    beta : Single; // DegToRad(360° / n)
    delta : Single; // j*beta around z axis
    SinDelta: Single; // sin(delta)
    CosDelta: Single; // cos(delta)
    h, q : word; // half, quarter
    v : TVector3f; // vector for normal and vertex
    border : TVector4i; // for-loop borders
    i, j : Integer;
    k : Byte;
Begin
  radius := abs(radius);

  If (n < 4) Or (Odd(n)) Or (radius = 0) Then Exit;

  h := n div 2;
  q := n div 4;
  If (Odd(h)) Then inc(q);

  Case typ of
    0: border := ToVector4i( -h, h-1, -q, q); // sphere
    1: border := ToVector4i( -h, h-1, -q, 0); // hemisphere x-
    2: border := ToVector4i( -h, h-1, 0, q); // hemisphere x+
    3: border := ToVector4i(-h-q, -h+q-1, -q, q); // hemisphere y-
    4: border := ToVector4i( -q, q-1, -q, q); // hemisphere y+
    5: border := ToVector4i( -h, -1, -q, q); // hemisphere z-
    6: border := ToVector4i( 0, h-1, -q, q); // hemisphere z+
    else Exit;
  End;

  beta := 2*PI / n;

    For i:=border[0] to border[1] do Begin
      alpha := ToVector2f(i*beta, (i+1)*beta);

      SinAlpha := ToVector2f(sin(alpha[0]), sin(alpha[1]));
      CosAlpha := ToVector2f(cos(alpha[0]), cos(alpha[1]));

      glBegin(GL_TRIANGLE_STRIP);
      For j:=border[2] to border[3] do Begin
        delta := j*beta;

        SinDelta := sin(delta);
        CosDelta := cos(delta);

        If (inverted) Then
          For k:=1 downto 0 do Begin
            v := ToVector3f(-SinDelta, -CosAlpha[k]*CosDelta, -SinAlpha[k]*CosDelta);
            glNormal3fv(@v);
            v := VectorAdd(VectorMult(v, -radius), voffset);
            glTexCoord2f((j/n + 0.25)*tscale[0] + toffset[0], ((i+k)/n)*tscale[1] + toffset[1]);
            glvertex3fv(@v);
          End;
 
        If (not inverted) Then
          For k:=0 to 1 do Begin
            v := ToVector3f(SinDelta, CosAlpha[k]*CosDelta, SinAlpha[k]*CosDelta);
            glNormal3fv(@v);
            v := VectorAdd(VectorMult(v, radius), voffset);
            glTexCoord2f((j/n + 0.25)*tscale[0] + toffset[0], ((i+k)/n)*tscale[1] + toffset[1]);
            glvertex3fv(@v);
          End
      End;
      glEnd;
   End;
End;
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: 3D Kugel mit OpenGL

  Alt 27. Jun 2007, 17:04
Zitat:
Delphi-Quellcode:
TVector2f : Array [0..1] of Single;
  TVector3f : Array [0..2] of Single;
  TVector4i : Array [0..3] of Integer;
Du deklarierst deine "Typen" unter var. Du musst sie unter type deklarieren und mit einem = statt einem :.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Loni

Registriert seit: 31. Mär 2007
77 Beiträge
 
#3

Re: 3D Kugel mit OpenGL

  Alt 27. Jun 2007, 17:10
geht auch nicht
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#4

Re: 3D Kugel mit OpenGL

  Alt 27. Jun 2007, 18:11
hastes auch so gemacht?

Delphi-Quellcode:
type
  TVector2f = Array [0..1] of Single;
  TVector3f = Array [0..2] of Single;
  TVector4i = Array [0..3] of Integer;
das muss dann funktionieren!
  Mit Zitat antworten Zitat
Loni

Registriert seit: 31. Mär 2007
77 Beiträge
 
#5

Re: 3D Kugel mit OpenGL

  Alt 27. Jun 2007, 18:36
ok tut es aber jetzt kommt
[DCC Fehler] KyteUnit.pas(146): E2010 Inkompatible Typen: 'Single' und 'TVector3f' bei diesem abschnitt
v := VectorAdd(VectorMult(v, -radius), voffset); XD ich steige sowieso nicht hinter diesen code und dann noch diese fehler ^^
  Mit Zitat antworten Zitat
Loni

Registriert seit: 31. Mär 2007
77 Beiträge
 
#6

Re: 3D Kugel mit OpenGL

  Alt 27. Jun 2007, 19:18
hat keiner ne ahnung ?
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: 3D Kugel mit OpenGL

  Alt 27. Jun 2007, 19:18
Ich finde nicht was v für eine Vatiable ist. Schaut das so aus ?
Delphi-Quellcode:
var
  v: TVector3f;
Zitat von Loni:
XD ich steige sowieso nicht hinter diesen Code und dann noch diese fehler ^^
Dann mach es dir einfacher und nutze die vordef. Formen aus der GLU.PAS. (findet sich im Internet oder vill. schon auf deiner Festplatte).

In der Uses-Klausel:
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, ... Forms, OpenGL, GLU;
im Private Abschnitt:
Delphi-Quellcode:
  private
     myDC : HDC;
     myRC : HGLRC;
     myPalette : HPALETTE;
     //...
     MurmelObject: PGLUquadric;
     //...
     procedure SetupPixelFormat;
     procedure ErrorHandler;
  public
    { Public-Deklarationen }
  end;
Irgendwo im Init oder Create-Bereich:
Delphi-Quellcode:
procedure ...
begin
  //...

  // GLU-Objects
  MurmelObject := gluNewQuadric;
  gluQuadricNormals(MurmelObject, GL_SMOOTH); {schöhn run darstellen lassen}
  gluQuadricTexture(MurmelObject, GL_TRUE); {Texturkoordin. erzeugen}
  //...
Irgendwo in deiner Zeichenroutiene wo die Scene gezeichnet wird:
Delphi-Quellcode:
procedure ...
begin
  // ...
  gluSphere(MurmelObject, 5, 12, 12); {Radius 5, 12 Querschnitte, 12 Längsschn.}
  //...

Und nun noch das Aufräumen nicht vergessen.
Irgendwo im Destroy oder Close:
Delphi-Quellcode:
procedure...
begin
  //...

   // Freigeben des belegten Speichert des GLU-Objects
   gluDeleteQuadric(MurmelObject);

  //...

Done.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz