Code archives/3D Graphics - Mesh/OPIS2
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
I made this to make things easier for me. It takes a color map ("OPI.BMP") runs through all the pixels and traps the green dots, and translates their position into a new blitz file. Then I include the file it made, use the replace tool in the EDIT menu. to replace "replc" with my basic tree. The only problem is the height. It uses terrainheight function but that doesn't work well with scales. So thats why its not in the toolbox... figure it out. Oh yah, I used this in my project Kartoon. Check it out in the worklog area. See that it works ;) | |||||
; You need a few files to use this. ; First a "ground.bmp" texture file: ; It's only used in the test mode. ; Second a heightmap by the name of "level.bmp" ; Third a water.bmp texture: for the water. ; And lastly the OPI.BMP file: I just copy the heightmap ; and put some green dots where I need to. It's easier. Graphics 640,480,16,0 AppTitle "Information for OPIS" scales%=Input$("Map Scale:") Graphics3D 800,600,32,0 AppTitle "OPIS version 2" SetBuffer BackBuffer() Const obj=1,scn=2 Global opi=LoadImage("opi.bmp") Global gx,gy,clrr,clrg,clrb Global ltimer$ cam=CreateCamera() PositionEntity cam,0,100,0 EntityType cam,obj EntityRadius cam,10 light=CreateLight() RotateEntity light,90,0,0 land=LoadTerrain("level.bmp") ScaleEntity land,scales,95,scales TerrainDetail land,8000 EntityType land,scn water=CreatePlane() PositionEntity water,0,15.5,0 watertex=LoadBrush("water.bmp",2,6,6) BrushAlpha watertex,.5 PaintEntity water,watertex ground=LoadTexture("ground.bmp",512) EntityTexture land,ground ScaleTexture ground,512,512 tree=CreateCylinder() ScaleEntity tree,4,25,4 EntityColor tree,0,0,320 EntityType tree,scn imgsize=ImageWidth(opi) temp=WriteFile("temperary.tmp") WriteLine(temp,";Use the replace tool in Blitz3D to replace 'replc' with the tree") WriteLine(temp,"Global imgsize="+imgsize) SetBuffer FrontBuffer() For gx=0 To imgsize For gy=0 To imgsize DrawImage(opi,0,0) GetColor gx,gy clrr=ColorRed():clrg=ColorGreen():clrb=ColorBlue() posx=gx*scales posy=(TerrainSize(land)*scales)-(gy*scales) If clrr=0 And clrg=255 And clrb=0 trees=CopyEntity(tree) ScaleEntity trees,4,25,4 EntityColor trees,0,0,320 EntityType trees,scn PositionEntity trees,posx,TerrainHeight(land,posx,posy)+50,posy,1 WriteLine(temp,"tree=CopyEntity(replc)") WriteLine(temp,"PositionEntity tree,"+posx+",TerrainHeight(land,"+posx+","+posy+"),"+posy+",1") EndIf If gx<100 Then ltimer$="|||||" If gx>100 And gx<150 Then ltimer$="||||||||||" If gx>150 And gx<200 Then ltimer$="|||||||||||||||" If gx>200 And gx<250 Then ltimer$="||||||||||||||||||||" If gx>250 And gx<300 Then ltimer$="|||||||||||||||||||||||||" If gx>300 And gx<350 Then ltimer$="||||||||||||||||||||||||||||||" If gx>350 And gx<400 Then ltimer$="|||||||||||||||||||||||||||||||||||" If gx>400 And gx<450 Then ltimer$="||||||||||||||||||||||||||||||||||||||||" If gx>450 And gx<500 Then ltimer$="|||||||||||||||||||||||||||||||||||||||||||||" If gx>500 And gx<550 Then ltimer$="|||||||||||||||||||||||||||||||||||||||||||||||||| Done" Text 10,575,"Image Size:"+imgsize Text 10,585,"Loading..."+ltimer$ Next Next SetBuffer BackBuffer() CloseFile(temp) Color 255,255,255 Collisions obj,scn,2,3 While Not KeyHit(1) If KeyDown(203) Then TurnEntity cam,0,1,0 If KeyDown(205) Then TurnEntity cam,0,-1,0 If KeyDown(200) Then MoveEntity cam,0,0,1 If KeyDown(208) Then MoveEntity cam,0,0,-1 If KeyHit(59) CopyFile "temperary.tmp","OPIS.bb" End If UpdateWorld TranslateEntity cam,0,-.1,0 RenderWorld Text 10,10,"Terrain Width: "+TerrainSize(land) Text 10,25,"Position: "+EntityX(cam,1)+","+EntityY(cam,1)+","+EntityZ(cam,1) Text 10,40,"Terrian Height: "+TerrainHeight(land,EntityX(cam,1),EntityZ(cam,1))*512 Flip Wend End |
Comments
| ||
That's great stuff you got there!!! Hurray for the time saver!!! You guys don't pay much attention. |
Code Archives Forum