![]() |
OpenGL Probleme
Wie ich bereits im Thread "Mini Programmiersprache" geschrieben habe, versuche ich jetzt, die Welt des Roboters (Programm+Souce im Thread "Mini Programmiersprache" zum runterladen) dreidimensional zu machen.
Ein Wunder! Es funktioniert sogar. Aber ich hab noch ein paar Probleme. Das erste ist, dass Quadrate plötzlich total verformt werden. In der einen Perspektive ist es ein Quadrat, in der anderen plötlich eine total verzogene Raute. Ist irgendwie total unrealistisch. Kann ich das nicht irgendwie ändern? Das zweite ist: Wie kann ich Modelle laden? (Am besten aus Ressourcendateien.) Das dritte ist: Wie kann ich Texturen aus Ressourcendateien laden? (Ich will nicht, dass jeder einfach meine Texturen verändern kann.). |
Re: OpenGL Probleme
Hmm ich sags ungerne, aber ich glaube auf
![]() ![]() |
Re: OpenGL Probleme
Liste der Anhänge anzeigen (Anzahl: 1)
Screenshots mach ich immer mit der Druck Taste. Geht doch viel einfacher!
|
Re: OpenGL Probleme
Un was soll da falsch sein ?! :gruebel:
Es ist ganz natürlich dass das Bild manchmal so verzerrt vorkommt, je nach der Position der Kamera, entfernung der Objekten, Blickwinkel usw. Kannst du uns etwas von der GLInit posten? Sonst ![]() |
Re: OpenGL Probleme
Ich kenne delphigl.com schon. Dass manchmal das Bild je nach Perspektive verzerrt ist ist mir auch klar, Zentralperspektive halt, aber diese Verzerrung ist alles andere als proportional (siehe Anhang vorheriger Beitrag.)
Achja, ich bräuchte noch ein paar Befehle für Filter/Antialiasing Einstellungen und Befehle zur Optimierung von Qualität/Geschwindigkeit. Ich initialisiere OpenGL folgendermaßen: Das ganze ist in der FormCreate-Prozedur. p3d ist eine Komponente vom Typ TPanel.
Delphi-Quellcode:
canv := TCanvas.Create;
canv.Handle := p3D.Handle; synh := TSynRoboterTronoSyn.Create(commands); status := 'nix'; commands.Highlighter := synh; commands.Modified := False; form1.Left := screen.Width div 2 - form1.Width div 2; form1.Top := screen.Height div 2 - form1.Height div 2; readcmdsintoarray; firsterrorline := -1; xpos := 0; ypos := 0; dir := 'u'; statusbar1.Panels[0].Text := 'Zeile: 1, Spalte: 1'; statusbar1.Panels[1].Text := 'Kein Fehler gefunden.'; statusbar1.Panels[2].Text := '[Unbenannt]'; //drawrobot(0, 0, 'u'); form1.myDC := GetDC(canv.Handle); SetupPixelFormat; myRC := wglCreateContext(mydc); wglMakeCurrent(myDC, myRC); glEnable(GL_DEPTH_TEST); glenable(GL_Line_Smooth); glenable(GL_texture_2d); gridtex := auxDIBImageLoadA('./textures/grid.bmp'); glGenTextures(1, grid); glBindTexture(GL_TEXTURE_2D, grid); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, gridtex^.sizeX, gridtex^.sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, gridtex^.data); //Das ganze noch 3 mal mit anderen Texturen. glViewport(0, 0, p3d.Width, p3d.Height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(100, 1, 0.01, 100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); |
Re: OpenGL Probleme
Habe jetzt GL_POLYGON_SMOOTH aktiviert, jetzt geht die Kantenglättung schon besser, aber die Linien im Hintergrund wirken immer noch etwas abgestuft und teilweise dünner als welche, die noch weiter hinten sind (?). Und wie kann man zwischen bilinearen/trilinearen und den anderen Filtern umschalten?
|
Re: OpenGL Probleme
Man sollte gluPerspective so ungefähr aufrufen :
Delphi-Quellcode:
Edit
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, ClientWidth / ClientHeight, 1.0, 1000.0); // muss nicht 45.0 deg sein, aber 100.0 ist auch IMHO zu viel (zu breit) // das Wichtigste ist [b]ClientWidth / ClientHeight[/b] Bei dir ist ClientWidth / ClientHeight = 1, da nehme ich ein, dass ClientWidth = ClientHeight immer gilt ? |
Re: OpenGL Probleme
Mal so ein Frage: Warum machst nicht den Hintergrund Schwarz, und ziehst dann alle Gitterlinien auf jeder Ebene in der Farbe Orange oder so, das sieht IMHO besser aus!
|
Re: OpenGL Probleme
@Speedmaster: Ich kanns mal probieren, aber ich denke nicht, dass es besser aussieht.
@sniper_w: Richtig, die Kompo p3d ist nichts anderes als ein Panel mit Width 521 und Height 521, und damit der arme Computer nicht soviel rechnen muss hab ich einfach 1 geschrieben. 100 hab ich genommen, damit das ganze auch auf das Panel passt. Der Einfachheit halber ist nämlich jedes Quadrat genau 1x1 groß. Ich probiers mal mit anderen Werten. Meine andere Frage nach Filtereinstellungen und Fullscreenantialiasing wurde immer noch nicht beantwortet. Achja übrigens bitte ich euch, den Source Code meines Programms nicht herumzugeben, das Projekt ist zwar Freeware, aber nicht Open Source. |
Re: OpenGL Probleme
Hab jetzt die Perspektive auf 45 gestellt (hätt ich mir auch denken können).
Aber auf dem Bild sind weiterhin lauter Artefakte, Linien werden teilweise nur gestrichelt dargestellt. Schwarz mit Orange ist nicht so ganz das wahre. Noch eine Frage: Wie binde ich ein fertiges 3D Modell ein? Und die Frage über die Einbindung von Texturen aus Ressourcendateien ist auch noch nicht beantwortet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz