Hi,
ich hab mir eine eigene TViewport-Klasse von TWinControl abgeleitet und davon mehrere auf mein Formular geklatscht.
Alle Viewports sollen dabei dasselbe rendern, u.a. einige Displaylisten.
Leider werden die DisplayListen nur auf dem Viewport angezeigt, bei dem ich als letztes die Größe definiert hab, obwohl sich die einzelnen Viewports in nichts unterscheiden...
Wenn ich direkt in der Render-Prozedur mit glVertex zeichne wirds auf allen angezeigt, nur Displaylisten werden nur einmal angezeigt....
Das ganze sieht folgendermaßen aus:
Code:
procedure TForm1.FormCreate(Sender:TObject);
begin
...
VP1:= TViewPort.Create(self,self,vsPerspective);
VP2 := TViewPort.Create(self,self,vsFront);
VP3 := TViewPort.Create(self,self,vsRight);
VP4 := TViewPort.Create(self,self,vsTop);
SetViewPortSize;
...
end;
procedure TForm1.SetViewPortSize;
begin
VP1.Left:=0;
VP1.Top:=0;
VP1.Width:=(ClientWidth div2)-2;
VP1.Height:=(ClientHeight div2)-2;
VP2.Left:=(ClientWidth div2)+2;
VP2.Top:=0;
VP2.Width:=(ClientWidth div2)-2;
VP2.Height:=(ClientHeight div2)-2;
VP3.Left:=0;
VP3.Top:=(ClientHeight div2)+2;
VP3.Width:=(ClientWidth div2)-2;
VP3.Height:=(ClientHeight div2)-2;
VP4.Left:=(ClientWidth div2)+2;
VP4.Top:=(ClientHeight div2)+2;
VP4.Width:=(ClientWidth div2)-2;
VP4.Height:=(ClientHeight div2)-2;
end;
In diesem Fall werden die Displaylisten nur auf dem VP4 angezeigt...
In der OnResize-Prozedur des TViewPort steht folgendes:
Kann man ein gluQuadric an eine beliebige Position setzen? Das wird ja immer bei (0,0,0) erzeugt...
Klar, mit Hilfe der ModelView-Matrix - wie mit jedem Objekt. Einfach die Matrix sichern (glPushMatrix), glTranslate aufrufen, Quadric zeichen und Matrix wieder zurück holen (glPopMatrix). Push und Pop natürlich nur, wenn du die Matrix danach wieder im Originalzustand brauchst.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ich schätze mal (letzter Sourceteil) dass jeder Viewport nen eigenen Renderkontext hat. Wenn dem so ist, musst du die Namensräume für Displaylisten (und Texturen/Shader) mit wglShareLists zwischen den Kontexten teilen.
Man kann bei mehreren Viewports auch nur einen Render Context erstellen und vor dem Zeichnen dann mit wglMakeCurrent immer nur das DC Handle ändern. Das ist in bestimmten Fällen einfacher, weil man sich dann keine Gedanken über die verschiedenen Zustände wie aktuelle Texture,blending usw. bei mehreren Context machen muß.
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.