Cubemapping-Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Waveblue

Betreff: Cubemapping-Problem

BeitragMi, Aug 03, 2005 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ihr alle!

Mal wieder hat der Waveblue ein Problem!
Und zwar:
Ich habe ein Terrain erstellt und das wird lustig gewellt, ist also ein Meer.
Nun hab ich versucht, eine Cubemap zu erzeugen.
Hat aber nicht geklappt, rausgekommen ist das hier (das schwarze ist das Terrain!):
http://home.arcor.de/il.al.mue...wellen.jpg

Könnt ihr mir sagen, was da falsch ist, ohne das ich euch den Code poste?
(der is nämlich etwas chaotisch! Embarassed ,aber wenns gar nicht anders geht, stell ich ihn rein!)

MFG
Waveblue
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name
  • Zuletzt bearbeitet von Waveblue am Do, Aug 04, 2005 11:06, insgesamt einmal bearbeitet

Triton

BeitragDo, Aug 04, 2005 3:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne davon ne Ahnung zu haben - ich würde auf ne fehlende Cubemap tippen user posted image

Und keine Sorge, selbst wenn der Code chaotisch ist - wenn du ihn postest, kann er nur besser werden Wink
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Waveblue

BeitragDo, Aug 04, 2005 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Na gut, hab ihn aber jetzt ein bissl aufgeräumt:

BlitzBasic: [AUSKLAPPEN]
;																	Waveblue's blue Waves :)

;Erstellen eines Meeres mit schaukelnden Schiffen



Graphics3D 1024,768,32
SetBuffer BackBuffer() ;Muss man das hier kommentieren? Wink
SeedRnd MilliSecs()

Global wdb

Type shiptype

Field ship
Field mesh
Field x,y
Field p1,p2,p3,p4

End Type


AmbientLight 255,255,255
Global wellenhohe=50 ;gibt an, wie hoch die Wellen werden sollen!
Global wasserflaeche=8 ;Gibt an, wie viele Unterteilungen die Wellenfläche haben soll!
Global wassersteuer=1 ;Ist Wichtig, um die Performance des Wassers zu gewährleisten!


Global FXCamera=CreateCamera()

Global WaterMapTexture=CreateTexture(wasserflaeche,wasserflaeche,128+256+48)
CameraClsMode FXCamera,False,True
CameraProjMode FXCamera,0
CameraViewport FXCamera,0,0,wasserflaeche,wasserflaeche




Global wasserframe ;Steuervariable der Animation (zurzeit deaktiviert)!



Dim WaterY(wasserflaeche+1,wasserflaeche+1) ;Tabelle für Y-Werte der Wellen

;erstellen eines Wasser-Terrains
Global water=CreateTerrain(wasserflaeche)



EntityTexture water,WaterMapTexture


erstelle_meer


;laden wir nun 20 Schiffe
For a=0 To 20

schiff=LoadMesh(\"galleon.3ds\")
FlipMesh(schiff)

createship(schiff,Rand(100,1000),Rand(100,1000),Rand(0,360))
Next








Global cam=CreateCamera()
PositionEntity cam,0,150,0
TurnEntity cam,0,-45,0
loadskybox()
CameraRange cam,1,100000000
TerrainShading water,1
TerrainDetail water,2000

EntityFX water,1

Repeat



Cls

If KeyDown(200) Then MoveEntity cam,0,0,1
If KeyDown(208) Then MoveEntity cam,0,0,-1
If KeyDown(203) Then MoveEntity cam,-1,0,0
If KeyDown(205) Then MoveEntity cam,1,0,1

If KeyDown(17) Then TurnEntity cam,1,0,0
If KeyDown(31) Then TurnEntity cam,-1,0,0
If KeyDown(30) Then TurnEntity cam,0,1,0
If KeyDown(32) Then TurnEntity cam,0,-1,0
RotateEntity cam,EntityPitch(cam),EntityYaw(cam),0

;Kamerasteuerung


cubemap
updatewellen
updateships

UpdateWorld
RenderWorld

If KeyDown(2) Then WireFrame 1:Else WireFrame 0

If MilliSecs()-frameszeit=>1000 Then
frames=durchlauf
frameszeit=MilliSecs()
durchlauf=0
End If
durchlauf=durchlauf +1
Text 1,1,frames



Flip 0



Until KeyHit(1)
















;##################################################################################################

Function erstelle_meer()


For q = 0 To wasserflaeche
For j = 0 To wasserflaeche
WaterY(q,j) = Sin(q-j)*50000+10 ;das hier erstellt Wellen, ist aber quasi nur ein rumgespiele mit Sinus


Next
Next





ScaleEntity water,200,wellenhohe,200 ;....und ordentlich skalieren!
PositionEntity water,-500,0,-500


End Function

;##################################################################################################

Function updatewellen()
If KeyDown(79) Then wassersteuer=-1
If KeyDown(80) Then wassersteuer=1
Select wassersteuer
Case -1

For z = 0 To wasserflaeche-1 Step 2
For x = 0 To wasserflaeche-1 Step 1
high# = Sin(WaterY(z,x)*3)


ModifyTerrain water,x,z,(high#/2)+.5,False
WaterY(z,x) = WaterY(z,x) + 1
Next
Next

Case 1

For z = 1 To wasserflaeche-1 Step 2
For x = 0 To wasserflaeche-1 Step 1
high# = Sin(WaterY(z,x)*2)


ModifyTerrain water,x,z,(high#/2)+.5,False
WaterY(z,x) = WaterY(z,x) + 1
Next
Next
End Select
wassersteuer=wassersteuer*(-1)

EntityTexture water,watermaptexture



End Function


;#######################################################################

Function createship(mesh,x=0,z=0,rotate=0)

Local neu.shiptype

neu=New shiptype





neu\ship=CreatePivot()

neu\p1=CreatePivot(neu\ship)
PositionEntity neu\p1,10,0,+25

neu\p2=CreatePivot(neu\ship)
PositionEntity neu\p2,10,0,-10

neu\p3=CreatePivot(neu\ship)
PositionEntity neu\p3,-10,0,+25

neu\p4=CreatePivot(neu\ship)
PositionEntity neu\p4,-10,0,-10

neu\mesh=mesh
EntityParent neu\mesh,neu\ship

PositionEntity neu\ship,x,0,z
RotateEntity neu\ship,0,rotate,0




End Function

;###################################################################

Function updateships()

Local update.shiptype

For update=Each shiptype
PositionEntity update\mesh,EntityX(update\mesh,1),TerrainY(water,EntityX(update\mesh,1),0,EntityZ(update\mesh,1))+10,EntityZ(update\mesh,1),1




PositionEntity update\p1,EntityX(update\p1,1),TerrainY(water,EntityX(update\p1,1),0,EntityZ(update\p1,1)),EntityZ(update\p1,1),1
PositionEntity update\p2,EntityX(update\p2,1),TerrainY(water,EntityX(update\p2,1),0,EntityZ(update\p2,1)),EntityZ(update\p2,1),1
PositionEntity update\p3,EntityX(update\p3,1),TerrainY(water,EntityX(update\p3,1),0,EntityZ(update\p3,1)),EntityZ(update\p3,1),1
PositionEntity update\p4,EntityX(update\p4,1),TerrainY(water,EntityX(update\p4,1),0,EntityZ(update\p4,1)),EntityZ(update\p4,1),1

zx#=(EntityX( update\p2,True )+EntityX( update\p4,True ))/2
zx=zx-(EntityX( update\p1,True )+EntityX( update\p3,True ))/2
zy#=(EntityY( update\p2,True )+EntityY( update\p4,True ))/2
zy=zy-(EntityY( update\p1,True )+EntityY( update\p3,True ))/2
zz#=(EntityZ( update\p2,True )+EntityZ( update\p4,True ))/2
zz=zz-(EntityZ( update\p1,True )+EntityZ( update\p3,True ))/2
AlignToVector update\mesh,zx,zy,zz,1,0.1

zx#=(EntityX( update\p1,True )+EntityX( update\p2,True ))/2
zx=zx-(EntityX( update\p3,True )+EntityX( update\p4,True ))/2
zy#=(EntityY( update\p1,True )+EntityY( update\p2,True ))/2
zy=zy-(EntityY( update\p3,True )+EntityY(update\p4,True ))/2
zz#=(EntityZ( update\p1,True )+EntityZ( update\p2,True ))/2
zz=zz-(EntityZ( update\p3,True )+EntityZ( update\p4,True ))/2
AlignToVector update\mesh,zx,zy,zz,3,0.1

TurnEntity update\ship,0,Rnd(0,0.15),0
MoveEntity update\ship,0,0,-0.5
Next

End Function

Function LoadSkyBox( parent=0 )
m=CreateMesh(parent)

;front face
b=LoadBrush( \"sky_f.bmp\",49 )
s=CreateSurface( m,b )
AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;right face
b=LoadBrush( \"sky_l.bmp\",49 )
s=CreateSurface( m,b )
AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;back face
b=LoadBrush( \"sky_b.bmp\",49 )
s=CreateSurface( m,b )
AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;left face
b=LoadBrush( \"sky_r.bmp\",49 )
s=CreateSurface( m,b )
AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;top face
b=LoadBrush( \"sky_u.bmp\",49 )
s=CreateSurface( m,b )
AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;bottom face
b=LoadBrush( \"sky_d.bmp\",49 )
s=CreateSurface( m,b )
AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b

ScaleMesh m,5000,5000,5000
EntityOrder m,1
FlipMesh m
EntityFX m,1
PositionEntity m,0,300,0
Return m
End Function

Function cubemap()

CameraProjMode cam,0
CameraProjMode FXCamera,1

wdb=1-wdb






PositionEntity FXCamera,EntityX(cam),EntityY(water)+2,EntityZ(cam)



If wdb
;do left view
SetCubeFace WaterMapTexture,0
RotateEntity FXCamera,0,90,0
RenderWorld
CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
;do forward view
SetCubeFace WaterMapTexture,1
RotateEntity FXCamera,0,0,0
RenderWorld
CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
Else
;do right view
SetCubeFace WaterMapTexture,2
RotateEntity FXCamera,0,-90,0
RenderWorld
CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
;do backward view
SetCubeFace WaterMapTexture,3
RotateEntity FXCamera,0,180,0
RenderWorld
CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
EndIf
;do up view
SetCubeFace WaterMapTexture,4
RotateEntity FXCamera,-90,0,0
RenderWorld
CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)



;do down view
SetCubeFace WaterMapTexture,5
RotateEntity FXCamera,-90,0,180
RenderWorld
CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)




CameraProjMode FXCamera,0
CameraProjMode cam,1

End Function


Die Cubemap-Funktion stammt aus der Cubewater-demo! Wink

und wer sich das Disaster live ansehen will:
http://home.arcor.de/il.al.mue...ubemap.rar
Ich hoffe ihr könnt mir helfen! Sad

MFG
Waveblue
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group