Displacemapping von Vertex |
Hi! Ja ich schreibe gerade an einem Tutorial über Specialeffekte in BB, und da ich displacemapping als erstes genommen habe, poste ich hier mal den code. Ich lade dann noch gleich ein Besipiel und 2 screenshots noch hoch: [code:1:fcad372275] Function EntityDisplace(Entity,Heighmap$) Local Image,OldBuffer,Width,Height,MX#,MY#,MZ# Local S,Surface,V,VX#,VY#,VZ#,PixelX,PixelY Local RGBA,R,G,B,Durchschnitt,Faktor#,NX#,NY#,NZ# OldBuffer = GraphicsBuffer() If FileType(Heighmap$) <> 1 Then Return 0 Image = LoadImage(Heighmap$) If Image = 0 Then Return 0 Width = ImageWidth(Image) Height = ImageHeight(Image) MX# = EntityX#(Entity) MY# = EntityY#(Entity) MZ# = EntityZ#(Entity) SetBuffer ImageBuffer(Image) For S = 1 To CountSurfaces(Entity) Surface = GetSurface(Entity,S) For V = 0 To CountVertices(Surface) - 1 VX# = VertexX#(Surface,V) VY# = VertexY#(Surface,V) VZ# = VertexZ#(Surface,V) VU# = VertexU#(Surface,V) VV# = VertexV#(Surface,V) LockBuffer ImageBuffer(Image) PixelX = VU# * Width pixelY = VV# * Height RGBA = ReadPixelFast(PixelX,PixelY) R = (RGBA And $FF0000) / $10000 G = (RGBA And $FF00) / $100 B = (RGBA And $FF) UnlockBuffer ImageBuffer(Image) Durchschnitt = (R + G + B) / 3 Faktor# = Durchschnitt / (255.0 / 2) NX# = MX# + ((VX# - MX#) * Faktor#) NY# = MY# + ((VY# - MY#) * Faktor#) NZ# = MZ# + ((VZ# - MZ#) * Faktor#) VertexCoords Surface,V,NX#,NY#,NZ# Next Next SetBuffer OldBuffer UpdateNormals Entity FreeImage Image Return 1 End Function [/code:1:fcad372275] macht sich echt gut, wenn man z.B. nur einen Sphere nimmt, kann man über heighmap ein gesicht modellieren, ohne mit 3DMax oder Milkshape zu arbeiten. Also einfach nur ein Gesicht zeichnen, und daraus erstellt dann B3D ein fertiges Gesicht. Leider bleibt immer ein veretx zu kurz, aber fällt nicht gravierend auf unter den anderen 3967 vertices :D mfg olli |
von ??? |
Hi! habe ich ja ganz vergessen... naja habe mal zumindest nen video hochgeladen http://mitglied.lycos.de/the_darkfuture/displace.zip (3.65 MB *.mpg liegt bei) das progg wozu ich zur aufzeichnung genommen habe, hat das ding auf min. 15 FPS runtergedrückt :( mfg olli |