Bekannte Bugs(Liste wird aktualisiert):
logische:
- eigenwillige, will sagen unausgereifte, Navigation //edit: bereinigit!!
- noch nicht spielbar, da noch keine spiellogik vorhanden
- eigentlich gar nicht genug programm zum kommentieren...
coding:
- menü fehlerhaft
_________________
"User Error. Replace User and hit Continue."
Zuletzt geändert von luketheduke am Sa Feb 26, 2005 16:53, insgesamt 1-mal geändert.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das Menü solltest du im Verlauf der Arbeiten noch verbessern. Möglichwärs ein Texturiertes Quad im Orthomodus zu nehmen und dadrauf dann die Klicks auszuwerten. Tastatureingaben sind unter OpenGL nicht ganz Zeitgemäß.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
das erste große problem(eigentlich das zweite) ist aufgetreten:
Code:
glBegin(GL_QUADS);
glcolor3f(0.1,0.1,1);
glvertex2i(30,30);
glvertex2i(30,clientheight-30);
glvertex2i(clientwidth-30,clientheight-30);
glvertex2i(clientwidth-30,30);
glEnd;
Damit zeichne ich mein menü-quad. aber anstatt brav überall 30 Pixel Abstand zu halten, füllt es (nur im vollbildmodus!) rechts unten alles aus. das bedeutet, dass anscheinend mein clientwidth und clientheight im vollbildmodus nicht mehr korrekt sind.
kann man das beheben bzw. gibt es einen workaround?
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Wenn nicht schau ob du im Vollbildmodus die Konstanten nimmst, mit denen du die Auflösung festgelegt hast.
Aber eigentlich würde ich dir empfehlen, dass du den Orthomodus eine feste Auflösung vorgibst.
Dann bekommst du später wenn du die Vollbildschirmauflösung freiwählbar machst weniger Probleme, da dein Menu noch genauso aussieht.
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
tja.... mein orthomodus sieht so aus:
Code:
// Tiefentest und Texturierung für Textanzeige deaktivieren
glDisable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_2D);
// In orthagonale (2D) Ansicht wechseln
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0,640,480,0,-1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
zeichne das quad jetzt einfach auf 640-30 und 460-30.
->problem gelöst durch workaround.
aber das nächste kommt bestimmt. ich bin gerade bei der texturierung. alles gleich durchtzutexturieren kann ich schon, aber die kunst ist jetzt, rauszufinden, wann ich meinen glbegin-glend block verlassen muss um die textur zu ändern und vor allem wie ich es schaffe, dass das nicht zu oft passieren muss. meinen gl_triangle_strip werd ich wahrscheinlich vergessen müssen.....
Jo, also prinzipiell finde ich die Idee von so einem Bridge-Builder-Clone ziemlich goil ... habe den nachfolger "Pontifex" ne zeit gezockt und fand es echt Spaßig
Zu deinem Programm:
Mir ist da ein kleiner Fehler aufgefallen. Und zwar scheint deine Map kleinere Löcher oder ähnliches zu haben (siehe Screenshot).
Zudem kann ich den Fenstermodus irgendwie nicht ansehen ... dein Projekt verzieht sich in die untere, rechte Ecke ... kann da etwa ein Viertel des fensters noch sehen (die Obere Linke Ecke vom Programm halt), mehr aber auch leider nicht :-/
Apropro Map, ich hätte da noch zwei Anregungen:
1) Würde ich die "Schlucht" über die die Brücke später mal gelegt werden muss etwas mehr hervorheben ... mit anderewn Worten: Ich finde das gelände zu platt ^^
2) An sich wäre es doch gar nicht übel, wenn du deine Geröll-Textur 2x verwenden würdest: einmal an den etwas größeren Hügeln und zweitens unten im Flussbett ... denn bräuchtest du nur noch mal so ganz Spontan eine Wassertextur über die ganze Map zu blenden in einer Bestimmten Höhe und auch das wäre gegessen 3) Thema Texturen: die übergänge zwischen den Texturen sind ja noch nicht wirklich weich ^^
Dafür hätte ich so ne Anregung, man könnte jedem Vertex ja je nach höhe eine Farbe zuordnen (also bei den Vertexen im Grenzgebiet, dass die höheren grün un d die unteren Rot sind z.b.) und denn per Pixel-Shader die zwei Texturen ja nach Farbanteil rot und grün da drauf blenden .... denn würden die Übergänge sogar von deiner Graka (mittels Color) berechnet und mit nem einfachen Shader ausgewertet. Das würde die optische Qualität doch schon deutlich steigern, besonders, weil man auf diese Art und weise auch nochw eitere Texturübergänge (Geröll im Wasser --> Sand --> Gras) recht einfach realisieren kann
Ich weiß, dass sind alles Dinge, die oftmals erst später in das Projekt wandern, aber ich dachte mir, dass diese Anregungen sicherlich nicht verkehrt sein können
Dateianhänge:
screen.jpg [ 20.44 KiB | 9405-mal betrachtet ]
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
löcher: is mit auch schon aufgefallen,hab aber keine ahnung, wie die zustandekommen..
vollbild: starte es mal mit dem kommandozeilenparameter -full. als ich es kompiliert hab, war es wirklcih in der unteren rechten ecke, aber trotzdem komplett.
ich nehm mal an, das ist es immer noch, bloß dass du das nicht richtig siehst(das fenster ist auch nur 640x480 groß im fenstermodus).
1) die heightmap kannst du dir gefälligst selber machen! ich hab ja auch noch gar keine "schlucht" in dem sinne. das sind alles nur testmaps.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kann es sein, dass du irgendwo die Fensterposition "poDesigned" eingestellt hast, und wärend dem coden das Fenster in diese Ecke geschoben hast? Dann wäre die Lösung einfach auf "poCenter" umzustellen. (keine Ahnung obs sowas bei Api gibt. Aber so wie ich mir das vorstelle, ist beim ertstellen eines Formulars im constructor bestimmt der Initialwert Designed.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmm wieso? Wenn ich beim Proggen das Fenster Links ausm Bild rausschiebe und es ist Designed eingestellt, dann Taucht das fertige Programm exakt auch an der Stelle auf.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
ich habs ja schon umgestellt, aber der fenstermodus ist sowieso nur fürs debuggen interessant -> nebensächlich.
ps: wie macht man eigenltich einen shader? und womit kompiliert man ihn?
edit: noch ein prob: ich hab zwei zusätzliche units, typedefs.pas und routines.pas. wenn ich die ändere, speichere und dann mein projekt kompiliere, nimmt er die änderungen nicht wahr. wenn ich zum beispiel von array of TBitMap zu array of string wechsle, meint er immer noch, es ist ein bitmap. hat das irgendwas mit dcu-dateien zu tun? und wenn ja, wie aktualisiere ich die?
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
sodele.
die unit-dateien muss man natürlich speichern bevor man das programm ausführt.... ->prob gelöst.
aber es tritt ein neues auf.
ich rendere jetzt auch die anchors(über tastendruck auf "t"), an denen (in ferner zukunft ) einmal die brücke festgemacht werden soll. diese werden aber total verschoben gezeichnet.
sie sollten mitten in der karte sein, werden aber ausserhalb gezeichnet. komischerweise sind da auch schon anfangs dreiecke.
Einfach mal die exe starten, das level laden und auf t drücken. dann sollte man irgendwo ausserhalb der map weisse und grüne dreiecke sehen. die grünen sind aber schon von anfang an da, und ich hab ka wieso.
spontan würde ich zwei sachen tippen:
1. du liest die koordinaten falsch ein
2. du benutzt die falschen koordinaten
ohne das du uns etwas genauere informationen gibst z.B über die kartengröße und vorallem WIE du deine levelfiles einliest (am besten mal funktion posten), wird es schwer werden da zu helfen.
sonst nochn paar vorschläge für dich:
@scene
- du renderst die ganze map immer wieder über glbegin und glend. das zieht unheimlich leistung (hab selbst nur so um die 30fps, trotz athlon 64 3000+ 512mb ddr un gf6600 gt.). sofern die landschaft später nicht in echtzeit verändert wird, kann ich dir nur die displaylisten ans herz legen. nen tutorial dazu gibts hier auf der seite. bei dynamischen landschaften verwende Vertex Arrays oder besser noch VBOs.
- du benutzt für deine szene meiner meinung nach unnötig viele polygone. ich schätze würde sogar eine 4fache minderung nicht auffallen. musst mal rumprobiern.
- da du nur niedrig aufgelöste texturen verwendest, würde ich dir empfehlen, alles in eine textur zu packen. dann hättest du auch weichere übergänge. sog. terrain-texturen kann man mit vielen programmen erstellen. es gibt auch ein tutorial hier wie man dich selbst eins programmiern kann. um das ganze visuell noch mehr aufzuwerten, kannst du ein oder mehrere detailtexturen verwenden.
- das ganze terrain über triangles zu rendern ist schon besser als über quads. noch besser wäre ein triangle strip, weil du dann das zweite dreieck nicht noch extra rendern müsstest. musst dann nur in jeder zeile nen neuen strip anfangen.
- gitternetz: anstatt nochmal ein ganzes gitternetz zu zeichnen, kannst du alternativ mit der prozedur glPolygonMode(GL_FRONT_AND_BACK, x) zwischen wireframe und solid umschalten. als x setzt du GL_LINE für wireframe oder GL_FILL für nen solid ein
@code:
- du machst viele einmalige dinge über if-abfragen in deiner loop prozedur. lad am besten sachen wie texturen etc. in form create oder dann wenn du dein terrain lädst (nach dem opendialog.execute). selbst if-abfragen kosten zeit, und mit zunehmender komplexität der szene kann man zeit immer gut gebrauchen.
die idee finde ich gut - bin mal gespannt was draus wird viel erfolg noch!
_________________ I'm not the signature, I'm just cleaning the floor...
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
danke für das tolle feedback! da macht das debuggen gleich noch mehr spaß!
anchors:
1. die eingelesenen anchors sieht man am bildschirmrand, außerdem ist sowohl levelfile als auch mapfile klartext. bzw. bitmap.
2. dito
informationen:
- meine TLevel-Struktur sieht man im projektforum
- meine ladeprozedur:
mir dämmerts gerade... mein gott nachdenken kann so schwer sein.....
ich verschiebe ja die komplette map beim rendern so, dass ihr mittelpunkt bei (0|0|0) liegt...... das werd ich wohl ändern.
danke!!
aber ihr kriegt die ladeprozedur trotzdem:
Code:
function loadlevel(var level:TLevel;filename:string='default.lvl'):boolean;
var f:textfile;
s:string;
anchors:string;
i,k:integer;
list,list_2:tstringlist;
begin
try
try
iffileexists(filename)thenassignfile(f,filename)
elsebegin
showmessage('Datei '+ filename +' nicht gefunden!');
result:=false;
exit;
end;
reset(f);
readln(f,s);
level.name:=s;
readln(f,s);
level.money:=strtointdef(s,499999);
if level.money=499999then showmessage('Geldangabe fehlerhaft oder genau 499999!');
showmessage('Konnte Szene '+ s +' für level '+ level.name+' nicht laden!');
result:=false;
exit;
end;
readln(f,anchors);// jetzt wird alles eingelesen.
list:=tstringlist.Create;// die brauch ich leider....
list_2:=tstringlist.Create;// -\"-
explode(anchors,[';'],list);// meine eigene, geniale \"explode\"-funktion nach php-vorbild - könnt ihr auch haben, wenn ihr sowas braucht.
for i:=0to(list.Count-1)do// von hier...
begin
explode(list[i],[','],list_2);
for k:=0to2do
level.Anchors[i,k]:=strtofloat(list_2[k]);
end;
showmessage('Anchors eingelesen!');// ... bis hier werden die anchors eingelesen
readln(f,s);
ifnot(s ='{')then showmessage('Kein einleitendes Materiallistentag(''{'') gefunden. Kein schwerwiegender Fehler.');// eigentlich unsinn - aber ich muss auch mal n levelformat template schreiben...
readln(f,s);
i:=0;
while(s <> '}')do// hier werden die materialien eingelesen.
das is jetzt n haufen code, sry....
aber warum am anfang schondie grünen dreiecke da sind, weiss ich immer noch nicht..... dafür is ja auch die renderproc zuständig....
scene:
- ja das mit der performance ist mir auch schon aufgefallen. ja die displaylisten.
- ja, das ist mir auch schon aufgefallen. ich bräuchte ne art floodfill-methide, die mir alle dreiecke augf der gleichen höhe und mit der gleichen prozedur zu einem polygion zusammenfasst, dann wieder in dreiecke zerlegt und zum rendern übergibt.
- die texturen sind noch nicht wirklich endgültig. man hat mir auch schon zu shadern für die übergänge geraten, und ich glaube das probier ich aus.
- das ist eines der dinge, die mir von grund auf eingehämmert wurden: triangles sin das beste, polygone sind das schlechteste, glbegin/glend blöcke sollen möglichst wenig sein.... -gitternetz: guter tipp. werd ich gleich mal implementieren.
code:
-kann ich mal n bisschen nach schauen
die idee find ich auch gut - bin selbst gespannt was draus wird!
danke,danke!
ps: da sin aber n paar fehler im pascal-tag. der code ist syntaktisch bzw. grammatisch einwandfrei. es scheint mit geschweiften klammern in zeichenfolgen nicht klarzukommen ....
Mitglieder in diesem Forum: 0 Mitglieder und 17 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.