Autor Beitrag
flowstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 123

WinME
D6 Enterprise
BeitragVerfasst: Mi 31.12.03 17:44 
Ich habe eine Landschaft gezeichnet. Es werden immer pro "Feld" 4 Texturen auf dieselbe stelle gezeichnet und jeweils nur eine Ecke gezeichnet. das mache ich mit Blending. Nun sind zwischen 2 "Feldern" aber schwarze Ränder. Wenn ich nur eine Textur zeichne sind diese Ränder nnicht da.
Hier mal der Quellcode:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
procedure ZeichneBoden;
var X,Y:Integer;
    XteTextur,YteTextur:Byte;
    BodenTexturBild:Byte;
    BodenTexturTeil:Byte;
    SObjektNr:integer;
begin

 with Boden do  //Falls etwas unmögliches sichbar sein soll berichtigen
 begin
  if Sichtbar.x < 0 then Sichtbar.x := 0;
  if Sichtbar.y < 0 then Sichtbar.y := 0;

  if  Sichtbar.Height > Height then Sichtbar.Height := Height;
  if  Sichtbar.Width  > Width  then Sichtbar.Width  := Width;
  if  Sichtbar.Height + Sichtbar.y > Height then Sichtbar.y := Height - Sichtbar.Height;
  if  Sichtbar.Width  + Sichtbar.x > Width then Sichtbar.x :=  Width  - Sichtbar.Width;
 end;

 SObjektNr := -1;
  {Farben auf normal stellen}
  glcolor4f(1,1,1,1);
  {Richtig hinrücken}
  gltranslatef(-Boden.Sichtbar.width/2/100*CFeldWidth,-Boden.Sichtbar.height/5/100*CFeldHeight,0);

  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);

 for X := 0 to  Boden.Sichtbar.Width  -2 do
 for Y := 0 to  Boden.Sichtbar.Height -2 do
 begin
 SObjektNr := SObjektNr +1;
 glloadname(SObjektNr);

{0,0}
 BodenTexturBild := (Boden.Aussehen[(x + Boden.Sichtbar.x),(y + Boden.Sichtbar.y)] div 16) ;
 BodenTexturTeil := (Boden.Aussehen[(x + Boden.Sichtbar.x),(y + Boden.Sichtbar.y)] mod 16) ;
 BodenTextur[BodenTexturBild].Bind;

 XteTextur := (BodenTexturTeil mod 4);
 YteTextur := (BodenTexturTeil div 4);

  glbegin(GL_Quads);
  glcolor4f(1,1,1,1);
   glTexCoord2f(XteTextur/4,YteTextur/4);
   glvertex3f((x  )/100*CFeldWidth,(y  )/100*CFeldHeight,0.01+Boden.PointHeight[x  +Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);
   glcolor4f(1,1,1,0);
   glTexCoord2f(XteTextur/4+0.25,YteTextur/4);
   glvertex3f((x+1)/100*CFeldWidth,(y  )/100*CFeldHeight,0.01+Boden.PointHeight[x+1+Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);

   glTexCoord2f(XteTextur/4+0.25,YteTextur/4+0.25);
   glvertex3f((x+1)/100*CFeldWidth,(y+1)/100*CFeldHeight,0.01+Boden.PointHeight[x+1+Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);

   glTexCoord2f(XteTextur/4,YteTextur/4+0.25);
   glvertex3f((x  )/100*CFeldWidth,(y+1)/100*CFeldHeight,0.01+Boden.PointHeight[x  +Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  glend();



{1,0}
 BodenTexturBild := (Boden.Aussehen[(x + Boden.Sichtbar.x +1),(y + Boden.Sichtbar.y)] div 16) ;
 BodenTexturTeil := (Boden.Aussehen[(x + Boden.Sichtbar.x +1),(y + Boden.Sichtbar.y)] mod 16) ;
 BodenTextur[BodenTexturBild].Bind;

 XteTextur := (BodenTexturTeil mod 4);
 YteTextur := (BodenTexturTeil div 4);

  glbegin(GL_Quads);

   glTexCoord2f(XteTextur/4,YteTextur/4);
   glvertex3f((x  )/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500)  ;
  glcolor4f(1,1,1,1);
   glTexCoord2f(XteTextur/4+0.25,YteTextur/4);
   glvertex3f((x+1)/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500)  ;
  glcolor4f(1,1,1,0);

   glTexCoord2f(XteTextur/4+0.25,YteTextur/4+0.25);
   glvertex3f((x+1)/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500)  ;

   glTexCoord2f(XteTextur/4,YteTextur/4+0.25);
   glvertex3f((x  )/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500 ) ;
  glend();


{1,1}
 BodenTexturBild := (Boden.Aussehen[(x + Boden.Sichtbar.x+1),(y + Boden.Sichtbar.y+1)] div 16) ;
 BodenTexturTeil := (Boden.Aussehen[(x + Boden.Sichtbar.x+1),(y + Boden.Sichtbar.y+1)] mod 16) ;
 BodenTextur[BodenTexturBild].Bind;

 XteTextur := (BodenTexturTeil mod 4);
 YteTextur := (BodenTexturTeil div 4);

  glbegin(GL_Quads);

   glTexCoord2f(XteTextur/4,YteTextur/4);
   glvertex3f((x  )/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);

   glTexCoord2f(XteTextur/4+0.25,YteTextur/4);
   glvertex3f((x+1)/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);
  glcolor4f(1,1,1,1);
   glTexCoord2f(XteTextur/4+0.25,YteTextur/4+0.25);
   glvertex3f((x+1)/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  glcolor4f(1,1,1,0);

   glTexCoord2f(XteTextur/4,YteTextur/4+0.25);
   glvertex3f((x  )/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  glend();


{0,1}
 BodenTexturBild := (Boden.Aussehen[(x + Boden.Sichtbar.x),(y + Boden.Sichtbar.y+1)] div 16) ;
 BodenTexturTeil := (Boden.Aussehen[(x + Boden.Sichtbar.x),(y + Boden.Sichtbar.y+1)] mod 16) ;
 BodenTextur[BodenTexturBild].Bind;

 XteTextur := (BodenTexturTeil mod 4);
 YteTextur := (BodenTexturTeil div 4);

  glbegin(GL_Quads);

   glTexCoord2f(XteTextur/4,YteTextur/4);
   glvertex3f((x  )/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);

   glTexCoord2f(XteTextur/4+0.25,YteTextur/4);
   glvertex3f((x+1)/100*CFeldWidth,(y  )/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y  +Boden.Sichtbar.y]/500);

   glTexCoord2f(XteTextur/4+0.25,YteTextur/4+0.25);
   glvertex3f((x+1)/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x+1+Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  glcolor4f(1,1,1,1);
   glTexCoord2f(XteTextur/4,YteTextur/4+0.25);
   glvertex3f((x  )/100*CFeldWidth,(y+1)/100*CFeldHeight,Boden.PointHeight[x  +Boden.Sichtbar.x,y+1+Boden.Sichtbar.y]/500);
  glend();

end;
gldisable(gl_Blend);
end;


Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von flowstar am Sa 03.01.04 17:16, insgesamt 1-mal bearbeitet
flowstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 123

WinME
D6 Enterprise
BeitragVerfasst: Sa 03.01.04 17:04 
Ich hab jetzt rausgefunden, dass es an dem Alpha Blending liegt.

ausblenden Delphi-Quelltext
1:
glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);					


Aber was kann ich dagegen machen?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 03.01.04 17:09 
Hallo!

Bitte ändere den Titel des Topics da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Delphi-Forum.de Richtlinien:

Richtlinien hat folgendes geschrieben:

1.1 Beiträge
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]

Einfach oben bei deinem ersten Beitrag auf "Edit" klicken und den Titel ändern. Dank Dir!

Gruß Peter Lustig

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 03.01.04 17:50 
Schwarze Ränder hatte ich mal wegen der Texturgröße. Es ist immer am Besten, wenn Texturhöhe und -breite 2^n sind, da nur wenige GraKas mit anderen Größen zurechtkommen.
flowstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 123

WinME
D6 Enterprise
BeitragVerfasst: Sa 03.01.04 19:38 
ne daran liegts leider nich die Texturen haben eine breite und höhe 2^n.
Die Landschaft sieht do Schachbrettartig aus, als ob die Rechtecke nicht direkt nebeneinander liegen würden.
Es muss irgendwas mit dem Blending zu tun haben, denn wenn ich es ohne blending mache und nur eine Textur übereinander zeichne funktioniert es.