实例介绍
【实例截图】

【源码目录】
2731_Delphi.OpenGL编的3D迷宫带地图编辑器
├── 3D迷宫.exe
├── demo1.map
├── demo2.map
├── door.bmp
├── roomceiling.bmp
├── roomfloor.bmp
├── stonefloor.jpg
├── wall2.bmp
├── wallBetter.bmp
├── wallBetter.jpg
├── www.delphifans.com.nfo
├── 说明.txt
├── 源代码
│ ├── 3D迷宫
│ │ ├── OpenGLApp.cfg
│ │ ├── OpenGLApp.dof
│ │ ├── OpenGLApp.dpr
│ │ ├── OpenGLApp.res
│ │ ├── Textures.dcu
│ │ ├── Textures.pas
│ │ ├── ceiling.jpg
│ │ ├── demo1.map
│ │ ├── door.bmp
│ │ ├── floor.bmp
│ │ ├── lift.bmp
│ │ ├── roomceiling.bmp
│ │ ├── roomceiling.jpg
│ │ ├── roomfloor.bmp
│ │ ├── roomfloor.jpg
│ │ ├── roomwall.jpg
│ │ ├── stonefloor.jpg
│ │ ├── wall.bmp
│ │ ├── wall2.bmp
│ │ ├── wallBetter.bmp
│ │ ├── wallBetter.jpg
│ │ ├── wallBetter1.bmp
│ │ └── walls.jpg
│ └── 地图编辑器
│ ├── Project1.cfg
│ ├── Project1.dof
│ ├── Project1.dpr
│ ├── Project1.res
│ ├── Unit1.dcu
│ ├── Unit1.ddp
│ ├── Unit1.dfm
│ ├── Unit1.pas
│ ├── Unit2.dcu
│ ├── Unit2.ddp
│ ├── Unit2.dfm
│ ├── Unit2.pas
│ ├── Unit3.dcu
│ ├── Unit3.ddp
│ ├── Unit3.dfm
│ ├── Unit3.pas
│ └── demo.map
└── 地图编辑器.exe
3 directories, 53 files
【核心代码】
function LoadJPGTexture(Filename: String; var Texture: GLuint; LoadFromResource : Boolean): Boolean;
var
Data : Array of LongWord;
W, Width : Integer;
H, Height : Integer;
BMP : TBitmap;
JPG : TJPEGImage;
C : LongWord;
Line : ^LongWord;
ResStream : TResourceStream; // used for loading from resource
begin
result :=FALSE;
JPG:=TJPEGImage.Create;
if LoadFromResource then // Load from resource
begin
try
ResStream := TResourceStream.Create(hInstance, PChar(copy(Filename, 1, Pos('.', Filename)-1)), 'JPEG');
JPG.LoadFromStream(ResStream);
ResStream.Free;
except on
EResNotFound do
begin
MessageBox(0, PChar('File not found in resource - ' Filename), PChar('JPG Texture'), MB_OK);
Exit;
end
else
begin
MessageBox(0, PChar('Couldn''t load JPG Resource - "' Filename '"'), PChar('BMP Unit'), MB_OK);
Exit;
end;
end;
end
else
begin
try
JPG.LoadFromFile(Filename);
except
MessageBox(0, PChar('Couldn''t load JPG - "' Filename '"'), PChar('BMP Unit'), MB_OK);
Exit;
end;
end;
// Create Bitmap
BMP:=TBitmap.Create;
BMP.pixelformat:=pf32bit;
BMP.width:=JPG.width;
BMP.height:=JPG.height;
BMP.canvas.draw(0,0,JPG); // Copy the JPEG onto the Bitmap
// BMP.SaveToFile('D:\test.bmp');
Width :=BMP.Width;
Height :=BMP.Height;
SetLength(Data, Width*Height);
For H:=0 to Height-1 do
Begin
Line :=BMP.scanline[Height-H-1]; // flip JPEG
For W:=0 to Width-1 do
Begin
c:=Line^ and $FFFFFF; // Need to do a color swap
Data[W (H*Width)] :=(((c and $FF) shl 16) (c shr 16) (c and $FF00)) or $FF000000; // 4 channel.
inc(Line);
End;
End;
BMP.free;
JPG.free;
Texture :=CreateTexture(Width, Height, GL_RGBA, addr(Data[0]));
result :=TRUE;
end;
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论