AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-)!

Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-)!

Ein Thema von Choice · begonnen am 16. Feb 2009 · letzter Beitrag vom 17. Feb 2009
Antwort Antwort
Choice
(Gast)

n/a Beiträge
 
#1

Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-)!

  Alt 16. Feb 2009, 15:47
Hi Leute !
Also ich probiere grad noch ein wenig rum mit OpenGL, ein richtiges "Projekt"
traue ich mir noch nich zu, aber man is ja am lernen, am fummeln
und ich möchte erstmal gerne die "Grundgeheimnisse" verstehen!^^

Ich hab das Tutorial auf der DGL Seite zum Thema Selection durchgelesen und es anstatt auf 3 Figuren nur auf eine
angewand... nur ja .. hmmm funzt nich (also läuft alles aber egal ob man das Objekt nun anklickt oder irgendwas anderes zeigt er immer an -->"sie haben auf nichts geklickt" ^^... meine Vorstellung wäre sie haben auf Figur geklickt oda so )

Und ich verstehe einfach nich wieso.. ich hoffe ihr könnt helfen
hier ma der ganze Code (ka ob man das so macht aber ^^
ich hoffe ihr verzeiht mir das ich hier einfach mal alles hinklatsche!^^ (bin ja n Anfänger und so )

mfg Choice

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dglOpenGL, glBitmap, ComCtrls;

type
TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure IdleHandler(Sender: TObject; var Done: Boolean);
    procedure FormResize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Render;
  private   { Private-Deklarationen }
    StartTime, TimeCount, FrameCount : Cardinal; //FrameCounter
    Frames, DrawTime                 : Cardinal; //& Timebased Movement
    fTexture: TglBitmap2D; // Instanz unserer Textur
    procedure SetupGL;
    procedure ErrorHandler;
  public   { Public-Deklarationen }
    DC                               : HDC; //Handle auf Zeichenfläche
    RC                               : HGLRC;//Rendering Context
  end;

var
  Form1: TForm1;
  xs, ys: Integer;

const
  NearClipping = 1;
  FarClipping = 1000;
  Figur = 0;
  namen: array[-1..0] of string = ('nichts','Figur');

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  DC:= GetDC(Handle);
  if not InitOpenGL then Application.Terminate;
  RC:= CreateRenderingContext( DC,
                               [opDoubleBuffered],
                               32,
                               24,
                               0,0,0,
                               0);
  ActivateRenderingContext(DC, RC);
  {fTexture := TglBitmap2D.Create; // Instanz der Klasse erstellen
  fTexture.LoadFromFile('thelfer04.bmp'); // Datei laden
  fTexture.GenTexture; // geladene Textur an OpenGL übergeben }
  SetupGL;
end;

procedure TForm1.SetupGL;
begin
  glClearColor(0, 0, 0, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau
  glEnable(GL_DEPTH_TEST);         //Tiefentest aktivieren
  glEnable(GL_CULL_FACE);          //Backface Culling aktivieren
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeactivateRenderingContext;
  DestroyRenderingContext(RC);
  ReleaseDC(Handle, DC);
  fTexture.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
var tmpBool : Boolean;
begin
  glViewport(0, 0, ClientWidth, ClientHeight);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);  
 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  IdleHandler(Sender, tmpBool);
end;

function Selection : integer;
var
  Puffer      : array[0..256] of GLUInt;
  Viewport    : TGLVectori4;
  Treffer,i   : Integer;
  Z_Wert      : GLUInt;
  Getroffen   : GLUInt;
begin
  glGetIntegerv(GL_VIEWPORT, @viewport);     //Die Sicht speichern
  glSelectBuffer(256, @Puffer);              //Den Puffer zuordnen

  glMatrixMode(GL_PROJECTION);               //In den Projektionsmodus
  glRenderMode(GL_SELECT);                   //In den Selectionsmodus schalten
  glPushMatrix;                              //Um unsere Matrix zu sichern
  glLoadIdentity;                            //Und dieselbige wieder zurückzusetzen

  gluPickMatrix(xs, viewport[3]-ys, 1.0, 1.0, viewport);
  gluPerspective(60.0, Viewport[2]/Viewport[3], 1, 256);
  glMatrixMode(GL_PROJECTION);               //Wieder in den Projektionsmodus
  glPopMatrix;                               //und unsere alte Matrix wiederherzustellen

  treffer := glRenderMode(GL_RENDER);        //Anzahl der Treffer auslesen

  Getroffen := High(GLUInt);                 //Höchsten möglichen Wert annehmen
  Z_Wert := High(GLUInt);                    //Höchsten Z - Wert
  for i := 0 to Treffer-1 do
    if Puffer[(i*4)+1] < Z_Wert then
    begin
      getroffen      := Puffer[(i*4)+3];
      Z_Wert := Puffer[(i*4)+1];
    end;

  if getroffen=High(GLUInt)
    then Result := -1
    else Result := getroffen;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  xs := x;
  ys := y;

  statusbar1.SimpleText := 'Sie haben auf ' + namen[selection] + ' geklickt!' + 'Maus koords x:'+inttostr(xs)+ 'Maus koords y:'+inttostr(ys);
end;

procedure TForm1.Render;
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;

  glTranslatef(0, 0, -5);

glLoadName(Figur);
glBegin(GL_QUADS);
  glTexCoord2f(0,0); glVertex3f(-0.4,0.4,0); //lo
  glTexCoord2f(0,1); glVertex3f(-0.4,-0.4,0); //lu
  glTexCoord2f(1,1); glVertex3f(0.4,-0.4,0); //ru
  glTexCoord2f(1,0); glVertex3f(0.4,0.4,0);  //ro
glEnd;

  SwapBuffers(DC);
end;

procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
begin
  StartTime:= GetTickCount;
  Render;
  DrawTime:= GetTickCount - StartTime;
  Inc(TimeCount, DrawTime);
  Inc(FrameCount);
 
  if TimeCount >= 1000 then begin
    Frames:= FrameCount;
    TimeCount:= TimeCount - 1000;
    FrameCount:= 0;
    Caption:= InttoStr(Frames) + 'FPS';
    ErrorHandler;
  end;
 
  Done:= false;
end;

procedure TForm1.ErrorHandler;
begin
  Form1.Caption := gluErrorString(glGetError);
end;
end.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-

  Alt 16. Feb 2009, 16:16
90% weniger Smileys wären auch eine Wahlmöglichkeit gewesen.
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#3

Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-

  Alt 16. Feb 2009, 16:28
Außer das es imho besser wäre Fragen zu einem Tutorial auch im Forum der entsprechenden Seite zu stellen oder es hier zumindest zu verlinken.
Da du das Tutorial hier schon quasi hin kopiert hast, wieviel davon hast du bis jetzt verstanden und was hast du schon versucht um dein Problem zu lösen? Selection gibt ja offenbar wie du in deiner Ausgabe lesen kannst -1 zurück, d. h. entweder dein Objekt ist nicht auf dem Namestack registriert, oder es wird bei der Überprüfung nicht getroffen.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Choice
(Gast)

n/a Beiträge
 
#4

Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-

  Alt 17. Feb 2009, 15:29
Zitat von nuclearping:
90% weniger Smileys wären auch eine Wahlmöglichkeit gewesen.
Was produktives wäre eine Wahlmöglichkeit gewesen. ... hilf mir, oder lass es einfach...


Zitat von Cyf:
[...] wieviel davon hast du bis jetzt verstanden und was hast du schon versucht um dein Problem zu lösen?[...]
Ich habe alles verstanden, nur es funktioniert nicht.(Ich habe gehofft es findet einer zufällig einen Dreh oder einen Fehler den ich irgendwie übersehen habe, aber wenn hier mehr meine Art zu schreiben bemängelt wird als meine Fehler im Quelltext kann ich auch auf Beiträge verzichten) Is ja nich so das ich ein Delphi Einsteiger bin, ich taste mich nur grad na OpenGL an.. und natürlich habe ich schon versucht das Problemfeld einzugrenzen das sieht man ja wohl daran das ich mir zum Beispiel beim Klicken auch die Mauskoords anzeigen lasse, um zu sehen ob das funktioniert... Ich finde nur überhaupt keinen Fehler (alles erscheint plausibel das ist das Problem).
  Mit Zitat antworten Zitat
Frankfurtoder

Registriert seit: 27. Mär 2008
112 Beiträge
 
RAD-Studio 2010 Pro
 
#5

Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-

  Alt 17. Feb 2009, 15:37
Zitat von Choice:
ich hoffe ihr verzeiht mir das ich hier einfach mal alles hinklatsche!^^ (bin ja n Anfänger und so )
So wird dir wohl kaum einer helfen können. Bzw. es gar nicht versuchen. Ich unterstütze zudem #2. Das hier ist kein Spielkreis.
Statt Code tags ruhig Delphi tags benutzen.

grüße
Erik
Alles gut?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#6

Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-

  Alt 17. Feb 2009, 15:41
Zitat von Frankfurtoder:
So wird dir wohl kaum einer helfen können.
Das ist wohl leider auch nicht mehr nötig.
Ihr habt es soeben geschafft, ein komplett neues Mitglied mit Euren unkonstruktiven und unhöflichen Antworten hier dazu zu bewegen, seinen Account sofort wieder löschen zu lassen.

Man kann Neulinge auch um längen höflicher darauf hinweisen, dass übermäßiger Smiley-Gebrauch vom eigentlich Inhalt ablenkt und in normalen Fragestellungen idealerweise auf das nötigste Beschränkt werden sollte.

Vielen Dank
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-

  Alt 17. Feb 2009, 16:43
Tut mir leid, aber was können wir dafür, wenn er mit Kritik nicht umgehen kann und seine eigenen Fehler nicht sieht? Andere Leute hätten wahrscheinlich darüber gelacht, die Smileys rauseditiert und sich nochmal Mühe bzgl. ihres Problems gegeben. Aber er hat sich dazu entschieden, es persönlich zu nehmen und seinen Account zu kündigen.
Wenn er hier als Newb reinplatzt, seinen ganzen Code hier "hinklatscht" und dann nach dem Motto "nun helft mir mal" Hilfe erwartet, darf er sich nicht wundern, wenn er damit gegen die Wand fährt.

Imho wars einfach die Situation "Wie es in den Wald hineinruft, schallt es auch wieder heraus."

Wenn das Tutorial funktioniert und sein Konstrukt (immernoch) nicht, an wem liegts dann wohl? An uns bestimmt nicht.

Gestern jemand "Wer wird Millionär" geguckt? Da war auch so'ne Situation: Frage -> Publikumsjoker -> Er hat die Antwort geglaubt -> War falsche Antwort. Wessen Verantwortung war das nun? Die vom Joker, weil er die falsche Antwort gegeben hat oder die vom Spieler, weil er sich dazu entschieden hat, die Antwort zu glauben?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#8

Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-

  Alt 17. Feb 2009, 22:46
Zitat von nuclearping:
Wenn das Tutorial funktioniert und sein Konstrukt (immernoch) nicht, an wem liegts dann wohl? An uns bestimmt nicht.
Natürlich nicht. Aber wenn es nicht funktioniert und Choice deswegen hier um Hilfe fragt, dann hat er, sei er nun ein Neuer User oder nicht, das Recht, entsprechend Respektvoll behandelt zu werden.

Es steht hier niemanden zu, andere User derart grob auf Ihre Fehler hinzuweisen. Selbst wir Moderatoren tun das freundlich. So einen Satz bekommt von uns höchstens jemand vor die Nase geklatscht, der sich in dieser Hinsicht als anfänglich Beratungsresistent erweist und auf mehrfaches, höfliches Aufmerksam machen nicht reagiert. Dann muss man halt ab und zu etwas bestimmter reagieren.

Fürs nächste mal also bitte die angemessene Höflichkeit walten lassen.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:31 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