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

Aktuelle Zeit: Fr Jul 18, 2025 16:42

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL Licht + Fehler
BeitragVerfasst: Do Jan 25, 2007 17:53 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Guten Tag,
mein MapEditor soll noch mit OpenGL Licht arbeiten.
Da is aber ein Fehler (siehe Bild im Anhang) . Ich hab die Fehler lila markiert. Je nachdem wie ich mich drehe sind die "fehler" woanders.
Frage. Liegt es am OpenGL Licht oder an meine Quellcode?


Hm. Nochwas. Ich find das OpenGL Licht garnicht so schlecht. Es sieht eigentlich schön aus. Damit kann man doch auch gut Dyn. Licht einbauen.


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 25, 2007 18:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ob es an deinem Quellcode liegt kann ich (bzw. wahrscheinlich auch alle anderen) dir erst sagen, wenn ich ihn gesehen habe. Meine Glaskugel ist in der Reinigung :oops:

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: Do Jan 25, 2007 18:23 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ok. Der ist hier :) es könnte natürlich beim Constructor ein Fehler sein. Bei den Normalen .


Code:
  1.  
  2. function GetNormal(v1,v2,v3:TVertex):TVertex;
  3. var
  4.   v4,v5, nor: TVertex;
  5.   lenght:GLfloat;
  6. begin
  7.   v4.x:=V1.x-V2.x;
  8.   v4.y:=V1.y-V2.y;
  9.   v4.z:=V1.z-V2.z;
  10.   v5.x:=V2.x-V3.x;
  11.   v5.y:=V2.y-V3.y;
  12.   v5.z:=V2.z-V3.z;
  13.   nor.x:=v4.y*v5.z-v4.z*v5.y;
  14.   nor.y:=v4.z*v5.x-v4.x*v5.z;
  15.   nor.z:=v4.x*v5.y-v4.y*v5.x;
  16.   lenght:=sqrt(nor.x*nor.x+nor.y*nor.y+nor.z*nor.z);
  17.   nor.x:=nor.x/lenght;
  18.   nor.y:=nor.y/lenght;
  19.   nor.z:=nor.z/lenght;
  20.   Result:=nor;
  21. end;
  22.  
  23. constructor TTerrain.create(Width, Height: integer);
  24. var X,Z,K : integer ;
  25.     Vnormals:array[0..7] of Tvertex;
  26.     lenght:Glfloat;
  27. begin
  28.  inherited create ;
  29.  LoadTexture('data\mainmenu.tga',tex,FALSE);
  30.  setLight ;
  31.  MX := Width ;
  32.  MZ := Height ;
  33.  //setLength(ter,MX,MZ);
  34.  for X := 0 to MX-1 do
  35.   for Z := 0 to MZ-1 do
  36.   begin
  37.     ter[X ,Z].ver.x:=X ;
  38.     ter[X ,Z].ver.y:=random(10)/20 ;
  39.     ter[X ,Z].ver.z:=Z ;
  40.     ter[X ,Z].u:=X/(MX-1);     // ?
  41.     ter[X ,Z].v:=Z/(MZ-1);     // ?
  42.   end;
  43.  
  44.   for X:=0 to MX-1 do
  45.   for Z:=0 to MZ-1 do
  46.   begin
  47.     if (X>0) and (X<MX-1) and (Z>0)and(Z<MZ-1) then
  48.     begin
  49.       Vnormals[0]:=GetNormal(ter[X,Z].ver,ter[X+1,Z  ].ver,ter[X+1,Z-1].ver);
  50.       Vnormals[1]:=GetNormal(ter[X,Z].ver,ter[X+1,Z-1].ver,ter[X  ,Z-1].ver);
  51.       Vnormals[2]:=GetNormal(ter[X,Z].ver,ter[X+1,Z+1].ver,ter[X+1,Z  ].ver);
  52.       Vnormals[3]:=GetNormal(ter[X,Z].ver,ter[X  ,Z+1].ver,ter[X+1,Z+1].ver);
  53.       Vnormals[4]:=GetNormal(ter[X,Z].ver,ter[X-1,Z+1].ver,ter[X  ,Z+1].ver);
  54.       Vnormals[5]:=GetNormal(ter[X,Z].ver,ter[X-1,Z  ].ver,ter[X-1,Z+1].ver);
  55.       Vnormals[6]:=GetNormal(ter[X,Z].ver,ter[X-1,Z-1].ver,ter[X-1,Z  ].ver);
  56.       Vnormals[7]:=GetNormal(ter[X,Z].ver,ter[X  ,Z-1].ver,ter[X-1,Z-1].ver);
  57.     end;
  58.  
  59.     ter[X,Z].n:=Vnormals[0];
  60.  
  61.     for K:=1 to 7 do
  62.     begin
  63.       ter[X,Z].n.x:=(ter[X,Z].n.x+Vnormals[k].x);
  64.       ter[X,Z].n.y:=(ter[X,Z].n.y+Vnormals[k].y);
  65.       ter[X,Z].n.z:=(ter[X,Z].n.z+Vnormals[k].z);
  66.     end;
  67.     lenght:=sqrt(sqr(ter[X,Z].n.x)+sqr(ter[X,Z].n.y)+sqr(ter[X,Z].n.z));
  68.     ter[X,Z].n.x:=ter[X,Z].n.x/lenght;
  69.     ter[X,Z].n.y:=ter[X,Z].n.y/lenght;
  70.     ter[X,Z].n.z:=ter[X,Z].n.z/lenght;
  71.  
  72.     setLength(poly,Length(poly)+1);
  73.     poly[High(poly)].v[0]:=@ter[X  ,Z  ];
  74.     poly[High(poly)].v[1]:=@ter[X+1,Z+1];
  75.     poly[High(poly)].v[2]:=@ter[X+1,Z  ];
  76.  
  77.     setLength(poly,Length(poly)+1);
  78.     poly[High(poly)].v[0]:=@ter[X  ,Z  ];
  79.     poly[High(poly)].v[1]:=@ter[X  ,Z+1];
  80.     poly[High(poly)].v[2]:=@ter[X+1,Z+1];
  81.   end;
  82.   for X:=0 to MX-1 do
  83.   for Z:=0 to MZ-1 do
  84.   begin
  85.     if (X=0) and(Z>0)and(Z<MZ-1) then ter[X,Z].n:=ter[X+1,Z].n;
  86.     if (X= MX-1)and(Z>0)and(Z<MZ-1) then ter[X,Z].n:=ter[X-1,Z].n;
  87.     if (Z=0)and(X>0)and(X<MX-1) then ter[X,Z].n:=ter[X,Z+1].n;
  88.     if (Z= MZ-1)and(X>0)and(X<MX-1) then ter[X,Z].n:=ter[X,Z-1].n;
  89.   end;
  90.   Form1.Panel1.Caption := IntToStr(Length(poly));
  91. end;
  92.  
  93. procedure TTerrain.render(aCamera : TECamera);
  94. var X,I : integer ;
  95. begin
  96.  glLoadIdentity ;
  97.  aCamera.setMatrix ;
  98. begin
  99.   glEnable(GL_CULL_FACE);
  100.   glBindTexture(GL_TEXTURE_2D,tex);
  101.   glEnable(GL_TEXTURE_2D);
  102.   glEnable(GL_LIGHTING);
  103.   glEnable(GL_LIGHT0);
  104.   glBegin(GL_TRIANGLES);
  105.     for X:=0 to High(poly) do
  106.     for i:=0 to 2 do
  107.     with poly[X].v[i]^ do
  108.     begin
  109.       glNormal3fv(@n);
  110.       glTexCoord2f(u,v);
  111.       glVertex3fv(@ver);
  112.     end;
  113.   glEnd;
  114. end;
  115. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 25, 2007 18:53 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ok .. habn fehler :D

es darf nicht
for X:=0 to MX-1 do
for Z:=0 to MZ-1 do

sonder n
for X:=0 to MX-2 do
for Z:=0 to MZ-2 do

heißen :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 19, 2007 18:53 
Offline
DGL Member

Registriert: Mi Mär 22, 2006 18:26
Beiträge: 17
Wohnort: Halle, Sachsen-Anhalt
Ich muss sagen, für diese typischen Testszenen ist das Licht ausreichend, aber wenn du dann später evtl. mit Räumen arbeitest, und den Specular Anteil nutzt, da finde ich die OpenGL Berechnung unrealistisch. Aber da gibt es genügend Quellen, die sich mit dem Thema auseinandersetzen, zumal man ja bei eigener Beleuchtung dynamische Schatten mit einbringen kann.

_________________
"Wer nicht arbeitet, kann auch nichts falsch machen"


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.008s | 14 Queries | GZIP : On ]