Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 10, 2025 17:44

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Licht - komische Richtung
BeitragVerfasst: Fr Mär 14, 2008 20:53 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 07, 2006 16:27
Beiträge: 52
Wohnort: Marbach(bei Chemnitz)
Hallo,

ich habe in meine Anwendung das Licht aus dem zugehörigem Tutorial eingebaut.

Code:
  1.  
  2.     light0_position :Array[0..3] of GlFloat = (0.0, 2.0, 0.0, 1.0);
  3.     light0_ambient  : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  4.     light0_diffuse  : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  5.     light0_specular :array[0..3] of GlFloat = (0.8, 0.8, 0.7, 1.0);
  6. //...
  7.  
  8.    glLightfv(GL_LIGHT0, GL_AMBIENT,  @light0_ambient[0]);
  9.    glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light0_diffuse[0]);
  10.    glLightfv(GL_LIGHT0, GL_POSITION, @light0_position[0]);
  11.    gllightfv(Gl_Light0, GL_SPECULAR, @light0_specular[0]);
  12.  


Wenn nix weiter festgelegt sollte das Licht ja in alle Richtungen Strahlen. Aber, wie im Bild zu sehen tut es das nicht. Es leuchtet nur nach rechts.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau rausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch etwas noch Bizarreres ersetzt.
Es gibt eine andere Theorie, die besagt, dass das schon passiert ist.


Zuletzt geändert von hustler1 am Fr Mär 21, 2008 19:15, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2008 01:12 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Es ist schon spät und ich kann mich täuschen, aber komisch finde ich an dem Bild, dass der "unbeleuchtete" Teil gut sichtbar ist, obwohl die ambiente Beleuchtung auf 0 steht. Wo kommt denn da das Licht her?
Sind das wirklich die aktuellen Parameter? Hast du die Attenuation angefasst? Könntest du die Szene nochmal im Drahgittermodus (glPolygonMode) rendern. Eventuell ist nur doof interpoliert worden.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2008 12:44 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 07, 2006 16:27
Beiträge: 52
Wohnort: Marbach(bei Chemnitz)
Das andere Licht kam von der Ambienten Reflexion der Wände ...
Ich habs mal rausgenommen, nu is das so:
Code:
  1.  
  2.     mat_specular   : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  3.     mat_shininess  : Array[0..0] of GlFloat = (20.0);
  4.     mat_ambient    : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  5.     mat_diffuse    : Array[0..3] of GlFloat = (0.8, 0.8, 0.8, 1.0);
  6.  
  7.     light0_position :Array[0..3] of GlFloat = (0.0, 2.0, 0.0, 1.0);
  8.     light0_ambient  : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  9.     light0_diffuse  : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  10.     light0_specular :array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  11.  
  12.   //...
  13.  
  14.    glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  15.    glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  16.    glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  17.    glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  18.  
  19.    glLightfv(GL_LIGHT0, GL_AMBIENT,  @light0_ambient[0]);
  20.    glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light0_diffuse[0]);
  21.    glLightfv(GL_LIGHT0, GL_POSITION, @light0_position[0]);
  22.    gllightfv(Gl_Light0, GL_SPECULAR, @light0_specular[0]);
  23.  


Das ist auch das einzige was mit dem Licht gemacht wird.
Im Gl_line modus sieht man, das im Linken Teil einige wenige Polygone Licht abkriegen ...


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau rausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch etwas noch Bizarreres ersetzt.
Es gibt eine andere Theorie, die besagt, dass das schon passiert ist.


Zuletzt geändert von hustler1 am Fr Mär 21, 2008 19:16, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2008 14:02 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Naja... deine Lichtquelle hatte ja kein Ambientes Licht ausgestrahlt, deshalb kann eigentlich auch keins reflektiert werden.

Aber egal. Die "ATTENUATION" hast du nicht angefasst oder?

Zeichne mal genau nachdem du das Licht aktivierst, an der selben stelle eine Kugel ein. Vielleicht sieht man dann etwas. Kommt nicht selten vor, dass man sich "verrotiert" hat. Einfach um zu sehen wo das Licht steht.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2008 16:58 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 07, 2006 16:27
Beiträge: 52
Wohnort: Marbach(bei Chemnitz)
Also die Attenuation hatte ich Ursprünglich mal drinne, aber die it momentan auskommentiert, ergo kanns daran nicht liegen ...

Die Kugel ist dort wo die Lichtquelle sein sollte, das einzig wirklich faszinierende ist, das wenn die Kugel da ist, das Licht in die andere Richtung leuchtet...


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau rausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch etwas noch Bizarreres ersetzt.
Es gibt eine andere Theorie, die besagt, dass das schon passiert ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 18, 2008 00:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wie viele transformationen werden den durchgeführt bevor das Licht gesetzt wird?


Naja... eigentlich sollte ein Omni-light (so hießes glaub ich in 3DS Max) völlig unbeeindruckt davon sein. Vielleicht wird in irgendeiner Unterfunktion was an den Lichtparametern geändert. OpenGL ist keine Hexerei. irgendwo in deinem Code muss der Fehler stecken. Ich bin aber auch nicht so drinne, als das ich hier was konkretes sagen könnte.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 18, 2008 14:59 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 07, 2006 16:27
Beiträge: 52
Wohnort: Marbach(bei Chemnitz)
Normalerweise gar keine ...

Was ich erstaunlich finde ist, dass sobald ich die Kugel da mit gluSphere reinsetze, sich das Licht komplett verändert.
Macht ggf glusphere irgendwas am Licht?

Die Kugel wird auch ordendlich beleuchtet, wenn ich sie etwas unterhalb der Lichtquelle positioniere. Nur alles ringsrum nicht ...

_________________
Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau rausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch etwas noch Bizarreres ersetzt.
Es gibt eine andere Theorie, die besagt, dass das schon passiert ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 18, 2008 17:49 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Setz mal bisl code rein. Alles andere ist Raterei. Es gibt hier einige im Forum die ein Auge für "seltsame Konstellationen" haben. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 02:59 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 07, 2006 16:27
Beiträge: 52
Wohnort: Marbach(bei Chemnitz)
Also:
Der Teil der das Rendering macht:
Code:
  1. procedure TForm1.Render;
  2. var
  3. temp: TPunkt;
  4. ratio, radians, wd2, DTOR, aperture, ndfl,
  5. focallength, eyesep: reaL;
  6. right, left, bottom, top: real;
  7. abc: PGluquadric;
  8. const
  9.     mat_specular   : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  10.     mat_shininess  : Array[0..0] of GlFloat = (50.0);
  11.     mat_ambient    : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  12.     mat_diffuse    : Array[0..3] of GlFloat = (0.8, 0.8, 0.8, 0.0);
  13.  
  14.     light0_position :Array[0..3] of GlFloat = (0.0, 2.0, 0.0, 0.0);
  15.     light0_ambient  : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  16.     light0_diffuse  : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  17.     light0_specular :array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  18. begin
  19.    abc  := glunewquadric;
  20.  
  21.    temp.x  := 0;
  22.    temp.y  := 0;
  23.    temp.z  := 0;
  24.    glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  25.    glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  26.    glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  27.    glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  28.  
  29.    glLightfv(GL_LIGHT0, GL_AMBIENT,  @light0_ambient[0]);
  30.    glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light0_diffuse[0]);
  31.    glLightfv(GL_LIGHT0, GL_POSITION, @light0_position[0]);
  32.    gllightfv(Gl_Light0, GL_SPECULAR, @light0_specular[0]);
  33.  
  34.    glenable(gl_lighting);
  35.    glEnable(GL_LIGHT0);
  36.  
  37.    //monoperspektifiche ansicht
  38.    if not ansicht.stereo then
  39.    begin
  40.       glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  41.  
  42.       glViewport(0, 0, ClientWidth, ClientHeight);
  43.       glMatrixMode(GL_PROJECTION);
  44.       glLoadIdentity;
  45.       gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  46.       glrotatef(ansicht.rotx,1,0,0);
  47.       glrotatef(ansicht.roty,0,1,0);
  48.       gltranslatef(ansicht.xpos,-2.5,ansicht.zpos);
  49.  
  50.       glMatrixMode(GL_MODELVIEW);
  51.       glLoadIdentity;
  52.       glscalef(2,2,2);
  53.       glcolor3f(1,1,1);
  54.             // wenn die Position des Lichtes hier gesetzt wird, ändert sich nichts
  55.       glusphere(abc,0.5,50,50);
  56.  
  57.       glEnable(GL_TEXTURE_2D);
  58.       Abschnittrendern(leiste, TexID[41], temp);
  59.       Abschnittrendern(Boden, TexID[0], temp);
  60.       glmatrixmode(gl_texture);
  61.       gldisable(gl_texture_2D);
  62.       glcolor3f(0.95,0.95,0.95);
  63.       Abschnittrendern(Himmel, TexID[0], temp);
  64.       glcolor3f(1,1,1);
  65.       glenable(gl_texture_2d);
  66.       glscalef(4,4,4);
  67.       Abschnittrendern(Wand, TexID[1], temp);
  68.       glscalef(0.25,0.25,0.25);
  69.       glmatrixmode(gl_texture);
  70.       glrotatef(-90,0,0,1);
  71.       glscalef(1,-1,1);
  72.       Bilderrendern;
  73.       glmatrixmode(gl_texture);
  74.       glloadidentity;
  75.       gldisable(gl_texture_2d);
  76.   end;
  77.   // ...
  78.   SwapBuffers(DC);
  79.  


Falls benötigt:
Die init:
Code:
  1. procedure TForm1.Init;
  2. begin
  3.    Maus.CursorPos  := Point(Form1.clientwidth div 4,Form1.clientheight div 4);
  4.    ansicht  := TInteraktion.create;
  5.    load.Laden(getcurrentdir + '\Objekte\Boden.obj', Boden);
  6.    Boden  := TempAb;
  7.    load.Laden(getcurrentdir + '\Objekte\waende.obj', Wand);
  8.    Wand  := TempAb;
  9.    load.Laden(getcurrentdir + '\Objekte\bild.obj', Bild);
  10.    Bild  := TempAb;
  11.    load.Laden(getcurrentdir + '\Objekte\himmel.obj', Himmel);
  12.    Himmel  := TempAb;
  13.    load.Laden(getcurrentdir + '\Objekte\kehrleiste.obj', leiste);
  14.    leiste  := TempAb;
  15.    load.Laden(getcurrentdir + '\Objekte\rahmen.obj', rahmen);
  16.    rahmen  := TempAb;
  17.    load.bilderrahmen(getcurrentdir + '\Objekte\Bilder.txt');
  18.    setlength(TempAb.Punkte,0);
  19.    setlength(TempAb.Flaechen,0);
  20.    start  := false;
  21.    ansicht.zpos  := 0;
  22.    ansicht.xpos  := -5;
  23. end;


Die setupgl:
Code:
  1. procedure TForm1.SetupGL;
  2. begin
  3.    glClearColor(0, 0, 0, 0.0);
  4.    glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  5.    glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  6. end;
  7.  


Abschnittrendern:
Code:
  1. procedure TForm1.Abschnittrendern(Teil: TAbschnitt; Textur: gluint; pos: TPunkt);
  2. var
  3. i: integer;
  4. a,b: integer;
  5. begin
  6.    glBindTexture(GL_TEXTURE_2D, Textur);
  7.    for I := 0 to Teil.anzahlflaechen-1 do
  8.    begin
  9.       //x werte gleich
  10.       if (Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x = Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x) and
  11.          (Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x = Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x)
  12.       then
  13.       begin
  14.          GlBegin(gl_triangles);
  15.          if (Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z) or
  16.             (Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z)
  17.          then b  := 1 else b  := 0;
  18.          if (Teil.Punkte[Teil.Flaechen[i].p1].y > Teil.Punkte[Teil.Flaechen[i].p2].y) or
  19.             (Teil.Punkte[Teil.Flaechen[i].p1].y > Teil.Punkte[Teil.Flaechen[i].p3].y)
  20.          then a  := 1 else a  := 0;
  21.          glTexCoord2f(a,b);
  22.          glvertex3f(Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x,
  23.                     Teil.Punkte[Teil.Flaechen[i].p1].y,
  24.                     Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z);
  25.          if (Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z) or
  26.             (Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z)
  27.          then b  := 1 else b  := 0;
  28.          if (Teil.Punkte[Teil.Flaechen[i].p2].y > Teil.Punkte[Teil.Flaechen[i].p1].y) or
  29.             (Teil.Punkte[Teil.Flaechen[i].p2].y > Teil.Punkte[Teil.Flaechen[i].p3].y)
  30.          then a  := 1 else a  := 0;
  31.          glTexCoord2f(a,b);
  32.          glvertex3f(Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x,
  33.                     Teil.Punkte[Teil.Flaechen[i].p2].y,
  34.                     Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z);
  35.          if (Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z) or
  36.             (Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z)
  37.          then b  := 1 else b  := 0;
  38.          if (Teil.Punkte[Teil.Flaechen[i].p3].y > Teil.Punkte[Teil.Flaechen[i].p2].y) or
  39.             (Teil.Punkte[Teil.Flaechen[i].p3].y > Teil.Punkte[Teil.Flaechen[i].p1].y)
  40.          then a  := 1 else a  := 0;
  41.          glTexCoord2f(a,b);
  42.          glvertex3f(Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x,
  43.                     Teil.Punkte[Teil.Flaechen[i].p3].y,
  44.                     Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z);
  45.          glend;
  46.       end;
  47.  
  48.       //y werte gleich
  49.       if (Teil.Punkte[Teil.Flaechen[i].p1].y = Teil.Punkte[Teil.Flaechen[i].p2].y) and
  50.          (Teil.Punkte[Teil.Flaechen[i].p1].y = Teil.Punkte[Teil.Flaechen[i].p3].y)
  51.       then
  52.       begin
  53.          GlBegin(gl_triangles);
  54.          if (Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z) or
  55.             (Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z)
  56.          then a  := 1 else a  := 0;
  57.          if (Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x) or
  58.             (Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x)
  59.          then b  := 1 else b  := 0;
  60.          glTexCoord2f(a,b);
  61.          glvertex3f(Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x,
  62.                     Teil.Punkte[Teil.Flaechen[i].p1].y,
  63.                     Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z);
  64.          if (Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z) or
  65.             (Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z)
  66.          then a  := 1 else a  := 0;
  67.          if (Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x) or
  68.             (Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x)
  69.          then b  := 1 else b  := 0;
  70.          glTexCoord2f(a,b);
  71.          glvertex3f(Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x,
  72.                     Teil.Punkte[Teil.Flaechen[i].p2].y,
  73.                     Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z);
  74.          if (Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z) or
  75.             (Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z > Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z)
  76.          then a  := 1 else a  := 0;
  77.          if (Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x) or
  78.             (Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x)
  79.          then b  := 1 else b  := 0;
  80.          glTexCoord2f(a,b);
  81.          glvertex3f(Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x,
  82.                     Teil.Punkte[Teil.Flaechen[i].p3].y,
  83.                     Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z);
  84.          glend;
  85.       end;
  86.  
  87.       //z werte gleich
  88.       if (Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z = Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z) and
  89.          (Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z = Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z)
  90.       then
  91.       begin
  92.          GlBegin(gl_triangles);
  93.          if (Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x) or
  94.             (Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x)
  95.          then b  := 1 else b  := 0;
  96.          if (Teil.Punkte[Teil.Flaechen[i].p1].y > Teil.Punkte[Teil.Flaechen[i].p2].y) or
  97.             (Teil.Punkte[Teil.Flaechen[i].p1].y > Teil.Punkte[Teil.Flaechen[i].p3].y)
  98.          then a  := 1 else a  := 0;
  99.          glTexCoord2f(a,b);
  100.          glvertex3f(Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x,
  101.                     Teil.Punkte[Teil.Flaechen[i].p1].y,
  102.                     Teil.Punkte[Teil.Flaechen[i].p1].z+pos.z);
  103.          if (Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x) or
  104.             (Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x)
  105.          then b  := 1 else b  := 0;
  106.          if (Teil.Punkte[Teil.Flaechen[i].p2].y > Teil.Punkte[Teil.Flaechen[i].p1].y) or
  107.             (Teil.Punkte[Teil.Flaechen[i].p2].y > Teil.Punkte[Teil.Flaechen[i].p3].y)
  108.          then a  := 1 else a  := 0;
  109.          glTexCoord2f(a,b);
  110.          glvertex3f(Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x,
  111.                     Teil.Punkte[Teil.Flaechen[i].p2].y,
  112.                     Teil.Punkte[Teil.Flaechen[i].p2].z+pos.z);
  113.          if (Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p2].x+pos.x) or
  114.             (Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x > Teil.Punkte[Teil.Flaechen[i].p1].x+pos.x)
  115.          then b  := 1 else b  := 0;
  116.          if (Teil.Punkte[Teil.Flaechen[i].p3].y > Teil.Punkte[Teil.Flaechen[i].p2].y) or
  117.             (Teil.Punkte[Teil.Flaechen[i].p3].y > Teil.Punkte[Teil.Flaechen[i].p1].y)
  118.          then a  := 1 else a  := 0;
  119.          glTexCoord2f(a,b);
  120.          glvertex3f(Teil.Punkte[Teil.Flaechen[i].p3].x+pos.x,
  121.                     Teil.Punkte[Teil.Flaechen[i].p3].y,
  122.                     Teil.Punkte[Teil.Flaechen[i].p3].z+pos.z);
  123.          glend;
  124.       end;
  125.    end;
  126. end;

Zur Erklärung:
Die vielen Abfragen dienen dazu die Texturkoordinaten richtig festzulegen, da ich die Objekte aus einem Format lade, in dem keine Texturen enthalten sind.
Also wird zunächst eine Abfrage gemacht, in welcher Ebene die Polygone liegen (ist möglich, da keine schrägen enthalten sind) und dannach werden die restlichen Koordinaten überprüft und die Texturkoordinaten zugeordnet. Ist wahrscheinlich nicht der Weisheit letzter Schluss, aber für die Anwendung allemal ausreichend.

_________________
Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau rausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch etwas noch Bizarreres ersetzt.
Es gibt eine andere Theorie, die besagt, dass das schon passiert ist.


Zuletzt geändert von hustler1 am Fr Mär 21, 2008 19:13, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 12:11 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Bitte, benutz doch die Pascal-Tags anstatt den Code-Tags, so hat man ja überhaupt garkeinen überblick.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 19:14 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 07, 2006 16:27
Beiträge: 52
Wohnort: Marbach(bei Chemnitz)
Stimmt, is wirklich doof so .. sorry

So, erledigt.

_________________
Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau rausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch etwas noch Bizarreres ersetzt.
Es gibt eine andere Theorie, die besagt, dass das schon passiert ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 19:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Mach mal bevor du das licht setzt einen Aufruf von glLoadIdentity, sonst sind noch die Transformationen vom letzten Frame aktiv.

//Edit: Ach ich laber müll, ganz am ende ist doch noch ein glLoadIdentity...
//Edit2: Garnicht, das wird noch auf die Texturmatrix ausgeführt. Wechsel also mal am ende/anfang von der Render-Methode in die Modelview-Matrix und setz die Transformationen zurück.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 21:21 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 07, 2006 16:27
Beiträge: 52
Wohnort: Marbach(bei Chemnitz)
Macht auch keinen Unterschied...

_________________
Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau rausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch etwas noch Bizarreres ersetzt.
Es gibt eine andere Theorie, die besagt, dass das schon passiert ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 05, 2008 20:29 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 07, 2006 16:27
Beiträge: 52
Wohnort: Marbach(bei Chemnitz)
na ganz klasse ... ich habs rausgefunden ...

Merke: es ist ein clevere Idee Normalen zu setzen ... :roll:

verblüffend finde ich allerdings den Effekt, der entstanden ist, als ichs ohne Normalen anzugeben gerendert habe ...
Nu klappts jedenfalls

_________________
Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau rausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch etwas noch Bizarreres ersetzt.
Es gibt eine andere Theorie, die besagt, dass das schon passiert ist.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.027s | 16 Queries | GZIP : On ]