Publié : sam. 15/oct./2005 10:14
Simpa 
J'ai tout en rouge en Additive aussi...
La diff entre ton code et celui de Fred, c'est que Fred utilise son Screen3DRequester qui ouvre un plein ecran en 16 alors que les ombres fonctionnent qu'en 32 en plein ecran.
Voilas ma ptite contrib aussi, j'essay de recreer l'ambience de mes Dem0xKx.
Les datas :
http://cederavic.serveurperso.com/Dem01k1.rar
Le code :
[Attention, je n'utilise pas la lib en Userlib, j'inclu directement la source!]

J'ai tout en rouge en Additive aussi...
La diff entre ton code et celui de Fred, c'est que Fred utilise son Screen3DRequester qui ouvre un plein ecran en 16 alors que les ombres fonctionnent qu'en 32 en plein ecran.
Voilas ma ptite contrib aussi, j'essay de recreer l'ambience de mes Dem0xKx.
Les datas :
http://cederavic.serveurperso.com/Dem01k1.rar
Le code :
[Attention, je n'utilise pas la lib en Userlib, j'inclu directement la source!]
Code : Tout sélectionner
#MaxTileX = 11
#MaxTileY = 11
#CameraSpeed = 3
#MatrixSize = 1024
IncludeFile "Screen3DRequester.pb"
IncludeFile "m3d_inc.pb"
DefType.f KeyX, KeyY, MouseX, MouseY
Global MouseState.b
ThunderT1.l
ThunderT2.l
ThunderT3.l
Thunder.l
NewList Rain.f()
Procedure LoadMap(File.s)
; Charge la map
OpenFile(0, File)
For y = 0 To #MaxTileX
For x = 0 To #MaxTileY
Tile = ReadLong()
M3D_TextureFacette(0, x, y, Tile)
If Tile <> 95
M3D_SetVertexHeight(0, x, y, 0)
EndIf
Next
Next
CloseFile(0)
M3D_UpdateMatrix(0)
EndProcedure
; Initialisations
If InitEngine3D() And InitSprite() And InitKeyboard() And InitMouse() And InitSound()
Add3DArchive("Data\", #PB_3DArchive_FileSystem)
M3D_Matrice_Init()
If Screen3DRequester()
AmbientColor(RGB(0,0,0))
; Chargements
LoadSound(0, "Data\rain3.wav")
LoadSound(1, "Data\rain.wav")
LoadTexture(1, "Tiles.png")
LoadTexture(2, "Tile_Detail.png")
LoadTexture(3, "Clouds.jpg")
LoadTexture(4, "Clouds2.png")
LoadTexture(5, "Clouds_g.png")
LoadTexture(6, "rain.jpg")
LoadTexture(7, "bark.png")
LoadTexture(8, "leaf.png")
; Creation des matrices
M3D_CreateMeshMatrix(0, 1, 1, 12, 12, 0)
M3D_RandomizeMatrix(0, 24)
M3D_PrepareMatrixTexture(0, 1, 8, 12)
LoadMap("test.map")
For x = 0 To 12
For z = 0 To 12
If x = 0 Or x = 12 Or z = 0 Or z = 12
M3D_SetVertexHeight(0, x, z, 0)
EndIf
Next
Next
M3D_UpdateMatrix(0)
; Chargement des mesh
LoadMesh(50, "Skydome.mesh")
LoadMesh(51, "oak_part1.mesh")
LoadMesh(52, "oak_part2.mesh")
; Creation des materiaux
CreateMaterial(1, TextureID(1))
AddMaterialLayer(1, TextureID(2), 1)
AddMaterialLayer(1, TextureID(5), 0)
MaterialShadingMode(1, #PB_Material_Gouraud)
MaterialAmbientColor(1, RGB(0, 0, 0))
ScrollMaterial(1, 0.05, 0.02, #PB_Material_Animated, 2)
CreateMaterial(2, TextureID(3))
AddMaterialLayer(2, TextureID(4), 1)
ScrollMaterial(2, 0.5, 0.07, #PB_Material_Animated)
ScrollMaterial(2, 0.2, 0.02, #PB_Material_Animated, 1)
DisableMaterialLighting(2, 1)
CreateMaterial(3, TextureID(6))
MaterialBlendingMode(3, #PB_Material_Add)
DisableMaterialLighting(3, 1)
CreateMaterial(4, TextureID(7))
CreateMaterial(5, TextureID(8))
MaterialBlendingMode(5, #PB_Material_AlphaBlend)
; Creation des entités
For x = 0 To 5
For z = 0 To 5
t + 1
CreateEntity (t, MeshID(0), MaterialID(1))
ScaleEntity(t, #MatrixSize, 1, #MatrixSize)
EntityLocate(t, x * #MatrixSize, 0, z * #MatrixSize)
EntityRenderMode(t, 0)
Next
Next
CreateEntity(50, MeshID(50), MaterialID(2))
EntityRenderMode(50, 0)
ScaleEntity(50, 10, 10, 10)
For tTree = 100 To 160 Step 2
CreateEntity(tTree, MeshID(51), MaterialID(4))
CreateEntity(tTree + 1, MeshID(52), MaterialID(5))
ScaleEntity(tTree, 3, 3.2, 3)
ScaleEntity(tTree + 1, 3, 3.2, 3)
EntityRenderMode(tTree + 1, 0)
Next
; Creation des billboard pour l'effet de pluie
CreateBillboardGroup(0, MaterialID(3), 64, 64)
For t = 0 To 100
AddElement(Rain())
Rain() = Random(150)
rx.f = (Random(29900) - 14800) / 100
rz.f = (Random(29900) - 14800) / 100
If rx > -5 And rx < 5 : rx = 2048 : EndIf
If rz > -5 And rz < 5 : rz = 2048 : EndIf
AddBillboard(t, 0, rx, Rain(), rz)
Next
; La lumiere...
CreateLight(0, RGB(110,125,170), 2.5 * 1024, 1024 ,2.5 * 1024)
; Config de la camera
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,2.5 * 1024,50,2.5 * 1024)
CameraRange(0, 1, #MatrixSize * 2 )
Fog(RGB(60, 80, 130), 10, 300, 500)
; Placement des arbres
For tTree = 100 To 160 Step 2
tx.f = Random(#MatrixSize * 5)
tz.f = Random(#MatrixSize * 5)
MapX = Round(tx / #MatrixSize, 0)
MapZ = Round(tz / #MatrixSize, 0)
Height.f = M3D_GetGroundHeight(0, (tx + 150 - MapX * #MatrixSize) / #MatrixSize, (tz - MapZ * #MatrixSize) / #MatrixSize)
EntityLocate(tTree, tx, Height - 2, tz)
EntityLocate(tTree + 1, tx, Height - 2, tz)
r = Random(360)
RotateEntity(tTree, r, 0, 0)
RotateEntity(tTree + 1, r, 0, 0)
Next
; Init Thunder Effect
ThunderT1 = GetTickCount_()
ThunderT3 = Random(5000) + 4000
SoundVolume(0, 70)
PlaySound(0, 1)
Repeat
Screen3DEvents()
ClearScreen(0, 0, 0)
; Mouvement
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
If KeyboardReleased(#PB_Key_L)
LoadMap("test.map")
EndIf
If KeyboardReleased(#PB_Key_Space)
If MouseState = 0
ReleaseMouse(1)
MouseState = 1
Else
ReleaseMouse(0)
MouseState = 0
EndIf
EndIf
EndIf
If MouseState = 0
If ExamineMouse()
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
EndIf
EndIf
; Rain effect
tRain = 0
ForEach Rain()
Rain() - 4
BillboardLocate(tRain, 0, BillboardX(tRain, 0), Rain(), BillboardZ(tRain, 0))
If BillboardY(tRain, 0) < CameraY(0) - 128
Rain() = Random(150)
rx.f = (Random(40000) - 20000) / 100
rz.f = (Random(40000) - 20000) / 100
BillboardLocate(tRain, 0, rx, Rain(), rz)
EndIf
tRain + 1
Next
BillboardGroupLocate(0, CameraX(0), CameraY(0), CameraZ(0))
RotateBillboardGroup(0, -0.2, 0, 0.03)
; Positionement camera, lumiere et skydome
MapX = Round(CameraX(0) / #MatrixSize, 0)
MapZ = Round(CameraZ(0) / #MatrixSize, 0)
Height.f = M3D_GetGroundHeight(0, (CameraX(0) - MapX * #MatrixSize) / #MatrixSize, (CameraZ(0) - MapZ * #MatrixSize) / #MatrixSize)
RotateCamera(0, MouseX, MouseY, RollZ)
MoveCamera (0, KeyX, -CameraY(0)+Height+32, KeyY)
LightLocate(0, CameraX(0), CameraY(0) + 32, CameraZ(0))
EntityLocate(50, CameraX(0), 0, CameraZ(0))
RenderWorld()
; Thunder Effect
ThunderT2 = GetTickCount_() - ThunderT1
If ThunderT2 >= ThunderT3
ThunderT1 = GetTickCount_()
ThunderT3 = Random(10000) + 20000
Thunder = 1
PlaySound(1, 0)
EndIf
Select Thunder
Case 0
Case 1
ClearScreen(255, 255, 255)
AmbientColor(RGB(255, 255, 255))
MaterialAmbientColor(1, RGB(255, 255, 255))
Thunder + 1
Case 2
AmbientColor(RGB(255, 255, 255))
MaterialAmbientColor(1, RGB(255, 255, 255))
Thunder + 1
Case 3
ClearScreen(0, 0, 0)
AmbientColor(RGB(0, 0, 0))
MaterialAmbientColor(1, RGB(0, 0, 0))
Thunder + 1
Case 5
AmbientColor(RGB(0, 0, 0))
MaterialAmbientColor(1, RGB(0, 0, 0))
Thunder + 1
Case 6
AmbientColor(RGB(255, 255, 255))
MaterialAmbientColor(1, RGB(255, 255, 255))
Thunder + 1
Case 8
AmbientColor(RGB(0, 0, 0))
MaterialAmbientColor(1, RGB(0, 0, 0))
Thunder + 1
Case 9
AmbientColor(RGB(255, 255, 255))
MaterialAmbientColor(1, RGB(255, 255, 255))
Thunder + 1
Case 13
AmbientColor(RGB(255, 255, 255))
MaterialAmbientColor(1, RGB(255, 255, 255))
Thunder + 1
Case 14
AmbientColor(RGB(255, 255, 255))
MaterialAmbientColor(1, RGB(255, 255, 255))
Thunder + 1
Case 15
AmbientColor(RGB(0, 0, 0))
MaterialAmbientColor(1, RGB(0, 0, 0))
Thunder + 1
Case 16
AmbientColor(RGB(255, 255, 255))
MaterialAmbientColor(1, RGB(255, 255, 255))
Thunder + 1
Case 20
AmbientColor(RGB(0, 0, 0))
MaterialAmbientColor(1, RGB(0, 0, 0))
Thunder = 0
Default
Thunder + 1
EndSelect
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End