here comes a little piece code to create bumpmap with DX9. You need a grafikfile (BMP, JPG, TGA, PNG, DDS, PPM, DIB, HDR und PFM) and a normalmap. You can create a normalmap with my program CreateNormal.exe. Use Space to choose Grafikfile, a normal.jpg will be created.
CreateNormal.exe
http://rapidshare.de/files/48775115/Cre ... l.exe.html
Have fun
Michael
Code: Select all
;////////////////////////////////////////////////////////////////
;//
;// Project Title: Easy BumpMap
;// File Title: BumpMap.pb
;// Created On: 10.12.2009
;// Updated On:
;// Author: Michael Paulwitz
;// OS:Windows
;//
;// Demofile zum erzeugen einer einfachen BumpMap Textur mit DX9
;// Demoflie to Create a BumpMap Textur with DX9
;//
;// Benötigt eine Grafikdatei und NormalMap
;// Used a Grafikfile and NormalMap
;//
;// You can use (BMP, JPG, TGA, PNG, DDS, PPM, DIB, HDR und PFM)
;//
;// Based on Steven "Dreglor" Garcia DX9 files
;////////////////////////////////////////////////////////////////
File1.s = "earth_map.jpg" ; Grafikfile (BMP, JPG, TGA, PNG, DDS, PPM, DIB, HDR und PFM)
File2.s = "Normal.jpg" ; NormalMap
; You can create a normalMap with CreateNormal.exe from mpz
#D3D_OK = 0
#D3DADAPTER_DEFAULT = 0
#D3DDEVTYPE_HAL = 1
#D3DCREATE_HARDWARE_VERTEXPROCESSING = $00000040
#D3DMULTISAMPLE_NONE = 0
#D3DSWAPEFFECT_DISCARD = 1
#D3DPRESENT_RATE_DEFAULT = $00000000
#D3DPRESENT_INTERVAL_DEFAULT = $00000000
#D3DFMT_D16 = 80
#D3DUSAGE_DEPTHSTENCIL = ($00000002)
#D3DRTYPE_SURFACE = 1
#D3DFMT_X8R8G8B8 = 22
#D3DPOOL_MANAGED = 1
#D3DUSAGE_WRITEONLY = ($00000008)
#D3DFVF_XYZ = $002
#D3DFVF_TEX1 = $100
#D3DFVF_MY_VERTEX = #D3DFVF_XYZ | #D3DFVF_TEX1
#D3DPOOL_DEFAULT = 0
#D3DPT_TRIANGLESTRIP = 5
#D3DRS_LIGHTING = 137
#D3DTSS_COLOROP = 1 ;/* D3DTEXTUREOP - per-stage blending controls for color channels */
#D3DTSS_COLORARG1 = 2 ;/* D3DTA_* (texture arg) */
#D3DTSS_COLORARG2 = 3 ;/* D3DTA_* (texture arg) */
#D3DTA_TEXTURE = $00000002 ;// select texture color (read only)
#D3DTA_TFACTOR = $00000003 ;// select D3DRS_TEXTUREFACTOR (read only)
#D3DTOP_DOTPRODUCT3 = 24
#D3DTSS_TEXCOORDINDEX = 11 ;/* identifies which set of texture coordinates index this texture */
#D3DTOP_MODULATE = 4 ;// multiply args together
#D3DSAMP_MAGFILTER = 5 ;/* D3DTEXTUREFILTER filter to use for magnification */
#D3DSAMP_MINFILTER = 6 ;/* D3DTEXTUREFILTER filter to use for minification */
#D3DTEXF_LINEAR = 2 ;// linear interpolation
;- Globals
Global *D3D.IDIRECT3D9
Global *D3DDevice.IDIRECT3DDEVICE9
;- Structure
Structure D3DDISPLAYMODE
Width.l
Height.l
RefreshRate.l
Format.l
EndStructure
Structure D3DPRESENT_PARAMETERS
BackBufferWidth.l
BackBufferHeight.l
BackBufferFormat.l
BackBufferCount.l
MultiSampleType.l
MultiSampleQuality.l
SwapEffect.l
hDeviceWindow.l
Windowed.l
EnableAutoDepthStencil.l
AutoDepthStencilFormat.l
flags.l
;/* FullScreen_RefreshRateInHz must be zero for Windowed mode */
FullScreen_RefreshRateInHz.l
PresentationInterval.l
EndStructure
Structure Vertex
x.f
y.f
z.f
u.f
v.f
EndStructure
Structure D3DXMACRO
Name.s
Definition.s
EndStructure
;- Macro
Macro D3DFORMAT
l
EndMacro
Macro D3DPOOL
l
EndMacro
Macro D3DXIMAGE_FILEFORMAT
l
EndMacro
;- Import
Import "d3d9.lib"
Direct3DCreate9(SDKVersion.l)
EndImport
Import "d3dx9.lib"
D3DXCreateTextureFromFileA(*pDevice.IDIRECT3DDEVICE9, pSrcFile.s, *ppTexture.IDIRECT3DTEXTURE9)
D3DXCreateTextureFromFileW(*pDevice.IDIRECT3DDEVICE9, pSrcFile.s, *ppTexture.IDIRECT3DTEXTURE9)
D3DXSaveTextureToFileA(pDestFile.s, *DestFormat.D3DXIMAGE_FILEFORMAT, *pSrcTexture.IDIRECT3DBASETEXTURE9, *pSrcPalette.PALETTEENTRY)
D3DXSaveTextureToFileW(pDestFile.s, *DestFormat.D3DXIMAGE_FILEFORMAT, *pSrcTexture.IDIRECT3DBASETEXTURE9, *pSrcPalette.PALETTEENTRY)
D3DXCreateTexture(*pDevice.IDIRECT3DDEVICE9, Width.l, Height.l, MipLevels.l, Usage.l, *Format.D3DFORMAT, *Pool.D3DPOOL, *ppTexture.IDIRECT3DTEXTURE9)
EndImport
CompilerIf #PB_Compiler_Unicode
Macro D3DXCreateTextureFromFile
D3DXCreateTextureFromFileW
EndMacro
CompilerElse
Macro D3DXCreateTextureFromFile
D3DXCreateTextureFromFileA
EndMacro
CompilerEndIf
CompilerIf #PB_Compiler_Unicode
Macro D3DXSaveTextureToFile
D3DXSaveTextureToFileW
EndMacro
CompilerElse
Macro D3DXSaveTextureToFile
D3DXSaveTextureToFileA
EndMacro
CompilerEndIf
;- Procedures
Procedure InitD3D9()
If hwnd = #Null
*D3D = Direct3DCreate9(32)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure D3D9_OpenWindowedScreen(Window.l, x.l, y.l, Width.l, Height.l, Title.s, WindowFlags.l = #PB_Window_ScreenCentered | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
If *D3D <> #Null And *D3DDevice = #Null
If *D3DDevice <> #Null
;Device Check
*D3DDevice\Release()
*D3DDevice = #Null
EndIf
Current.D3DDISPLAYMODE
If *D3D\GetAdapterDisplayMode(#D3DADAPTER_DEFAULT, Current) = #D3D_Ok
;Back Buffer Check
If *D3D\CheckDeviceType(#D3DADAPTER_DEFAULT, #D3DDEVTYPE_HAL, Current\Format, Current\Format, #True) = #D3D_Ok
;Z-buffer Check
hwnd.l = OpenWindow(Window, x, y, Width, Height, Title, WindowFlags)
If hwnd <> #Null
Rendering.D3DPRESENT_PARAMETERS
Rendering\BackBufferCount = 1
Rendering\MultiSampleType = #D3DMULTISAMPLE_NONE
Rendering\MultiSampleQuality = 0
Rendering\SwapEffect = #D3DSWAPEFFECT_DISCARD
Rendering\hDeviceWindow = hwnd
Rendering\flags = #Null
Rendering\FullScreen_RefreshRateInHz = #D3DPRESENT_RATE_DEFAULT
Rendering\PresentationInterval = #D3DPRESENT_INTERVAL_DEFAULT
Rendering\BackBufferFormat = Current\Format
Rendering\EnableAutoDepthStencil = #True
Rendering\AutoDepthStencilFormat = #D3DFMT_D16
Rendering\Windowed = #True
Rendering\BackBufferWidth = 0
Rendering\BackBufferHeight = 0
If *D3D\CreateDevice(#D3DADAPTER_DEFAULT, #D3DDEVTYPE_HAL, hwnd, #D3DCREATE_HARDWARE_VERTEXPROCESSING, Rendering, @*D3DDevice) = #D3D_Ok
ProcedureReturn #True
Else
;Creation of the device failed
CloseWindow(Window)
ProcedureReturn #False
EndIf
Else
;16bit z-buffer does not work
ProcedureReturn #False
EndIf
Else
;the back buffer format failed
ProcedureReturn #False
EndIf
Else
;Failed to get the current mode.
ProcedureReturn #False
EndIf
Else
;D3D not initilized!
ProcedureReturn #False
EndIf
EndProcedure
Procedure D3D9_Shutdown(Window)
If *D3DDevice <> #Null
*D3DDevice\Release()
*D3DDevice = #Null
EndIf
If IsWindow(Window)
CloseWindow(Window)
EndIf
If *D3D <> #Null
*D3D\Release()
*D3D = #Null
EndIf
ProcedureReturn #True
EndProcedure
;-
;- ProgrammStart
InitD3D9() ; Initalisiere DX9
D3D9_OpenWindowedScreen(0, 10, 10, 640, 480, "DirectX from MP") ; Öffne DX9 Screen
If D3DXCreateTextureFromFile(*D3DDevice, File1.s, @LoadTexture.IDIRECT3DTEXTURE9)
MessageRequester("Error during D3DXCreateFromFile","Error!",#PB_MessageRequester_Ok)
End
EndIf
If D3DXCreateTextureFromFile(*D3DDevice, File2.s, @NormalTextur.IDIRECT3DTEXTURE9)
MessageRequester("Error during D3DXCreateFromFile","Error!",#PB_MessageRequester_Ok)
End
EndIf
Dim Quad.Vertex(4)
Quad(0)\x = -1.0
Quad(0)\y = 1.0
Quad(0)\z = 0.0
Quad(0)\u = 0.0
Quad(0)\v = 0.0
Quad(1)\x = 1.0
Quad(1)\y = 1.0
Quad(1)\z = 0.0
Quad(1)\u = 1.0
Quad(1)\v = 0.0
Quad(2)\x = -1.0
Quad(2)\y = -1.0
Quad(2)\z = 0.0
Quad(2)\u = 0.0
Quad(2)\v = 1.0
Quad(3)\x = 1.0
Quad(3)\y = -1.0
Quad(3)\z = 0.0
Quad(3)\u = 1.0
Quad(3)\v = 1.0
If *D3DDevice\CreateVertexBuffer(4 * SizeOf(Vertex), #D3DUSAGE_WRITEONLY, #D3DFVF_MY_VERTEX, #D3DPOOL_DEFAULT, @*VertexBuffer.IDIRECT3DVERTEXBUFFER9, #Null) = #D3D_Ok
Vertices = #Null
If *VertexBuffer\Lock(0, 4 * SizeOf(Vertex), @Vertices, 0) = #D3D_Ok
CopyMemory(Quad(), Vertices, 4 * SizeOf(Vertex))
*VertexBuffer\Unlock()
Else
;vertex buffer failed to lock
End
EndIf
Else
;failed to create the vertex buffer
End
EndIf
*D3DDevice\SetRenderState(#D3DRS_LIGHTING, #False)
While Not WindowEvent() = #PB_Event_CloseWindow; Esc abfrage oder Windows Schliessen
*D3DDevice\Clear(#Null, #Null, 3, 0, 1, 0)
*D3DDevice\BeginScene()
*D3DDevice\SetTextureStageState(0,#D3DTSS_COLORARG1,#D3DTA_TEXTURE);
*D3DDevice\SetTextureStageState(0,#D3DTSS_COLORARG2,#D3DTA_TFACTOR);
*D3DDevice\SetTextureStageState(0, #D3DTSS_COLOROP, #D3DTOP_DOTPRODUCT3);
*D3DDevice\SetTexture(0, NormalTextur)
*D3DDevice\SetSamplerState( 1, #D3DSAMP_MINFILTER, #D3DTEXF_LINEAR );
*D3DDevice\SetSamplerState( 1, #D3DSAMP_MAGFILTER, #D3DTEXF_LINEAR );
*D3DDevice\SetTextureStageState( 1, #D3DTSS_TEXCOORDINDEX, 0 );
*D3DDevice\SetTextureStageState( 1, #D3DTSS_COLOROP, #D3DTOP_MODULATE ); // Modulate...
*D3DDevice\SetTexture(1, LoadTexture)
*D3DDevice\SetStreamSource(0, *VertexBuffer, 0, SizeOf(Vertex))
*D3DDevice\SetFVF(#D3DFVF_MY_VERTEX)
*D3DDevice\DrawPrimitive(#D3DPT_TRIANGLESTRIP, 0, 2)
*D3DDevice\EndScene()
*D3DDevice\Present( #Null, #Null, #Null, #Null )
Wend
D3D9_Shutdown(0)