SoftPixel Engine Wrapper - jetzt mit PhysicsEngine!
Release: v.2.1.4-beta

Wieder ein kleines neues Release - jaja, es geht voran, wenn auch nur langsam
Eine Funktion wurde umbenannt: EntityCullMode -> MeshCullMode
An sonsten sind die Funktionen "CopyImage" und "CopyTexture" hinzu gekommen.
Ein weiteres Beispiel (InstancingEmulation) mit 25*25 animierten "dragon.md2" modellen. 50*50 ist auch noch gut machbar, mit standard B3D wäre man da schon lange an der Grenze.
Und ein paar interne Bug fixes natürlich. Außerdem sollten Funktionen wie "VertexCoords", "CreateSurface" & co. jetzt deutlich stabieler sein.
Zudem wurde in der Engine selbst der X mesh loader weiter entwickelt.

Eine Funktion wurde umbenannt: EntityCullMode -> MeshCullMode
An sonsten sind die Funktionen "CopyImage" und "CopyTexture" hinzu gekommen.
Ein weiteres Beispiel (InstancingEmulation) mit 25*25 animierten "dragon.md2" modellen. 50*50 ist auch noch gut machbar, mit standard B3D wäre man da schon lange an der Grenze.
Und ein paar interne Bug fixes natürlich. Außerdem sollten Funktionen wie "VertexCoords", "CreateSurface" & co. jetzt deutlich stabieler sein.
Zudem wurde in der Engine selbst der X mesh loader weiter entwickelt.
Release: v.2.1.3-beta

Heute habe ich den Wrapper 2.1.3-beta veröffentlicht. SPE interne Dinge wurden überarbeitet, darunter folgendes:
- 3DS Mesh Loader, der nun korrekt funktionieren sollte. Allerdings unterstützt er derzeit noch keinerlei Animationen - diese sollen aber später noch hinzugefügt werden.
- Der X Mesh Loader wurde überarbeitet, ist allerdings noch nicht fertig.
- TGA Image Loader lädt nun korrekt (danke an "P0br3" aus dem SPE Forum für den Bug Report)
Wrapper spezifisch wurde folgendes aktuallisiert:
- AddVertex sollte nun nicht mehr ohne Weiteres Fehler verursachen.
- RotateImage wirkt sich nun schon mal auf "DrawImage" aus.
Sonstiges:
- Geometry Shader für OpenGL 3.3 verfügbar.
- "UseDirect3D11" Funktion wurde hinzugefügt, kann allerdings noch nicht genutzt werden (aus verschiedenen Gründen - muss mir erst noch über legen, wie man in B3D die DX11 API gut nutzen kann, denn im Shader hat sich da einiges geändert).
Was die Shader anbelangt, so hat sich da die API im Wrapper ein klein wenig verändert. Die Beispiele wurden natürlich alle auf die aktuelle Version angepasst, dort könnt ihr also sehen, wie man nun mit Shadern arbeitet
Gruß,
Lukas
- 3DS Mesh Loader, der nun korrekt funktionieren sollte. Allerdings unterstützt er derzeit noch keinerlei Animationen - diese sollen aber später noch hinzugefügt werden.
- Der X Mesh Loader wurde überarbeitet, ist allerdings noch nicht fertig.
- TGA Image Loader lädt nun korrekt (danke an "P0br3" aus dem SPE Forum für den Bug Report)
Wrapper spezifisch wurde folgendes aktuallisiert:
- AddVertex sollte nun nicht mehr ohne Weiteres Fehler verursachen.
- RotateImage wirkt sich nun schon mal auf "DrawImage" aus.
Sonstiges:
- Geometry Shader für OpenGL 3.3 verfügbar.
- "UseDirect3D11" Funktion wurde hinzugefügt, kann allerdings noch nicht genutzt werden (aus verschiedenen Gründen - muss mir erst noch über legen, wie man in B3D die DX11 API gut nutzen kann, denn im Shader hat sich da einiges geändert).
Was die Shader anbelangt, so hat sich da die API im Wrapper ein klein wenig verändert. Die Beispiele wurden natürlich alle auf die aktuelle Version angepasst, dort könnt ihr also sehen, wie man nun mit Shadern arbeitet

Gruß,
Lukas
Helfer erwünscht

Der ein oder andere hatte schon mal gefragt, wie er bei dem SPE Wrapper mit helfen könne.
Heute habe ich das "SoftPixel Engine Team" erstellt. Da ist jeder willkommen, der zu dem Projekt etwas beitragen möchte.
Wo könnt ihr mir helfen?
* C++ Programmierung: Wer C++ programmieren kann und will der kann gerne versuche, den Wrapper (SoftPixelEngine/sources/wrapper/) weiter voran zu bringen.
Den neuen Code kann er mir dann schicken.
* Blitz3D Programmierung: Wer sich mit den Techniken in Blizt3D sehr gut auskennt, kann mir gerne dabei helfen eine gute Schnittstelle zwischen der SPE und Blitz3D zu finden. Beispiele und Fehler-report wären da super.
* Video Demonstrationen: Richtet sich nicht nur an Wrapper Beispiele sondern prinzipiell an SPE Demos. Ihr könnt selbst entwickelte oder fertige Beispiele aus dem SPE SDK Packet oder die Wrapper Demos als Video auf YouTube hochladen, damit ich solche auf der SPE Homepage vorstellen kann. Solche Videos machen sich immer besser als statische Bilder.
* Tutorials: Wer SPE Tutorials für B3D (mit den neuen Features wie u.a. den Shadern) oder in C++ schreiben möchte, kann das geren tun. Diese würde ich dann im SPE Forum reinstellen. Das kann natürlich auch jeder selbst machen, der im SPE Forum angemeldet ist.
Sagt mir bescheid, wenn ihr Interesse habt, etwas zu dem Projekt bei zu tragen.
lg Lukas
Heute habe ich das "SoftPixel Engine Team" erstellt. Da ist jeder willkommen, der zu dem Projekt etwas beitragen möchte.
Wo könnt ihr mir helfen?
* C++ Programmierung: Wer C++ programmieren kann und will der kann gerne versuche, den Wrapper (SoftPixelEngine/sources/wrapper/) weiter voran zu bringen.
Den neuen Code kann er mir dann schicken.
* Blitz3D Programmierung: Wer sich mit den Techniken in Blizt3D sehr gut auskennt, kann mir gerne dabei helfen eine gute Schnittstelle zwischen der SPE und Blitz3D zu finden. Beispiele und Fehler-report wären da super.
* Video Demonstrationen: Richtet sich nicht nur an Wrapper Beispiele sondern prinzipiell an SPE Demos. Ihr könnt selbst entwickelte oder fertige Beispiele aus dem SPE SDK Packet oder die Wrapper Demos als Video auf YouTube hochladen, damit ich solche auf der SPE Homepage vorstellen kann. Solche Videos machen sich immer besser als statische Bilder.
* Tutorials: Wer SPE Tutorials für B3D (mit den neuen Features wie u.a. den Shadern) oder in C++ schreiben möchte, kann das geren tun. Diese würde ich dann im SPE Forum reinstellen. Das kann natürlich auch jeder selbst machen, der im SPE Forum angemeldet ist.
Sagt mir bescheid, wenn ihr Interesse habt, etwas zu dem Projekt bei zu tragen.
lg Lukas
Direct3D11 VideoDriver

Hallo,
derzeit arbeite ich weniger am Wrapper, da ich die SoftPixel Engine selbst natürlich auch mal wieder voran bringen will.
Aber es lohnt sich
auch für euch B3D Nutzer.
Denn die nächste SPE Version 2.1 und damit auch die nächste Wrapper Version wird einen Direct3D11 Video Driver haben!! Ja ihr habt richtig gelesen ^^ natürlich wird bis zum nächsten Release noch nicht alles 100%ig fertig sein, aber ich komme bisher gut mit der DX11 API voran.
Was erwartet euch damit? (natürlich erst mal vorweg gegriffen, ich bin ja noch am Anfang mit dem VideoDriver)
- Tessellation (mittels Hull- und Domain Shader)
- Compute Shader (für GPGPU, z.B. RayTracing, CollisionDetection etc.)
- Geomety Shader
Man sollte sich natürlich bei DX11 gut mit Shadern auskennen ^^
Sicher dauert das alles noch eine ganze Weile, aber ich möchte natürlich das Kommende schon mal ankündigen.
Ich hoffe, ich kann dann zum Release auch schon ein Tessellation Beispiel mitliefern ...
Für mehr Infos hier ein Link zum Thread in meinem Forum:
http://www.hlc-games.de/forum/...&t=185
Zum Spaß ein Beispiel was ihr damit an neuer Arbeite habt, wenn der Renderer rauskommt:
Code: [AUSKLAPPEN]
derzeit arbeite ich weniger am Wrapper, da ich die SoftPixel Engine selbst natürlich auch mal wieder voran bringen will.
Aber es lohnt sich

Denn die nächste SPE Version 2.1 und damit auch die nächste Wrapper Version wird einen Direct3D11 Video Driver haben!! Ja ihr habt richtig gelesen ^^ natürlich wird bis zum nächsten Release noch nicht alles 100%ig fertig sein, aber ich komme bisher gut mit der DX11 API voran.
Was erwartet euch damit? (natürlich erst mal vorweg gegriffen, ich bin ja noch am Anfang mit dem VideoDriver)
- Tessellation (mittels Hull- und Domain Shader)
- Compute Shader (für GPGPU, z.B. RayTracing, CollisionDetection etc.)
- Geomety Shader
Man sollte sich natürlich bei DX11 gut mit Shadern auskennen ^^
Sicher dauert das alles noch eine ganze Weile, aber ich möchte natürlich das Kommende schon mal ankündigen.
Ich hoffe, ich kann dann zum Release auch schon ein Tessellation Beispiel mitliefern ...
Für mehr Infos hier ein Link zum Thread in meinem Forum:
http://www.hlc-games.de/forum/...&t=185
Zum Spaß ein Beispiel was ihr damit an neuer Arbeite habt, wenn der Renderer rauskommt:
Code: [AUSKLAPPEN]
UseDirect3D11()

Release: v.2.1.2-beta

Und wieder eine kleine Aktuallisierung.
Danke einigen Bug-reports von euch, kann ich Fehler besser beseitigen
Wieder zwei neue Demos sind hinzugekommen.
Insgesammt gibt's jetzt 8 Stück.
Das 8. ist eine Shader library für GLSL und auch endlich HLSL!
Viel Spaß beim Herunterladen.
Mfg Lukas
Danke einigen Bug-reports von euch, kann ich Fehler besser beseitigen

Wieder zwei neue Demos sind hinzugekommen.
Insgesammt gibt's jetzt 8 Stück.
Das 8. ist eine Shader library für GLSL und auch endlich HLSL!
Viel Spaß beim Herunterladen.
Mfg Lukas
SoftPixel Engine Wrapper 2.1.1-beta

Und wieder ein kleines Update für zwischen durch
Nicht nur neue Funktionen oder Features wurde hinzugefügt, auch Altes wurde verbessert bzw. erweitert.
Darunter z.B. Kamera Einstellungen wie "CameraFogMode" etc. die vorher nur für alle Kameras global gesetzt werden konnten.
Viel Spaß beim Herunterladen und ausprobieren

Nicht nur neue Funktionen oder Features wurde hinzugefügt, auch Altes wurde verbessert bzw. erweitert.
Darunter z.B. Kamera Einstellungen wie "CameraFogMode" etc. die vorher nur für alle Kameras global gesetzt werden konnten.
Viel Spaß beim Herunterladen und ausprobieren

Die nächsten features!

Hi, hier möchte ich euch mal kurz die nächsten erhältlichen Features vorstellen.
Natürlich versuche ich immer noch unter B3D bereits erhältliche Funktionen weiter zu implementieren.
Aber es soll natürlich auch ein Anreitz sein, neue Features nutzen zu können.
Hier erst mal einen Screenshot von dem Source-code und dem Ergebnis mit EchtzeitSchatten:
Ihr seht an hand des codes, dass lediglich "EntityShadow" und "LightShadow" aufgerufen werden muss, um den Echtzeitschatten zu aktivieren
(100% funktioniert der realtime-shadow leider noch nicht, mehr dazu im SPE Forum)
Weitere featuers werden sein:
- Einstellbare Texturefilter: Bi-linear/ Tri-linear/ Anisotropisch (2x, 4x, 8x, 16x ...)
- Modelcombiner
- RenderWorldStereo
- MeshReferences
Weitere B3D features die implementiert werden:
- Animationen (SetAnimKey usw.)
- Kollision (CollisionX bis CollisionNZ etc.)
- CaptureWorld
- Texture blend modes, scaling etc.
- ...
Natürlich versuche ich immer noch unter B3D bereits erhältliche Funktionen weiter zu implementieren.
Aber es soll natürlich auch ein Anreitz sein, neue Features nutzen zu können.
Hier erst mal einen Screenshot von dem Source-code und dem Ergebnis mit EchtzeitSchatten:

Ihr seht an hand des codes, dass lediglich "EntityShadow" und "LightShadow" aufgerufen werden muss, um den Echtzeitschatten zu aktivieren

(100% funktioniert der realtime-shadow leider noch nicht, mehr dazu im SPE Forum)
Weitere featuers werden sein:
- Einstellbare Texturefilter: Bi-linear/ Tri-linear/ Anisotropisch (2x, 4x, 8x, 16x ...)
- Modelcombiner
- RenderWorldStereo
- MeshReferences
Weitere B3D features die implementiert werden:
- Animationen (SetAnimKey usw.)
- Kollision (CollisionX bis CollisionNZ etc.)
- CaptureWorld
- Texture blend modes, scaling etc.
- ...
SoftPixelEngine Wrapper 2.1-beta released!

Und? Was hab ich gesagt ^^ schon ist die neue Version hochgeladen
Viel Spaß beim Downloaden und ausprobieren.
Für die 4. Demo braucht ihr allerdings auf jeden Fall OpenGL 2.0 weil die Shader derzeit nur in GLSL geschrieben sind.
(Wer sich mit Shadern auskennt kann gerne versuchen die Shader in HLSL um zu schreiben ^^)
Gruß,
Lukas

Viel Spaß beim Downloaden und ausprobieren.
Für die 4. Demo braucht ihr allerdings auf jeden Fall OpenGL 2.0 weil die Shader derzeit nur in GLSL geschrieben sind.
(Wer sich mit Shadern auskennt kann gerne versuchen die Shader in HLSL um zu schreiben ^^)
Gruß,
Lukas
Re: Shader Demo und SPE Wrapper 2.1-beta sind auf dem Weg

Noch mal kurz zu der Shader Demo: heute abend oder morgen will ich schon die neue Wrapper Version mit der Demo veröffentlichen!
Denn die Demo funktioniert bereits und sieht genau so aus wie bei der C++ Version
Natürlich besteht ein Release noch aus nebensächlichen Arbeiten daher kann es sein, dass ich noch bis morgen brauche, aber ihr kennt mich ja: ich hab zu wenig Geduld um bis morgen zu warten
Zum Vorgeschmack zeige ich euch hier schon mal den gesammten Code, damit ihr euch schon mal mit den neuen Funktionen vertraut machen könnt:
Code: [AUSKLAPPEN]
; SPE Wrapper Demo4 - 23.5.2010
; === Shader demonstration ===
; For bug report, please join our community at: "www.hlc-games.de/forum"
; SoftPixel Engine Wrapper include file
Include "SoftPixelEngineWrapper.bb"
; Initialization
Const ScrWidth = 800
Const ScrHeight = 600
; This version only runs with OpenGL because the shader files are GLSL-Shader!
UseOpenGL()
Graphics3D(ScrWidth, ScrHeight, 32)
AppTitle("SPE Wrapper Demo4 - Shader Demonstration")
HidePointer
; Create basic objects
Global cam = CreateCamera()
PositionEntity(cam, 0, 1, 0)
light = CreateLight()
TurnEntity(light, 45, 0, 0)
CameraRange(cam, 0.1, 1000.0)
; Load all textures
HeightFieldTex = LoadTexture("../media/HeightField.jpg")
GroundTex = LoadTexture("../media/Grass.jpg")
DetailTex = LoadTexture("../media/DetailTexture.jpg")
SkyTexBack = LoadTexture("../media/sky_north.jpg")
SkyTexFront = LoadTexture("../media/sky_south.jpg")
SkyTexTop = LoadTexture("../media/sky_up.jpg")
SkyTexBottom = LoadTexture("../media/sky_down.jpg")
SkyTexLeft = LoadTexture("../media/sky_west.jpg")
SkyTexRight = LoadTexture("../media/sky_east.jpg")
Global RefractionMap = CreateTexture(ScrWidth, ScrHeight, 1)
Global ReflectionMap = CreateTexture(ScrWidth, ScrHeight, 1)
Global BumpMap = LoadTexture("../media/WaterBumpMap.jpg")
Global WaterSurfaceMap = LoadTexture("../media/WaterSurface.jpg")
ScaleTexture(DetailTex, 1.0/15, 1.0/15)
ScaleTexture(BumpMap, 1.0/14, 1.0/14)
ScaleTexture(WaterSurfaceMap, 1.0/10, 1.0/10)
; Load height field:
; Parameters: { HeightFieldTexture, GridSize (64*64*2 triangles), Parent }
ground = LoadHeightField(HeightFieldTex, 64)
PositionEntity(ground, 0, -1, 0)
ScaleEntity(ground, 50, 6, 50)
EntityTexture(ground, GroundTex, 0, 0)
EntityTexture(ground, DetailTex, 0, 1)
; Set the texture environment for the detail texture:
; Parameters: { Surface, Texture index, Environment mode }
; Environment modes:
; 0: Modulate
; 1: Replace
; 2: Add
; 3: AddSigned
; 4: Subtract
; 5: Interpolate
; 6: Dot3
TextureEnvironment(GetSurface(ground, 1), 1, 3)
; Create a house
house = LoadMesh("../media/dom.3ds")
PositionEntity(house, 20, 4.5, -20)
RotateEntity(house, 90, 80, 0)
; Create a skybox
Global skybox = CreateSkyBox(SkyTexBack, SkyTexFront, SkyTexTop, SkyTexBottom, SkyTexLeft, SkyTexRight, 100, 1)
; Water plane (no endless plane)
Global water = CreatePlane(1, 0, 1.0)
ScaleEntity(water, 50, 50, 50)
Global WaterPlaneHeight# = 0.0
; Set water plane cull mode:
; Parameters: { Entity, Mode (0 -> front culling, 1 -> back culling, 2 -> no culling/ both sides are visible) }
EntityCullMode(water, 2)
; Configure fog for under water effect
CameraFogColor(cam, 30, 100, 70)
CameraFogRange(cam, 30, 70)
ClsColor(255, 255, 255)
; Load the shader files:
; For OpenGL shaders (GLSL) the last two parameters can be empty ("").
; For DirectX shaders (HLSL) the last two parameters must be the name of vertex-main-function and pixel-main-function.
Global WaterShader = LoadShader("../media/ShaderWaterVert.txt", "../media/ShaderWaterFrag.txt", "", "")
; Set the shader constants
SetShaderInt(WaterShader, "RefractionMap", 0)
SetShaderInt(WaterShader, "ReflectionMap", 1)
SetShaderInt(WaterShader, "WaterSurfaceMap", 2)
SetShaderInt(WaterShader, "BumpMap", 3)
SetShaderFloat(WaterShader, "Width", Float(ScrWidth))
SetShaderFloat(WaterShader, "Height", Float(ScrHeight))
; Add the textures to the water plane
EntityTexture(water, RefractionMap, 0, 0)
EntityTexture(water, ReflectionMap, 0, 1)
EntityTexture(water, WaterSurfaceMap, 0, 2)
EntityTexture(water, BumpMap, 0, 3)
Global TexPos# = 0.0
Global MirrorMat = CreateMatrix()
; Bind the water shader
SetShader(water, WaterShader)
; Main loop
Repeat
UpdateMovement()
RenderWaterPlane()
RenderWorld
Flip
Until KeyDown(1)
; Don't forget to end graphics! Otherwise your application will cause a memory leek
EndGraphics
End
; Update movement function (user control etc.)
Function UpdateMovement()
; Move camera free (use W/A/S/D)
; Parameters: { Camera (default 0 -> current camera), MoveSpeed (default 0.25),
; TurnSpeed (Default 0.25), MaxTurnDegree (Default 90.0), UseArrowKeys (default true) }
MoveCameraFree(cam, 0.1, 0.25, 90.0, False)
; Move the water plane up/down
If KeyDown(200) Then WaterPlaneHeight = WaterPlaneHeight + 0.01
If KeyDown(208) Then WaterPlaneHeight = WaterPlaneHeight - 0.01
PositionEntity(water, 0, WaterPlaneHeight, 0)
; Move water surface texture
PositionTexture(BumpMap, 0, TexPos)
PositionTexture(WaterSurfaceMap, 0, TexPos)
TexPos = TexPos + 0.005
; Set the skybox's position
PositionEntity(skybox, EntityX(cam), EntityY(cam), EntityZ(cam))
End Function
; Water shader effect function
Function RenderWaterPlane()
; Temporary variables
UnderWater = False
PlaneDir# = 1.0
; Configure under water statement
HideEntity(water)
If EntityY(cam, True) < EntityY(water, True) Then UnderWater = True
SetShaderInt(WaterShader, "UnderWater", UnderWater)
If UnderWater
CameraFogMode(cam, 1)
PlaneDir# = -1.0
Else
CameraFogMode(cam, 0)
EndIf
; Configure refraction scene
CameraMirror(cam, False)
; Set clipping plane:
; Parameters: { Index (0 - 7), Enable, Plane Normal NX, NY, NZ, Plane Distance }
SetClipPlane(0, True, 0, -PlaneDir, 0, PlaneDir * WaterPlaneHeight)
SetBuffer(TextureBuffer(RefractionMap))
RenderWorld
SetBuffer(BackBuffer())
; Configure reflection scene
If Not UnderWater
; Set mirror matrix
MatrixReset(MirrorMat)
MatrixTranslate(MirrorMat, 0, WaterPlaneHeight*2, 0)
MatrixScale(MirrorMat, 1, -1, 1)
CameraMirrorMatrix(cam, MirrorMat)
CameraMirror(cam, True)
; Disable front face culling
FrontCulling(False)
; Set clipping plane
SetClipPlane(0, True, 0, 1, 0, -WaterPlaneHeight)
SetBuffer(TextureBuffer(ReflectionMap))
RenderWorld
SetBuffer(BackBuffer())
; Disable camera's mirror matrix and front face culling
CameraMirror(cam, False)
FrontCulling(True)
EndIf
; Back settings
SetClipPlane(0, False, 0, 0, 0, 0)
ShowEntity(water)
End Function
; ====================
Mfg Lukas

Denn die Demo funktioniert bereits und sieht genau so aus wie bei der C++ Version

Natürlich besteht ein Release noch aus nebensächlichen Arbeiten daher kann es sein, dass ich noch bis morgen brauche, aber ihr kennt mich ja: ich hab zu wenig Geduld um bis morgen zu warten

Zum Vorgeschmack zeige ich euch hier schon mal den gesammten Code, damit ihr euch schon mal mit den neuen Funktionen vertraut machen könnt:
Code: [AUSKLAPPEN]
; SPE Wrapper Demo4 - 23.5.2010
; === Shader demonstration ===
; For bug report, please join our community at: "www.hlc-games.de/forum"
; SoftPixel Engine Wrapper include file
Include "SoftPixelEngineWrapper.bb"
; Initialization
Const ScrWidth = 800
Const ScrHeight = 600
; This version only runs with OpenGL because the shader files are GLSL-Shader!
UseOpenGL()
Graphics3D(ScrWidth, ScrHeight, 32)
AppTitle("SPE Wrapper Demo4 - Shader Demonstration")
HidePointer
; Create basic objects
Global cam = CreateCamera()
PositionEntity(cam, 0, 1, 0)
light = CreateLight()
TurnEntity(light, 45, 0, 0)
CameraRange(cam, 0.1, 1000.0)
; Load all textures
HeightFieldTex = LoadTexture("../media/HeightField.jpg")
GroundTex = LoadTexture("../media/Grass.jpg")
DetailTex = LoadTexture("../media/DetailTexture.jpg")
SkyTexBack = LoadTexture("../media/sky_north.jpg")
SkyTexFront = LoadTexture("../media/sky_south.jpg")
SkyTexTop = LoadTexture("../media/sky_up.jpg")
SkyTexBottom = LoadTexture("../media/sky_down.jpg")
SkyTexLeft = LoadTexture("../media/sky_west.jpg")
SkyTexRight = LoadTexture("../media/sky_east.jpg")
Global RefractionMap = CreateTexture(ScrWidth, ScrHeight, 1)
Global ReflectionMap = CreateTexture(ScrWidth, ScrHeight, 1)
Global BumpMap = LoadTexture("../media/WaterBumpMap.jpg")
Global WaterSurfaceMap = LoadTexture("../media/WaterSurface.jpg")
ScaleTexture(DetailTex, 1.0/15, 1.0/15)
ScaleTexture(BumpMap, 1.0/14, 1.0/14)
ScaleTexture(WaterSurfaceMap, 1.0/10, 1.0/10)
; Load height field:
; Parameters: { HeightFieldTexture, GridSize (64*64*2 triangles), Parent }
ground = LoadHeightField(HeightFieldTex, 64)
PositionEntity(ground, 0, -1, 0)
ScaleEntity(ground, 50, 6, 50)
EntityTexture(ground, GroundTex, 0, 0)
EntityTexture(ground, DetailTex, 0, 1)
; Set the texture environment for the detail texture:
; Parameters: { Surface, Texture index, Environment mode }
; Environment modes:
; 0: Modulate
; 1: Replace
; 2: Add
; 3: AddSigned
; 4: Subtract
; 5: Interpolate
; 6: Dot3
TextureEnvironment(GetSurface(ground, 1), 1, 3)
; Create a house
house = LoadMesh("../media/dom.3ds")
PositionEntity(house, 20, 4.5, -20)
RotateEntity(house, 90, 80, 0)
; Create a skybox
Global skybox = CreateSkyBox(SkyTexBack, SkyTexFront, SkyTexTop, SkyTexBottom, SkyTexLeft, SkyTexRight, 100, 1)
; Water plane (no endless plane)
Global water = CreatePlane(1, 0, 1.0)
ScaleEntity(water, 50, 50, 50)
Global WaterPlaneHeight# = 0.0
; Set water plane cull mode:
; Parameters: { Entity, Mode (0 -> front culling, 1 -> back culling, 2 -> no culling/ both sides are visible) }
EntityCullMode(water, 2)
; Configure fog for under water effect
CameraFogColor(cam, 30, 100, 70)
CameraFogRange(cam, 30, 70)
ClsColor(255, 255, 255)
; Load the shader files:
; For OpenGL shaders (GLSL) the last two parameters can be empty ("").
; For DirectX shaders (HLSL) the last two parameters must be the name of vertex-main-function and pixel-main-function.
Global WaterShader = LoadShader("../media/ShaderWaterVert.txt", "../media/ShaderWaterFrag.txt", "", "")
; Set the shader constants
SetShaderInt(WaterShader, "RefractionMap", 0)
SetShaderInt(WaterShader, "ReflectionMap", 1)
SetShaderInt(WaterShader, "WaterSurfaceMap", 2)
SetShaderInt(WaterShader, "BumpMap", 3)
SetShaderFloat(WaterShader, "Width", Float(ScrWidth))
SetShaderFloat(WaterShader, "Height", Float(ScrHeight))
; Add the textures to the water plane
EntityTexture(water, RefractionMap, 0, 0)
EntityTexture(water, ReflectionMap, 0, 1)
EntityTexture(water, WaterSurfaceMap, 0, 2)
EntityTexture(water, BumpMap, 0, 3)
Global TexPos# = 0.0
Global MirrorMat = CreateMatrix()
; Bind the water shader
SetShader(water, WaterShader)
; Main loop
Repeat
UpdateMovement()
RenderWaterPlane()
RenderWorld
Flip
Until KeyDown(1)
; Don't forget to end graphics! Otherwise your application will cause a memory leek
EndGraphics
End
; Update movement function (user control etc.)
Function UpdateMovement()
; Move camera free (use W/A/S/D)
; Parameters: { Camera (default 0 -> current camera), MoveSpeed (default 0.25),
; TurnSpeed (Default 0.25), MaxTurnDegree (Default 90.0), UseArrowKeys (default true) }
MoveCameraFree(cam, 0.1, 0.25, 90.0, False)
; Move the water plane up/down
If KeyDown(200) Then WaterPlaneHeight = WaterPlaneHeight + 0.01
If KeyDown(208) Then WaterPlaneHeight = WaterPlaneHeight - 0.01
PositionEntity(water, 0, WaterPlaneHeight, 0)
; Move water surface texture
PositionTexture(BumpMap, 0, TexPos)
PositionTexture(WaterSurfaceMap, 0, TexPos)
TexPos = TexPos + 0.005
; Set the skybox's position
PositionEntity(skybox, EntityX(cam), EntityY(cam), EntityZ(cam))
End Function
; Water shader effect function
Function RenderWaterPlane()
; Temporary variables
UnderWater = False
PlaneDir# = 1.0
; Configure under water statement
HideEntity(water)
If EntityY(cam, True) < EntityY(water, True) Then UnderWater = True
SetShaderInt(WaterShader, "UnderWater", UnderWater)
If UnderWater
CameraFogMode(cam, 1)
PlaneDir# = -1.0
Else
CameraFogMode(cam, 0)
EndIf
; Configure refraction scene
CameraMirror(cam, False)
; Set clipping plane:
; Parameters: { Index (0 - 7), Enable, Plane Normal NX, NY, NZ, Plane Distance }
SetClipPlane(0, True, 0, -PlaneDir, 0, PlaneDir * WaterPlaneHeight)
SetBuffer(TextureBuffer(RefractionMap))
RenderWorld
SetBuffer(BackBuffer())
; Configure reflection scene
If Not UnderWater
; Set mirror matrix
MatrixReset(MirrorMat)
MatrixTranslate(MirrorMat, 0, WaterPlaneHeight*2, 0)
MatrixScale(MirrorMat, 1, -1, 1)
CameraMirrorMatrix(cam, MirrorMat)
CameraMirror(cam, True)
; Disable front face culling
FrontCulling(False)
; Set clipping plane
SetClipPlane(0, True, 0, 1, 0, -WaterPlaneHeight)
SetBuffer(TextureBuffer(ReflectionMap))
RenderWorld
SetBuffer(BackBuffer())
; Disable camera's mirror matrix and front face culling
CameraMirror(cam, False)
FrontCulling(True)
EndIf
; Back settings
SetClipPlane(0, False, 0, 0, 0, 0)
ShowEntity(water)
End Function
; ====================
Mfg Lukas
Shader Demo und SPE Wrapper 2.1-beta sind auf dem Weg ...

Ich arbeite gerade an einer Shader Demo um die WasserSimulation für den Wrapper bereit zu stellen.
Sobald diese Demo fertig ist, werde ich sie mit der SPE Wrapper Version 2.1-beta veröffentlichen
Freut euch also schon mal auf ein hübsches Shader Programm für Blitz3D
Sobald diese Demo fertig ist, werde ich sie mit der SPE Wrapper Version 2.1-beta veröffentlichen

Freut euch also schon mal auf ein hübsches Shader Programm für Blitz3D

Gehe zu Seite Zurück 1, 2, 3 Weiter