March 03, 2021, 11:05:08 AM
Welcome,
Guest
. Please
login
or
register
.
Did you miss your
activation email
?
1 Hour
1 Day
1 Week
1 Month
Forever
Login with username, password and session length
Home
Forum
Help
Search
Gallery
Login
Register
SyntaxBomb - Indie Coders
»
Languages & Coding
»
Blitz Code Archives
»
Graphics
»
[bb] Create seamless texture function by elias_t [ 1+ years ago ]
« previous
next »
Print
Pages: [
1
]
Go Down
Author
Topic: [bb] Create seamless texture function by elias_t [ 1+ years ago ] (Read 682 times)
BlitzBot
Jr. Member
Posts: 1
[bb] Create seamless texture function by elias_t [ 1+ years ago ]
«
on:
June 29, 2017, 12:28:41 AM »
Title :
Create seamless texture function
Author :
elias_t
Posted :
1+ years ago
Description :
This is the "create seamless texture function".
I made this following the tutorial and code samples by Paul Bourke.
<a href="
http://astronomy.swin.edu.au/~pbourke/
" target="_blank">
http://astronomy.swin.edu.au/~pbourke/
[/url]
The image doesn't have to be square.
[ updated: added 2 new Linear methods]
Code :
Code: BlitzBasic
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;
; Seamless texture generation Function
;
; by elias_t
;
; Created after a tutorial by Paul Bourke.
;
; updated to make the linear methods work better.
;
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;example
Graphics
640
,
480
,
32
,
2
img=
LoadImage
(
"your_image.bmp"
)
;your image here
;0=Radial method
;1=Linear 1 method
;2=Linear 2 method
seamless=make_seamless
(
img,
0
)
SaveImage
(
seamless,
"seamless.bmp"
)
TileImage
seamless,
0
,
0
;DrawImage seamless,0,0
Flip
WaitKey
(
)
End
;*************************************************************************
;needed arrays
Dim
image
(
0
,
0
,
0
)
, diagonal
(
0
,
0
,
0
)
, tile
(
0
,
0
,
0
)
, mask
(
0
,
0
)
;img=image handle
;masktype= [0=Radial , 1=Linear] method
Function
make_seamless
(
img,masktype
)
Local
a1#,a2#,d#
;protect masktype
masktype=
Abs
(
masktype
)
If
masktype>
2
Then
masktype=
2
;find largest side of the image
x=
ImageWidth
(
img
)
y=
ImageHeight
(
img
)
;and resize the image to become square
If
x<>y
If
x>y
Then
N=x
If
y>x
Then
N=y
ResizeImage
img,N,N
EndIf
If
x=y
Then
N=x
Dim
image
(
N,N,
2
)
Dim
diagonal
(
N,N,
2
)
Dim
tile
(
N,N,
2
)
Dim
mask
(
N,N
)
LockBuffer
(
ImageBuffer
(
img
)
)
For
j=
0
To
N-
1
For
i=
0
To
N-
1
rgb=
ReadPixelFast
(
j,i,
ImageBuffer
(
img
)
)
image
(
i,j,
0
)
=
(
rgb
Shr
16
And
$ff
)
image
(
i,j,
1
)
=
(
rgb
Shr
8
And
$ff
)
image
(
i,j,
2
)
=
(
rgb
And
$ff
)
diagonal
(
(
i+N/
2
)
Mod
N ,
(
j+N/
2
)
Mod
N ,
0
)
= image
(
i,j,
0
)
diagonal
(
(
i+N/
2
)
Mod
N ,
(
j+N/
2
)
Mod
N ,
1
)
= image
(
i,j,
1
)
diagonal
(
(
i+N/
2
)
Mod
N ,
(
j+N/
2
)
Mod
N ,
2
)
= image
(
i,j,
2
)
Next
Next
UnlockBuffer
(
ImageBuffer
(
img
)
)
;try to make your own masktypes here
;Create the mask
For
i=
0
To
N/
2
-
1
For
j=
0
To
N/
2
-
1
Select
masktype
Case
0
;RADIAL
d =
Sqr
(
(
i-N/
2
)
*
(
i-N/
2
)
+
(
j-N/
2
)
*
(
j-N/
2
)
)
/
(
N/
2
)
Case
1
;LINEAR 1
If
(
N/
2
-i
)
<
(
N/
2
-j
)
d=
Sqr
(
(
j-N/
2
)
*
(
j-N/
2
)
)
/
(
N/
2
)
EndIf
If
(
N/
2
-i
)
>=
(
N/
2
-j
)
d=
Sqr
(
(
i-N/
2
)
*
(
i-N/
2
)
)
/
(
N/
2
)
EndIf
Case
2
;LINEAR 2
If
(
N/
2
-i
)
<
(
N/
2
-j
)
d=
Sqr
(
(
j-N
)
*
(
j-N
)
+
(
i-N
)
*
(
i-N
)
)
/
(
1.13
*N
)
EndIf
If
(
N/
2
-i
)
>=
(
N/
2
-j
)
d=
Sqr
(
(
i-N
)
*
(
i-N
)
+
(
j-N
)
*
(
j-N
)
)
/
(
1.13
*N
)
EndIf
End Select
;Scale d To range from 1 To 255
d =
255
-
(
255
* d
)
If
(
d <
1
)
Then
d =
1
If
(
d >
255
)
Then
d =
255
;Form the mask in Each quadrant
mask
(
i , j
)
= d
mask
(
i , N-
1
-j
)
= d
mask
(
N-
1
-i , j
)
= d
mask
(
N-
1
-i , N-
1
-j
)
= d
Next
Next
;Create the tile
For
j=
0
To
N-
1
For
i=
0
To
N-
1
a1 = mask
(
i,j
)
a2 = mask
(
(
i+N/
2
)
Mod
N ,
(
j+N/
2
)
Mod
N
)
tile
(
i,j,
0
)
= a1*image
(
i,j,
0
)
/
(
a1+a2
)
+ a2*diagonal
(
i,j,
0
)
/
(
a1+a2
)
tile
(
i,j,
1
)
= a1*image
(
i,j,
1
)
/
(
a1+a2
)
+ a2*diagonal
(
i,j,
1
)
/
(
a1+a2
)
tile
(
i,j,
2
)
= a1*image
(
i,j,
2
)
/
(
a1+a2
)
+ a2*diagonal
(
i,j,
2
)
/
(
a1+a2
)
Next
Next
;create the new tileable image
img2=
CreateImage
(
N,N
)
LockBuffer
(
ImageBuffer
(
img2
)
)
For
j=
0
To
N-
1
For
i=
0
To
N-
1
rgb=
(
tile
(
i,j,
0
)
Shl
16
)
+
(
tile
(
i,j,
1
)
Shl
8
)
+ tile
(
i,j,
2
)
WritePixelFast
j,i,rgb,
ImageBuffer
(
img2
)
Next
Next
UnlockBuffer
(
ImageBuffer
(
img2
)
)
Dim
image
(
0
,
0
,
0
)
, diagonal
(
0
,
0
,
0
)
, tile
(
0
,
0
,
0
)
, mask
(
0
,
0
)
;if it wasn't a square image, resize it back to the original scale
If
x<>y
Then
ResizeImage
img2,x,y
Return
img2
End Function
Comments :
Yo! Wazzup?(Posted 1+ years ago)
THANK YOU SO MUCH. I was actually going to consider buying a seamless texture thing, lol. Ah, the beautiness of the public domain
Logged
Print
Pages: [
1
]
Go Up
« previous
next »
SyntaxBomb - Indie Coders
»
Languages & Coding
»
Blitz Code Archives
»
Graphics
»
[bb] Create seamless texture function by elias_t [ 1+ years ago ]
SimplePortal 2.3.6 © 2008-2014, SimplePortal