Ooops
March 01, 2021, 11:10:07 PM

Author Topic: [bb] Milkshape by Vertex [ 1+ years ago ]  (Read 578 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Milkshape by Vertex [ 1+ years ago ]
« on: June 29, 2017, 12:28:41 AM »
Title : Milkshape
Author : Vertex
Posted : 1+ years ago

Description : Handle = LoadMS3D("MyModel.ms3d")

Examples:
http://mitglied.lycos.de/thevertex/download.php?c=mediaMilkshape.rar

cu olli


Code :
Code: BlitzBasic
  1. ; -------------------------------------------------------------------------------------------
  2. ; Milkshape-Importer 2.3 by Vertex                                                          :
  3. ;                                                                                           :
  4. ; Feature:                                                                                  :
  5. ;  - Shininess                                                                              :
  6. ;  _ Diffuselighting                                                                        :
  7. ;  - Alphamaps                                                                              :
  8. ;  - Alphatexture                                                                           :
  9. ;  - Spheremapping                                                                          :
  10. ;                                                                                           :
  11. ; To do:                                                                                    :
  12. ;  - Including Animation                                                                    :
  13. ; -------------------------------------------------------------------------------------------
  14.  
  15. ; -------------------------------------------------------------------------------------------
  16. Function LoadMS3D(File$,Parent = 0)
  17.     Local Stream,Vertices,Triangles,Groups,Materials
  18.     Local Animation,Joints,Mesh,crtMaterials,crtGroups
  19.  
  20.     Stream = ReadFile(File$)
  21.     If Stream = False Then
  22.         Return False
  23.     EndIf
  24.  
  25.     If ms3dCheckHeader(Stream) = False Then
  26.         CloseFile Stream
  27.         Return False
  28.     EndIf
  29.  
  30.     Vertices  = ms3dLoadVertices(Stream)
  31.     Triangles = ms3dLoadTriangles(Stream)
  32.     Groups    = ms3dLoadGroups(Stream)
  33.     Materials = ms3dLoadMaterials(Stream)
  34.     ;Animation = ms3dLoad_Animation(Stream)
  35.     ;Joints    = ms3dLoad_Joints(Stream)
  36.  
  37.     CloseFile Stream
  38.  
  39.     If Parent Then
  40.         Mesh = CreateMesh(Parent)
  41.     Else
  42.         Mesh = CreateMesh()
  43.     EndIf
  44.  
  45.     crtMaterials = ms3dCreateMaterials(File$,Materials)
  46.     crtGroups    = ms3dCreateGroups(Mesh,Groups,crtMaterials)
  47.                    ms3dCreateVertices(Vertices,Triangles,crtGroups)
  48.                    ms3dCreateTriangles(Triangles,crtGroups)
  49.     Return Mesh
  50. End Function
  51. ; -------------------------------------------------------------------------------------------
  52.  
  53. ; -------------------------------------------------------------------------------------------
  54. Function ms3dCheckHeader(Stream)                                    ;         Header        :
  55.     Local I,ID$,Version                                             ;-----------------------:
  56.                                                                     ;                       :
  57.     For I = 1 To 10                                                 ;                       :
  58.         ID$ = ID$ + Chr$(ReadByte(Stream))                          ; ID                    :
  59.     Next                                                            ;                       :
  60.     If ID$ <> "MS3D000000" Then                                     ;                       :
  61.         Return False                                                ;                       :
  62.     EndIf                                                           ;                       :
  63.                                                                     ;                       :
  64.     Version = ReadInt(Stream)                                       ; Version               :
  65.     If Version <> 4 Then                                            ;                       :
  66.         Return False                                                ;                       :
  67.     EndIf                                                           ;                       :
  68.                                                                     ;                       :
  69.     Return True                                                     ;                       :
  70. End Function                                                        ;                       :
  71. ; -------------------------------------------------------------------------------------------
  72.  
  73. ; -------------------------------------------------------------------------------------------
  74. Function ms3dLoadVertices(Stream)                                   ;        Vertices       :
  75.     Local VertexCount,Vertices,I                                    ;-----------------------;
  76.                                                                     ;                       :
  77.     VertexCount = ReadShort(Stream)                                 ;                       :
  78.     Vertices    = CreateBank(VertexCount * 13 + 2)                  ;                       :
  79.     PokeShort     Vertices,0,VertexCount                            ;                       :
  80.                                                                     ;                       :
  81.     For I = 1 To VertexCount                                        ;                       :
  82.         SeekFile  Stream,FilePos(Stream) + 1                        ; Flags                 :
  83.         ReadBytes Vertices,Stream,(I - 1) * 13 + 02,12              ; Position              :
  84.         PokeByte  Vertices,(I - 1) * 13 + 14,ReadByte(Stream)       ; BoneID                :
  85.         SeekFile  Stream,FilePos(Stream) + 1                        ; ReferenceCount        :
  86.     Next                                                            ;                       :
  87.                                                                     ;                       :
  88.        Return Vertices                                              ;                       :
  89. End Function                                                        ;                       :
  90. ; -------------------------------------------------------------------------------------------
  91.  
  92. ; -------------------------------------------------------------------------------------------
  93. Function ms3dLoadTriangles(Stream)                                  ;       Triangles       ;
  94.     Local TriangleCount,Triangles,I                                 ;-----------------------:
  95.                                                                     ;                       :
  96.     TriangleCount = ReadShort(Stream)                               ;                       :
  97.     Triangles     = CreateBank(TriangleCount * 67 + 2)              ;                       :
  98.     PokeShort       Triangles,0,TriangleCount                       ;                       :
  99.                                                                     ;                       :
  100.        For I = 1 To TriangleCount                                   ;                       :
  101.         SeekFile  Stream,FilePos(Stream) + 2                        ; Flags                 :
  102.         ReadBytes Triangles,Stream,(I - 1) * 67 + 02,6              ; Vertexindices         :
  103.         ReadBytes Triangles,Stream,(I - 1) * 67 + 08,36             ; Vertexnormals         :
  104.         ReadBytes Triangles,Stream,(I - 1) * 67 + 44,24             ; Vertextexcoords       :
  105.         SeekFile  Stream,FilePos(Stream) + 1                        ; Smoothinggroup        :
  106.         PokeByte  Triangles,(I - 1) * 67 + 68,ReadByte(Stream)      ; Groupindex            :
  107.     Next                                                            ;                       :
  108.                                                                     ;                       :
  109.     Return Triangles                                                ;                       :
  110. End Function                                                        ;                       :
  111. ; -------------------------------------------------------------------------------------------
  112. Function ms3dLoadGroups(Stream)                                     ;         Groups        :
  113.     Local GroupCount,Groups,I,Dummy                                 ;-----------------------:
  114.                                                                     ;                       :
  115.     GroupCount = ReadShort(Stream)                                  ;                       :
  116.     Groups     = CreateBank(GroupCount + 2)                         ;                       :
  117.     PokeShort    Groups,0,GroupCount                                ;                       :
  118.                                                                     ;                       :
  119.     For I = 1 To GroupCount                                         ;                       :
  120.         SeekFile Stream,FilePos(Stream) + 1                         ; Flags                 :
  121.         SeekFile Stream,FilePos(Stream) + 32                        ; Name                  :
  122.         Dummy  = ReadShort(Stream)                                  ; numTriangle           :
  123.         SeekFile Stream,FilePos(Stream) + (Dummy * 2)               ; Triangle              :
  124.         PokeByte Groups,I - 1 + 2,ReadByte(Stream)                  ; Materialindex         :
  125.     Next                                                            ;                       :
  126.                                                                     ;                       :
  127.     Return Groups                                                   ;                       :
  128. End Function                                                        ;                       :
  129. ; -------------------------------------------------------------------------------------------
  130.  
  131. ; -------------------------------------------------------------------------------------------
  132. Function ms3dLoadMaterials(Stream)                                  ;       Materials       :
  133.     Local MaterialCount,Material,I                                  ;-----------------------:
  134.                                                                     ;                       :
  135.     MaterialCount = ReadShort(Stream)                               ;                       :
  136.     Material      = CreateBank(MaterialCount * 277 + 2)             ;                       :
  137.     PokeShort       Material,0,MaterialCount                        ;                       :
  138.                                                                     ;                       :
  139.     For I = 1 To MaterialCount                                      ;                       :
  140.         SeekFile  Stream,FilePos(Stream) + 32                       ; Name                  :
  141.         SeekFile  Stream,FilePos(Stream) + 16                       ; Ambient RGBA          :
  142.         ReadBytes Material,Stream,(I - 1) * 277 + 2,12              ; Difusse RGB           :
  143.         SeekFile  Stream,FilePos(Stream) + 4                        ; Difusse A             :
  144.         SeekFile  Stream,FilePos(Stream) + 16                       ; Specular RGBA         :
  145.         SeekFile  Stream,FilePos(Stream) + 16                       ; Emissive RGBA         :
  146.         PokeFloat Material,(I - 1) * 277 + 14,ReadFloat#(Stream)    ; Shininess             :
  147.         PokeFloat Material,(I - 1) * 277 + 18,ReadFloat#(Stream)    ; Transparency          :
  148.         PokeByte  Material,(I - 1) * 277 + 22,ReadByte(Stream)      ; Mode                  :
  149.         ReadBytes Material,Stream,(I - 1) * 277 + 023,128           ; Filename              :
  150.         ReadBytes Material,Stream,(I - 1) * 277 + 151,128           ; Alphamap              :
  151.     Next                                                            ;                       :
  152.                                                                     ;                       :
  153.     Return Material                                                 ;                       :
  154. End Function                                                        ;                       :
  155. ; -------------------------------------------------------------------------------------------
  156.  
  157. ; -------------------------------------------------------------------------------------------
  158. Function ms3dLoadAnimation(Stream)                                  ;       Animation       :
  159.     Local Animation                                                 ;-----------------------:
  160.                                                                     ;                       :
  161.     Animation = CreateBank(12)                                      ;                       :
  162.     PokeFloat Animation,0,ReadFloat#(Stream)                        ; Aniamations FPS       :
  163.     PokeFloat Animation,0,ReadFloat#(Stream)                        ; Curent time           :
  164.     PokeInt   Animation,0,ReadInt(Stream)                           ; Total frames          :
  165.                                                                     ;                       :
  166. End Function                                                        ;                       :
  167. ; -------------------------------------------------------------------------------------------
  168.    
  169. ; -------------------------------------------------------------------------------------------
  170. Function ms3dLoadJoints(Stream)                                     ;         Joints        :
  171.     Local JointCount,Joints,I,KeyRotCount,KeyPosCount               ;-----------------------:
  172.                                                                     ;                       :
  173.     JointCount = ReadShort(Stream)                                  ;                       :
  174.     Joints     = CreateBank(JointCount * 100 + 2)                   ;                       :
  175.     PokeShort    Joints,0,JointCount                                ;                       :
  176.                                                                     ;                       :
  177.     For I = 1 To JointCount                                         ;                       :
  178.         SeekFile      Stream,FilePos(Stream) + 1                    ; Flags                 :
  179.         ReadBytes     Joints,Stream,(I - 1) * 100 + 02,32           ; Name                  :
  180.         ReadBytes     Joints,Stream,(I - 1) * 100 + 34,32           ; Parentname            :
  181.         ReadBytes     Joints,Stream,(I - 1) * 100 + 66,12           ; Rotation              :
  182.         ReadBytes     Joints,Stream,(I - 1) * 100 + 78,12           ; Position              :
  183.         KeyRotCount = ReadShort(Stream)                             ; Keycount of rotation  :
  184.         KeyPosCount = ReadShort(Stream)                             ; Keycount of position  :
  185.         KeyRot      = ms3dLoadKeyRot(Stream,KeyRotCount)            ; Keyframes of rotation :
  186.         KeyPos      = ms3dLoadKeyPos(Stream,KeyPosCount)            ; Keyframes of position :
  187.         PokeShort     Joints,(I - 1) * 100 + 90,KeyRotCount         ;                       :
  188.         PokeShort     Joints,(I - 1) * 100 + 92,KeyPosCount         ;                       :
  189.         PokeShort     Joints,(I - 1) * 100 + 94,KeyRot              ;                       :
  190.         PokeShort     Joints,(I - 1) * 100 + 96,KeyPos              ;                       :
  191.     Next                                                            ;                       :
  192.                                                                     ;                       :
  193.     Return Joints                                                   ;                       :
  194. End Function                                                        ;                       :
  195. ; -------------------------------------------------------------------------------------------
  196.  
  197. ; -------------------------------------------------------------------------------------------
  198. Function ms3dLoadKeyRot(Stream,Count)                               ;         KeyRot        :
  199.     Local KeyRot,I                                                  ;-----------------------:
  200.                                                                     ;                       :
  201.     KeyRot = CreateBank(Count * 16)                                 ;                       :
  202.                                                                     ;                       :
  203.     For I = 1 To Count                                              ;                       :
  204.        PokeFloat KeyRot,(I - 1) * 16 + 00,ReadFloat#(Stream)        ; Time                  :
  205.        ReadBytes KeyRot,Stream,(I - 1) * 16 + 04,12                 ; Rotation              :
  206.     Next                                                            ;                       :
  207.                                                                     ;                       :
  208.     Return KeyRot                                                   ;                       :
  209. End Function                                                        ;                       :
  210. ; -------------------------------------------------------------------------------------------
  211.  
  212. ; -------------------------------------------------------------------------------------------
  213. Function ms3dLoadKeyPos(Stream,Count)                               ;         KeyPos        :
  214.     Local KeyPos,I                                                  ;-----------------------:
  215.                                                                     ;                       :
  216.     KeyPos = CreateBank(Count * 16)                                 ;                       :
  217.                                                                     ;                       :
  218.     For I = 1 To Count                                              ;                       :
  219.        PokeFloat KeyPos,(I - 1) * 16 + 00,ReadFloat#(Stream)        ; Time                  :
  220.        ReadBytes KeyPos,Stream,(I - 1) * 16 + 04,12                 ; Position              :
  221.     Next                                                            ;                       :
  222.                                                                     ;                       :
  223.     Return KeyRot                                                   ;                       :
  224. End Function                                                        ;                       :
  225. ; -------------------------------------------------------------------------------------------
  226.  
  227. ; -------------------------------------------------------------------------------------------
  228. Function ms3dCreateMaterials(File$,BnkMaterials)
  229.     Local MaterialCount,Material,I,Mode,J
  230.     Local Texturefile$,Alphafile$,Texture,Alphamap
  231.     Local R,G,B,Brush
  232.  
  233.     MaterialCount = PeekShort(BnkMaterials,0)
  234.     Material      = CreateBank(MaterialCount * 4)
  235.  
  236.     For I = 1 To MaterialCount
  237.         If PeekByte(BnkMaterials,(I - 1) * 277 + 22) = 128 Then
  238.             Mode = 64
  239.         Else
  240.             Mode = 1
  241.         EndIf
  242.  
  243.         For J = (I - 1) * 277 + 023 To (I - 1) * 277 + 151
  244.             If PeekByte(BnkMaterials,J) <> 0 Then
  245.                 Texturefile$ = Texturefile$ + Chr$(PeekByte(BnkMaterials,J))
  246.             Else
  247.                 Exit
  248.             EndIf
  249.         Next
  250.         Texturefile$ = ms3dGetPath$(File$,Texturefile$)
  251.  
  252.         For J = (I - 1) * 277 + 151 To (I - 1) * 277 + 289
  253.             If PeekByte(BnkMaterials,J) <> 0 Then
  254.                 Alphafile$ = Alphafile$ + Chr$(PeekByte(BnkMaterials,J))
  255.             Else
  256.                 Exit
  257.             EndIf
  258.         Next
  259.         Alphafile$ = ms3dGetPath$(File$,Alphafile$)
  260.  
  261.         Texture = LoadTexture(Texturefile$,Mode)
  262.         R = PeekFloat#(BnkMaterials,(I - 1) * 277 + 02) * 255.0
  263.         G = PeekFloat#(BnkMaterials,(I - 1) * 277 + 06) * 255.0
  264.         B = PeekFloat#(BnkMaterials,(I - 1) * 277 + 10) * 255.0
  265.  
  266.         If Texture = False Then
  267.             Brush = CreateBrush(R,G,B)
  268.         Else
  269.             FreeTexture Texture
  270.             Alphamap = LoadTexture(Alphafile$)
  271.             If Alphamap Then
  272.                 Texture = LoadTexture(Texturefile$,Mode + 2)
  273.                 ms3dSetAlphamap(Texture,Alphamap)
  274.                 FreeTexture Alphamap
  275.             Else
  276.                 Texture = LoadTexture(Texturefile$,Mode)
  277.             EndIf
  278.             Brush = CreateBrush()
  279.             BrushTexture Brush,Texture
  280.             BrushColor   Brush,R,G,B
  281.             FreeTexture  Texture
  282.         EndIf
  283.         BrushShininess Brush,PeekFloat#(BnkMaterials,(I - 1) * 277 + 14)
  284.         BrushAlpha     Brush,PeekFloat#(BnkMaterials,(I - 1) * 277 + 18)
  285.  
  286.         PokeInt Material,(I - 1) * 4,Brush
  287.     Next
  288.  
  289.     Return Material
  290. End Function
  291. ; -------------------------------------------------------------------------------------------
  292.  
  293. ; -------------------------------------------------------------------------------------------
  294. Function ms3dCreateGroups(Mesh,BnkGroups,BnkMaterial)
  295.     Local GroupCount,Group,I,Material,Brush,Surface
  296.  
  297.     GroupCount = PeekShort(BnkGroups,0)
  298.     Group      = CreateBank(GroupCount * 4)
  299.  
  300.     For I = 1 To GroupCount
  301.         Material = PeekByte(BnkGroups,I + 1)
  302.         If Material <> 255 Then
  303.             Brush = PeekInt(BnkMaterial,Material * 4)
  304.             Surface = CreateSurface(Mesh,Brush)
  305.         Else
  306.             Surface = CreateSurface(Mesh)
  307.         EndIf
  308.  
  309.         PokeInt Group,(I - 1) * 4,Surface
  310.     Next
  311.  
  312.     Return Group
  313. End Function
  314. ; -------------------------------------------------------------------------------------------
  315.  
  316. ; -------------------------------------------------------------------------------------------
  317. Function ms3dCreateVertices(BnkVertices,BnkTriangles,BnkGroup)
  318.     Local VertexCount,Group,TriangleCount,I,GI,V0,V1,V2,X#,Y#,Z#
  319.     Local Surface,NX0#,NY0#,NZ0#,NX1#,NY1#,NZ1#,NX2#,NY2#,NZ2#
  320.     Local TU0#,TV0#,TU1#,TV1#,TU2#,TV2#
  321.  
  322.     VertexCount   = PeekShort(BnkVertices,0)
  323.     Group        = CreateBank(VertexCount)
  324.     TriangleCount = PeekShort(BnkTriangles,0)
  325.  
  326.     For I = 1 To TriangleCount
  327.         GI = PeekByte(BnkTriangles,(I - 1) * 67 + 68)
  328.         V0 = PeekShort(BnkTriangles,(I - 1) * 67 + 02)
  329.         V1 = PeekShort(BnkTriangles,(I - 1) * 67 + 04)
  330.         V2 = PeekShort(BnkTriangles,(I - 1) * 67 + 06)
  331.         PokeByte Group,V0,GI
  332.         PokeByte Group,V1,GI
  333.         PokeByte Group,V2,GI
  334.     Next
  335.  
  336.     For I = 1 To VertexCount
  337.         X# = PeekFloat#(BnkVertices,(I - 1) * 13 + 02)
  338.         Y# = PeekFloat#(BnkVertices,(I - 1) * 13 + 06)
  339.         Z# = PeekFloat#(BnkVertices,(I - 1) * 13 + 10)
  340.         GI = PeekByte(Group,I - 1)
  341.         Surface = PeekInt(BnkGroup,GI * 4)
  342.         AddVertex(Surface,X#,Y#,Z#)
  343.     Next
  344.     FreeBank Group
  345.  
  346.     For I = 1 To TriangleCount
  347.         GI = PeekByte(BnkTriangles,(I - 1) * 67 + 68)
  348.         V0 = PeekShort(BnkTriangles,(I - 1) * 67 + 02)
  349.         V1 = PeekShort(BnkTriangles,(I - 1) * 67 + 04)
  350.         V2 = PeekShort(BnkTriangles,(I - 1) * 67 + 06)
  351.         Surface = PeekInt(BnkGroup,GI * 4)
  352.  
  353.         NX0# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 08)
  354.         NY0# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 12)
  355.         NZ0# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 16)
  356.         NX1# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 20)
  357.         NY1# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 24)
  358.         NZ1# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 28)
  359.         NX2# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 32)
  360.         NY2# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 36)
  361.         NZ2# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 40)
  362.         TU0# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 44)
  363.         TU1# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 48)
  364.         TU2# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 52)
  365.         TV0# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 56)
  366.         TV1# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 60)
  367.         TV2# = PeekFloat#(BnkTriangles,(I - 1) * 67 + 64)
  368.        
  369.         VertexNormal Surface,V0,NX0#,NY0#,NZ0#
  370.         VertexNormal Surface,V1,NX1#,NY1#,NZ1#
  371.         VertexNormal Surface,V2,NX2#,NY2#,NZ2#
  372.         VertexTexCoords Surface,V0,TU0#,TV0#
  373.         VertexTexCoords Surface,V1,TU1#,TV1#
  374.         VertexTexCoords Surface,V2,TU2#,TV2#
  375.     Next
  376. End Function
  377. ; -------------------------------------------------------------------------------------------
  378.  
  379. ; -------------------------------------------------------------------------------------------
  380. Function ms3dCreateTriangles(BnkTriangles,BnkGroup)
  381.     Local TriangleCount,I,GI,V0,V1,V2,Surface
  382.  
  383.     TriangleCount = PeekShort(BnkTriangles,0)
  384.     For I = 1 To TriangleCount
  385.         GI = PeekByte(BnkTriangles,(I - 1) * 67 + 68)
  386.         V0 = PeekShort(BnkTriangles,(I - 1) * 67 + 02)
  387.         V1 = PeekShort(BnkTriangles,(I - 1) * 67 + 04)
  388.         V2 = PeekShort(BnkTriangles,(I - 1) * 67 + 06)
  389.         Surface = PeekInt(BnkGroup,GI * 4)
  390.         AddTriangle Surface,V0,V1,V2
  391.     Next
  392. End Function
  393. ; -------------------------------------------------------------------------------------------
  394.  
  395. ; -------------------------------------------------------------------------------------------
  396. Function ms3dGetPath$(File1$,File2$)
  397.     Local I,LastBackshlash
  398.  
  399.     If Left$(File2$,1) = "." Or Left$(File2$,1) = "" Then
  400.         For I = 1 To Len(File1$)
  401.             If Mid$(File1$,I,1) = "" Then LastBackshlash = I
  402.         Next
  403.         Return Left$(File1$,LastBackshlash) + File2$
  404.     Else
  405.         Return File2$
  406.     EndIf
  407. End Function
  408. ; -------------------------------------------------------------------------------------------
  409.  
  410. ; -------------------------------------------------------------------------------------------
  411. Function ms3dSetAlphamap(Texture,Alphamap)
  412.     Local OldBuffer,TexBuffer,AlphaBuffer
  413.     Local TexWidth,TexHeight,AlphaWidth
  414.     Local AlphaHeight,M1#,M2#,X,Y,RGB1,R,G,B
  415.     Local RGB2,A,ARGB
  416.  
  417.     OldBuffer   = GraphicsBuffer()
  418.     TexBuffer   = TextureBuffer(Texture)
  419.     AlphaBuffer = TextureBuffer(Alphamap)
  420.     TexWidth    = TextureWidth(Texture)
  421.     TexHeight   = TextureHeight(Texture)
  422.     AlphaWidth  = TextureWidth(Alphamap)
  423.     AlphaHeight = TextureHeight(Alphamap)
  424.     M1#         = Float#(TexWidth) / Float#(AlphaWidth)
  425.     M2#         = Float#(TexHeight) / Float#(AlphaHeight)
  426.  
  427.     SetBuffer TexBuffer : LockBuffer
  428.     LockBuffer AlphaBuffer
  429.     For X = 0 To TexWidth - 1
  430.         For Y = 0 To TexHeight - 1
  431.             RGB1 = ReadPixelFast(X,Y,TexBuffer)
  432.             R    = (RGB1 And $FF0000) / $10000
  433.             G    = (RGB1 And $FF00) / $100
  434.             B    = (RGB1 And $FF)
  435.  
  436.             RGB2 = ReadPixelFast(M1# * X,M2# * Y,AlphaBuffer)
  437.             A    = (RGB2 And $FF0000) / $10000
  438.             ARGB = A * $1000000 + R * $10000 + G * $100 + B
  439.             WritePixelFast(X,Y,ARGB,TexBuffer)
  440.         Next
  441.     Next
  442.     UnlockBuffer AlphaBuffer
  443.     UnlockBuffer : SetBuffer OldBuffer
  444. End Function
  445. ; -------------------------------------------------------------------------------------------


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal