hallo, ich habe einen quader und möchte diesen zur Laufzeit mittels bmp oder wahlweise jpg Dateien texturieren.
Ich benutze die Units DGLOpenGL.pas und GLBitmap.pas, aber ich komme mit dem Texturieren nicht so wirklich klar.
Hier mal mein bisheriger Code
Code:
{...}
var
MainForm: TMainForm;
RC: HGLRC;
DC: HDC;
ShowFPS:Boolean=false;
FontBase: GLUInt;
StartTick:Cardinal;
Frames:Integer;
FPS:Single;
DegX, DegY:integer;
fZoom: glFloat =1;
linewidth: glfloat =1;
smoothlines:boolean=false;
TT, TB, TL, TR, TFront, TBack: TglBitmap2D;
{...}
procedure BuildFont(pFontName :String);
var
Font : HFONT;
begin
FontBase := glGenLists(96);
Font := CreateFont(16,0,0,0, FW_MEDIUM,0,0,0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE or DEFAULT_PITCH,PChar(pFontName));
EDIT: eigentlich möchte ich das bild in eine Variable laden und von da aus texturieren, da das bild auch noch in einem image auftauchen soll und ich keine grafische pixelpracht im negativen sinne erzeugen möchte
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Deine Texturgröße muss eine Potenz von 2 sein. Also 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 usw. Alles andere ist nicht zulässig. Und Spiegelungen kannst du entweder durch anpassen der Texturkoordinaten erreichen oder durch anpassen der Textur. Mit FTex.FlipVert und FTex.FlipHorz kannst du die Textur spiegeln. Das muss zwischen dem Laden der Datei und GenTexture erfolgen. Ich persönlich würde aber eher die Koordinaten anpassen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Dachte ich mir schon fast, das die Quellcode so verdammt ähnlich aussahen. Aber hast du hier nicht auch noch nen F34r0fTh3D4rk Account?
Wie meinst du das mit alle Punkte? Meinst du jetzt die Texturkoordinaten? Und ja. Je nachdem wie du die dort angibst kannst du die Textur spiegeln oder eben drehen. Und weiterschieben dürfte da sogar das sein wie du das haben willst.
Original
Code:
glBegin(GL_QUADS);
glTexCoord2f(0,1); glVertex3f(-3,-3,0);
glTexCoord2f(1,1); glVertex3f(3,-3,0);
glTexCoord2f(1,0); glVertex3f(3,3,0);
glTexCoord2f(0,0); glVertex3f(-3,3,0);
glEnd;
Um Horizontal zu spiegeln musst du bei der ersten Reihe (S Wert bei glTexCoord) aus der 0 eine 1 machen und aus der 1 eine 0. Bei Vertikal Entsprechend die zweite Reihe (T Wert bei glTexCoord).
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Achja. Qualitativ besser bekommst du die nur, wenn du andere Texturen benutzt. Mit OpenGL oder einem Grafikprogramm geht so etwas nicht. Also du musst dann andere Texturen verwenden. Bessere sozusagen.
aber wie machen das andere opengl spiele, bei denen sind manche texturen auch nur 64 * 64 und haben die qualität des originals, bei mir ist das nicht der fall
ok ich hab mal einen screenshot gemacht, ich habe nämlich im delphi forum ein programm gefunden um Produkt Boxen zu erstellen, das war jetzt kein 3d (leider) und das andere Programm was ich gefunden habe erstellt Bilder in minigröße.
Also wollte ich selbst ein schreiben mit opengl, weil ich eine 3d ansicht brauchte, diese kann ruhig erst pixelig aussehen, damit man die ansicht leichter drehen und zoomen kann, dann könnte man das bild rendern (darf auch 10 sekunden dauern ^^) (das prinzip von cinema 4d und co eben)
Ich würde aber gerne die Ränder behalten, damit ich so eine Art "Skizzen-Look" habe, die Strichbreite lässt sich dann einstellen:
noch ne frage, ich möchte, dass wenn die datei nicht gefunden wurde, ein bitmap geladen wird, welches ich erstellt habe (programm intern, jedoch wird einfach immer die nächstgelegene Textur genommen, warum ?)
Code:
empty := TBitmap.create;
empty.width:=10;
empty.Height:=10;
empty.Canvas.rectangle(0,0,10,10);
TFront := TglBitmap2D.Create;
ifFileexists('Front.bmp')then
begin
TFront.LoadFromFile('Front.bmp');
TFront.GenTexture;
endelse
TFront.AssignToBitmap(empty);
TBack := TglBitmap2D.Create;
ifFileexists('Back.bmp')then
begin
TBack.LoadFromFile('Back.bmp');
TBack.GenTexture;
endelse
TBack.AssignToBitmap(empty);
TLeft := TglBitmap2D.Create;
ifFileexists('Left.bmp')then
begin
TLeft.LoadFromFile('Left.bmp');
TLeft.GenTexture;
endelse
TLeft.AssignToBitmap(empty);
TRight := TglBitmap2D.Create;
ifFileexists('Rightt.bmp')then
begin
TRight.LoadFromFile('Side.bmp');
TRight.GenTexture;
endelse
TRight.AssignToBitmap(empty);
TTop := TglBitmap2D.Create;
ifFileexists('Top.bmp')then
begin
TTop.LoadFromFile('Top.bmp');
TTop.GenTexture;
endelse
TTop.AssignToBitmap(empty);
TBottom := TglBitmap2D.Create;
ifFileexists('Bottom.bmp')then
begin
TBottom.LoadFromFile('Bottom.bmp');
TBottom.GenTexture;
endelse
TBottom.AssignToBitmap(empty);
Code:
procedure DrawQuad(x, y, z: glfloat);
begin
TFront.Bind;
glBegin(GL_QUADS);
glTexCoord2f(0,1); glVertex3f(-x,-y, z);
glTexCoord2f(1,1); glVertex3f(x,-y, z);
glTexCoord2f(1,0); glVertex3f(x, y, z);
glTexCoord2f(0,0); glVertex3f(-x, y, z);
glEnd;
TBack.Bind;
glBegin(GL_QUADS);
glTexCoord2f(1,1); glVertex3f(-x,-y,-z);
glTexCoord2f(1,0); glVertex3f(-x, y,-z);
glTexCoord2f(0,0); glVertex3f(x, y,-z);
glTexCoord2f(0,1); glVertex3f(x,-y,-z);
glEnd;
TTop.Bind;
glBegin(GL_QUADS);
glTexCoord2f(0,0); glVertex3f(-x, y,-z);
glTexCoord2f(0,1); glVertex3f(-x, y, z);
glTexCoord2f(1,1); glVertex3f(x, y, z);
glTexCoord2f(1,0); glVertex3f(x, y,-z);
glEnd;
TBottom.Bind;
glBegin(GL_QUADS);
glTexCoord2f(0,1); glVertex3f(-x,-y,-z);
glTexCoord2f(1,1); glVertex3f(x,-y,-z);
glTexCoord2f(1,0); glVertex3f(x,-y, z);
glTexCoord2f(0,0); glVertex3f(-x,-y, z);
glEnd;
TLeft.Bind;
glBegin(GL_QUADS);
glTexCoord2f(0,1); glVertex3f(-x,-y,-z);
glTexCoord2f(1,1); glVertex3f(-x,-y, z);
glTexCoord2f(1,0); glVertex3f(-x, y, z);
glTexCoord2f(0,0); glVertex3f(-x, y,-z);
glEnd;
TRight.Bind;
glBegin(GL_QUADS);
glTexCoord2f(1,1); glVertex3f(x,-y,-z);
glTexCoord2f(1,0); glVertex3f(x, y,-z);
glTexCoord2f(0,0); glVertex3f(x, y, z);
glTexCoord2f(0,1); glVertex3f(x,-y, z);
glEnd;
end;
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Irgendwie kann ich dir gerade nicht so ganz folgen. Kann auch sein, dass ich gerade nicht so super aufnahmefähig bin.
Also das mit dem Fertig rendern ist so eine Sache. Ich befürchte du musst das entweder mit OpenGL in einer richtig großen Größe rendern. Und dann musst du Teilbilder rendern. Was nicht sonderlich einfach ist. Oder du musst einen raytracer (also einen richtigen Renderer) implementieren. Was mit sicherheit auch nicht einfacher sein dürfte.
ähm raytracing ist doch die rendermethode die fiktive strahlen aussendet, prüft was zu sehen und zu rendern ist, und das dann rendert, kann man da nich noch n paar sachen wie mipmapping und antialising verbessern, dazupacken oder so ? warum ist das denn so pixelig ? bei half life siehts ja besser aus (ok bei quake 2 isses auch nich viel besser aber besser), kA ob man bei doom2 schon texte erkennen konnte aber ich denke schon
Das muss doch verbesserbar sein, in den Tutorials sehen die Texturen ja auch anständig aus ?
Und das Quadrat kann auch nicht zu klein sein, dann würde das MipMapping das ja beheben.
ach ja, und warum wird meine bitmap nicht geladen, hab ich die falsche prozedur genommen ?
(Wenn ich meine Graka Power AA auf 100% stelle siehts schonmal anständig aus (man kann jedenfalls den Text lesen), es hat aber nunmal net jeder ne 256 mb graka )
ok das problem schieben wir mal nach hinten, wie kann ich trotzdem meine striche bekommen, ich hab schon ein paar sachen probiert, es muss auch irgendwie gehen, aber ich kriegs net so ganz gebacken
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.