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

Aktuelle Zeit: Fr Jul 18, 2025 11:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Landschafts Problem
BeitragVerfasst: Mi Jan 07, 2004 23:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 07, 2004 23:14
Beiträge: 42
Ich habe eine Landschaft gezeichnet, die aus vielen Rechtecken besteht. Jedes Quadrat bekommt nun per Alpha_Blending vier Texturen, von denen jeweil nur eine Ecke zu sehen ist. Allerdings sind zwischen den Rechtecken nun schwarze Ränder, die ich nicht wegbekomme.
Wenn ich aber nur eine Textur zeichne funktioniert es.
Hier mal der Code:

Code:
  1.  
  2. procedure ZeichneBoden;
  3. var X,Y:Integer;
  4.     XteTextur,YteTextur:Byte;
  5.     BodenTexturBild:Byte;
  6.     BodenTexturTeil:Byte;
  7.     SObjektNr:integer;
  8. begin
  9.  
  10.  with Boden do  //Falls etwas unmögliches sichbar sein soll berichtigen
  11.  begin
  12.   if Sichtbar.x < 0 then Sichtbar.x := 0;
  13.   if Sichtbar.y < 0 then Sichtbar.y := 0;
  14.  
  15.   if  Sichtbar.Height > Height then Sichtbar.Height := Height;
  16.   if  Sichtbar.Width  > Width  then Sichtbar.Width  := Width;
  17.   if  Sichtbar.Height + Sichtbar.y > Height then Sichtbar.y := Height - Sichtbar.Height;
  18.   if  Sichtbar.Width  + Sichtbar.x > Width then Sichtbar.x :=  Width  - Sichtbar.Width;
  19.  end;
  20.  
  21.  SObjektNr := -1;
  22.   {Farben auf normal stellen}
  23.   glcolor4f(1,1,1,1);
  24.   {Richtig hinrücken}
  25.   gltranslatef(-Boden.Sichtbar.width/2/100*CFeldWidth,-Boden.Sichtbar.height/5/100*CFeldHeight,0);
  26.  
  27.   glEnable(GL_BLEND);
  28.   glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);
  29.  
  30.  for X := 0 to  Boden.Sichtbar.Width  -2 do
  31.  for Y := 0 to  Boden.Sichtbar.Height -2 do
  32.  begin
  33.  SObjektNr := SObjektNr +1;
  34.  glloadname(SObjektNr);
  35.  
  36. {0,0}
  37.  BodenTexturBild := (Boden.Aussehen[(x + Boden.Sichtbar.x),(y + Boden.Sichtbar.y)] div 16) ;
  38.  BodenTexturTeil := (Boden.Aussehen[(x + Boden.Sichtbar.x),(y + Boden.Sichtbar.y)] mod 16) ;
  39.  BodenTextur[BodenTexturBild].Bind;
  40.  
  41.  XteTextur := (BodenTexturTeil mod 4);
  42.  YteTextur := (BodenTexturTeil div 4);
  43.  
  44.   glbegin(GL_Quads);
  45.   glcolor4f(1,1,1,1);
  46.    glTexCoord2f(XteTextur/4,YteTextur/4);
  47.    glvertex3f((x  )/100*CFeldWidth,(y  )/100*CFeldHeight,0.01+Boden.PointHeight[x  +Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);
  48.    glcolor4f(1,1,1,0);
  49.    glTexCoord2f(XteTextur/4+0.25,YteTextur/4);
  50.    glvertex3f((x+1)/100*CFeldWidth,(y  )/100*CFeldHeight,0.01+Boden.PointHeight[x+1+Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);
  51.  
  52.    glTexCoord2f(XteTextur/4+0.25,YteTextur/4+0.25);
  53.    glvertex3f((x+1)/100*CFeldWidth,(y+1)/100*CFeldHeight,0.01+Boden.PointHeight[x+1+Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  54.  
  55.    glTexCoord2f(XteTextur/4,YteTextur/4+0.25);
  56.    glvertex3f((x  )/100*CFeldWidth,(y+1)/100*CFeldHeight,0.01+Boden.PointHeight[x  +Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  57.   glend();
  58.  
  59.  
  60.  
  61. {1,0}
  62.  BodenTexturBild := (Boden.Aussehen[(x + Boden.Sichtbar.x +1),(y + Boden.Sichtbar.y)] div 16) ;
  63.  BodenTexturTeil := (Boden.Aussehen[(x + Boden.Sichtbar.x +1),(y + Boden.Sichtbar.y)] mod 16) ;
  64.  BodenTextur[BodenTexturBild].Bind;
  65.  
  66.  XteTextur := (BodenTexturTeil mod 4);
  67.  YteTextur := (BodenTexturTeil div 4);
  68.  
  69.   glbegin(GL_Quads);
  70.  
  71.    glTexCoord2f(XteTextur/4,YteTextur/4);
  72.    glvertex3f((x  )/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500)  ;
  73.   glcolor4f(1,1,1,1);
  74.    glTexCoord2f(XteTextur/4+0.25,YteTextur/4);
  75.    glvertex3f((x+1)/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500)  ;
  76.   glcolor4f(1,1,1,0);
  77.  
  78.    glTexCoord2f(XteTextur/4+0.25,YteTextur/4+0.25);
  79.    glvertex3f((x+1)/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500)  ;
  80.  
  81.    glTexCoord2f(XteTextur/4,YteTextur/4+0.25);
  82.    glvertex3f((x  )/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500 ) ;
  83.   glend();
  84.  
  85.  
  86. {1,1}
  87.  BodenTexturBild := (Boden.Aussehen[(x + Boden.Sichtbar.x+1),(y + Boden.Sichtbar.y+1)] div 16) ;
  88.  BodenTexturTeil := (Boden.Aussehen[(x + Boden.Sichtbar.x+1),(y + Boden.Sichtbar.y+1)] mod 16) ;
  89.  BodenTextur[BodenTexturBild].Bind;
  90.  
  91.  XteTextur := (BodenTexturTeil mod 4);
  92.  YteTextur := (BodenTexturTeil div 4);
  93.  
  94.   glbegin(GL_Quads);
  95.  
  96.    glTexCoord2f(XteTextur/4,YteTextur/4);
  97.    glvertex3f((x  )/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);
  98.  
  99.    glTexCoord2f(XteTextur/4+0.25,YteTextur/4);
  100.    glvertex3f((x+1)/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);
  101.   glcolor4f(1,1,1,1);
  102.    glTexCoord2f(XteTextur/4+0.25,YteTextur/4+0.25);
  103.    glvertex3f((x+1)/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  104.   glcolor4f(1,1,1,0);
  105.  
  106.    glTexCoord2f(XteTextur/4,YteTextur/4+0.25);
  107.    glvertex3f((x  )/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  108.   glend();
  109.  
  110.  
  111. {0,1}
  112.  BodenTexturBild := (Boden.Aussehen[(x + Boden.Sichtbar.x),(y + Boden.Sichtbar.y+1)] div 16) ;
  113.  BodenTexturTeil := (Boden.Aussehen[(x + Boden.Sichtbar.x),(y + Boden.Sichtbar.y+1)] mod 16) ;
  114.  BodenTextur[BodenTexturBild].Bind;
  115.  
  116.  XteTextur := (BodenTexturTeil mod 4);
  117.  YteTextur := (BodenTexturTeil div 4);
  118.  
  119.   glbegin(GL_Quads);
  120.  
  121.    glTexCoord2f(XteTextur/4,YteTextur/4);
  122.    glvertex3f((x  )/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);
  123.  
  124.    glTexCoord2f(XteTextur/4+0.25,YteTextur/4);
  125.    glvertex3f((x+1)/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);
  126.  
  127.    glTexCoord2f(XteTextur/4+0.25,YteTextur/4+0.25);
  128.    glvertex3f((x+1)/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  129.   glcolor4f(1,1,1,1);
  130.    glTexCoord2f(XteTextur/4,YteTextur/4+0.25);
  131.    glvertex3f((x  )/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  132.   glend();
  133.  
  134. end;
  135. gldisable(gl_Blend);
  136. end;
  137.  
[/code]


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2004 00:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Die Qualität des Screenshots ist leider viel zu schlecht, als das man darauf wirklich was erkennen könnte. Aber du bist dir ja im klaren drüber, das Blending nicht per-Fragment arbeitet, oder? D.h. das du für Blending auf die Zeichenreihenfolge achten musst, und zwar Back-To-Front, da du ansonsten keine korrekten Ergebnisse erzielst. Wenn du mit aktivem Blending z.B. Fläche A vor (im Sinne von niedrigerem Z-Wert) Fläche B zeichnest, und dann Fläche B (die weiter weg ist), dann siehst du Fläche B nicht, weil diese vom Z-Test her nicht gezeichnet wird. Hier muss man also sortieren.
Wenns daran nicht liegt, dann könnte es nur noch daher kommen, dass du die Rechtecke mit nem fehlerhaften Abstand zeichnest.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


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


Wer ist online?

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