[Irrlicht] Mit Shadern arbeiten?
Übersicht

![]() |
Kernle 32DLLBetreff: [Irrlicht] Mit Shadern arbeiten? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin,
Ich versuche derzeit Shader mit Irrlicht ans Laufen zu bekommen. Leider klappt das nicht so wie ich es will, da u.A. die Dokumentation des BMax Ports von GMan reichlich dürftig ist, bzw. das Shader Beispiel äußerst Rudimentär ist. Ich versuche konkret folgenden Shader ans Laufen zu bekommen (letzte Seite). Mein bisheriger Code sieht so aus, funktioniert aber in keinster Weise. Ist aus dem Code auf Seite 1 des Threads, und dem Shader Beispiel von Irrlicht zusammengebastelt. Code: [AUSKLAPPEN] Type MyShaderCallBack Extends IShaderConstantSetCallBack
Field fLightStrength1:Float Field fLightStrength2:Float Field fLightStrength3:Float Field fLightStrength4:Float Field fvLightPosition1:Float[3] Field fvLightPosition2:Float[3] Field fvLightPosition3:Float[3] Field fvLightPosition4:Float[3] Field fvLightColor1:Float[4] Field fvLightColor2:Float[4] Field fvLightColor3:Float[4] Field fvLightColor4:Float[4] Field fvAmbientColor:Float[4] Field fSpecularPower:Float = 0.0 'S=pow(fDiffuseIntensity,fSpecularPower)*fSpecularStrength; Field fSpecularStrength:Float = 0.0 'will result in less glossing surfaces Field fBumpStrength:Float = 0.8 'strength of the bumpmapping.. higher values will result in more "bumpy" surfaces Method OnSetConstants(services:IMaterialRendererServices,userdata:Int) Local driver:IVideoDriver = services.getVideoDriver() Local var0:Float = 0 Local var1:Float = 1 services.setPixelShaderConstantFromName("baseMap", Varptr var0, 1) services.setPixelShaderConstantFromName("bumpMap", Varptr var1, 1) Local invWorld:matrix4 = driver.getTransform(ETS_WORLD) invWorld.makeInverse() services.setPixelShaderConstantFromName("matWorldInverse", invWorld.pointer(), 16) services.setPixelShaderConstantFromName("fLightStrength1", Varptr(fLightStrength1), 1) services.setPixelShaderConstantFromName("fLightStrength2", Varptr(fLightStrength2), 1) services.setPixelShaderConstantFromName("fLightStrength3", Varptr(fLightStrength3), 1) services.setPixelShaderConstantFromName("fLightStrength4", Varptr(fLightStrength4), 1) services.setPixelShaderConstantFromName("fvLightPosition1", Varptr(fvLightPosition1)[0], 3) services.setPixelShaderConstantFromName("fvLightPosition2", Varptr(fvLightPosition2)[0], 3) services.setPixelShaderConstantFromName("fvLightPosition3", Varptr(fvLightPosition3)[0], 3) services.setPixelShaderConstantFromName("fvLightPosition4", Varptr(fvLightPosition4)[0], 3) services.setPixelShaderConstantFromName("fvAmbient", Varptr(fvAmbientColor)[0], 4) services.setPixelShaderConstantFromName("fvLight1Color", Varptr(fvLightColor1)[0], 4) services.setPixelShaderConstantFromName("fvLight2Color", Varptr(fvLightColor2)[0], 4) services.setPixelShaderConstantFromName("fvLight3Color", Varptr(fvLightColor3)[0], 4) services.setPixelShaderConstantFromName("fvLight4Color", Varptr(fvLightColor4)[0], 4) services.setPixelShaderConstantFromName("fSpecularPower", Varptr(fSpecularPower), 1) services.setPixelShaderConstantFromName("fSpecularStrength", Varptr(fSpecularStrength), 1) services.setPixelShaderConstantFromName("fBumpStrength", Varptr(fBumpStrength), 1) EndMethod ' we must override the generate function in order for instantiation to work properly Function generate:IShaderConstantSetCallBack() Return New MyShaderCallBack EndFunction EndType Mein Material das zum Shader gehört erstelle ich wiefolgt. Komischerweise liefert mir die Funktion immer -1 zurück... Code: [AUSKLAPPEN] Local gpu:IGPUProgrammingServices = gIrrlichtDriver.getGPUProgrammingServices()
Local newMaterialType1:Int = 0 If (gpu) Local mc:IShaderConstantSetCallBack = .. IShaderConstantSetCallBack.Create(MyShaderCallback.generate) newMaterialType1 = gpu.addHighLevelShaderMaterialFromFilesNoGeometryShaders( .. "./Media/Shader/animNormal.vert", "vertexMain", EVST_VS_1_1, .. "./Media/Shader/animNormal.frag", "pixelMain", EPST_PS_1_1, .. mc, EMT_SOLID) mc.drop() EndIf Da ich die -1 als Rückgabewert nicht genug interpretieren kann, würde ich sagen das entweder die Funktion die das Material später benutzt einfach ein Standardmaterial (z.b. EMT_SOLID) als Fallback Material nimmt weil es mit der -1 nichts anzufangen weiß, oder die -1 steht tatsächlich für ein Material, das aber Aufgrund eines Fehlers auf das Fallback Material EMT_SOLID zurück fällt. Vorschläge? Ich muss zugeben, dass ich absolut keine Ahnung von der Materie bisher habe, da ich mich weder ausgiebig mit Shadern beschäftigt habe, noch deren Anbindung an Irrlicht (ob nun C++ oder BMax). So long, Kernle Edit: Weitere Informationen: ![]() ![]() ![]() ![]() Edit2: Okay, ich bin eine totale Tomate! Der Shader auf der letzten Seite ist natürlich kein OpenGL, sondern ein DirectX Shader >.< Ich probiere morgen noch mal den Shader auf der 1. Seite aus... |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group