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 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; glcolor4f(1,1,1,1); 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);
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();
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();
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();
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; |