Ooops
February 25, 2021, 03:02:27 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
»
3D Graphics - Effects
»
[bb] Image/Texture To Model by GIB3D [ 1+ years ago ]
« previous
next »
Print
Pages: [
1
]
Go Down
Author
Topic: [bb] Image/Texture To Model by GIB3D [ 1+ years ago ] (Read 631 times)
BlitzBot
Jr. Member
Posts: 1
[bb] Image/Texture To Model by GIB3D [ 1+ years ago ]
«
on:
June 29, 2017, 12:28:38 AM »
Title :
Image/Texture To Model
Author :
GIB3D
Posted :
1+ years ago
Description :
This may not be very useful but it was fun making it. I started this tiny project by loading an image, then I made and colored a cube for each pixel. Next I made a CreatePixel function which created a triangle mesh for each image pixel. Each vertex on the triangle were separated by the colors RGB.
Alpha wouldn't work normally with Images so I made a TextureToModel version and that worked. Then I added another pixel type that is a square. One vertex was colored using all the colors "RGBA" then the other ones were colored with separate colors for each vertex (Ex. Vertex1 = Red, Vertex2 = Green, Vertex3 = Blue, Vertex4 = White).
After that I figured I should try making a pixel that looks just like the one on my LCD screen. I then coded in a little inset to the edges of that last pixel type so that blackness can come through.
All the pixels are stored in the mesh called "Screen"
Hope you like it
Code :
Code: BlitzBasic
Graphics3D
800
,
600
,
0
,
2
SetBuffer
BackBuffer
(
)
SeedRnd
MilliSecs
(
)
Const
VertexLimit =
16379
Global
Screen =
CreateMesh
(
)
:
EntityFX
Screen,
1
+
2
+
16
+
32
Global
ScreenSurface =
CreateSurface
(
Screen
)
Global
Light =
CreateLight
(
)
Global
PivotYaw =
CreatePivot
(
)
:
PositionEntity
PivotYaw,
0
,
20
,
0
:
RotateEntity
PivotYaw,
0
,
180
,
0
Global
PivotPitch =
CreatePivot
(
PivotYaw
)
:
PositionEntity
PivotPitch,
0
,
0
,
0
:
RotateEntity
PivotPitch,
90
,
0
,
0
Global
Camera =
CreateCamera
(
PivotPitch
)
CameraZoom
Camera,.8
;WARNING: If you load an image/texture that is too large, it may take a very long time for it to finish loading.
;It may (Note the "may") be safer to just use images at/under 1024x768 and textures at/under 1024x1024.
;It depends on the computer uberness...
;Start here by entering an image/texture
;The different pixel_type numbers are specified in the CreatePixel function
;ImageToModel("Image.png","ImageAlpha.png")
TextureToModel
(
"Texture.png"
,
1
+
256
,
3
)
Print
"Hold left mouse button to use Mouse Look"
Print
"WASD keys to move"
Print
"Press any key to start"
WaitKey
;PositionEntity CreatePlane(),0,-1,0
MoveMouse
GraphicsWidth
(
)
*.5,
GraphicsHeight
(
)
*.5
MouseXSpeed
(
)
:
MouseYSpeed
(
)
While
Not
KeyDown
(
1
)
If
MouseHit
(
2
)
MoveMouse
GraphicsWidth
(
)
*.5,
GraphicsHeight
(
)
*.5
MouseXSpeed
(
)
:
MouseYSpeed
(
)
EndIf
If
MouseDown
(
2
)
FUNC_GTATurnCamera
(
PivotPitch,PivotYaw
)
EndIf
FUNC_MoveEntity
(
PivotYaw,
10
)
UpdateWorld
RenderWorld
Flip
0
Delay
(
10
)
Wend
FreeEntity
Screen
End
Function
CreatePixel
(
x#,y#,z#,red,green,blue,alpha#=
1
,pixel_type=
1
,inset#=.01
)
;1 - Triangle Pixel
;2 - Square Pixel
;3 - LCD Pixel
If
CountVertices
(
ScreenSurface
)
> VertexLimit
ScreenSurface =
CreateSurface
(
Screen
)
EndIf
Local
Surface = ScreenSurface
Local
v1,v2,v3,v4
Select
pixel_type
Case
1
v1 =
AddVertex
(
Surface,x,y,z
)
;1 Left
v2 =
AddVertex
(
Surface,x+.5,y,z+
1
)
;0 Top
v3 =
AddVertex
(
Surface,x+
1
,y,z
)
;2 Right
AddTriangle
(
Surface,v1,v2,v3
)
VertexColor
(
Surface,v1,red,
0
,
0
,alpha
)
VertexColor
(
Surface,v2,
0
,green,
0
,alpha
)
VertexColor
(
Surface,v3,
0
,
0
,blue,alpha
)
Case
2
v1 =
AddVertex
(
Surface,x,y,z
)
;Bottom Left
v2 =
AddVertex
(
Surface,x,y,z+
1
)
;Top Left
v3 =
AddVertex
(
Surface,x+
1
,y,z+
1
)
;Top Right
v4 =
AddVertex
(
Surface,x+
1
,y,z
)
;Bottom Right
AddTriangle
(
Surface,v1,v2,v3
)
AddTriangle
(
Surface,v4,v1,v3
)
VertexColor
(
Surface,v1,red,
0
,
0
,alpha
)
VertexColor
(
Surface,v2,
0
,green,
0
,alpha
)
VertexColor
(
Surface,v3,
0
,
0
,blue,alpha
)
VertexColor
(
Surface,v4,red,green,blue,alpha
)
Case
3
Local
N# =
1.0
/
3.0
;Red
v1 =
AddVertex
(
Surface,x+inset,y,z+inset
)
;Bottom Left
v2 =
AddVertex
(
Surface,x+inset,y,z+
1
-inset
)
;Top Left
v3 =
AddVertex
(
Surface,x+N,y,z+
1
-inset
)
;Top Right
v4 =
AddVertex
(
Surface,x+N,y,z+inset
)
;Bottom Right
AddTriangle
(
Surface,v1,v2,v3
)
AddTriangle
(
Surface,v4,v1,v3
)
VertexColor
(
Surface,v1,red,
0
,
0
,alpha
)
VertexColor
(
Surface,v2,red,
0
,
0
,alpha
)
VertexColor
(
Surface,v3,red,
0
,
0
,alpha
)
VertexColor
(
Surface,v4,red,
0
,
0
,alpha
)
;Green
v1 =
AddVertex
(
Surface,x+N,y,z+inset
)
;Bottom Left
v2 =
AddVertex
(
Surface,x+N,y,z+
1
-inset
)
;Top Left
v3 =
AddVertex
(
Surface,x+
(
N*
2
)
,y,z+
1
-inset
)
;Top Right
v4 =
AddVertex
(
Surface,x+
(
N*
2
)
,y,z+inset
)
;Bottom Right
AddTriangle
(
Surface,v1,v2,v3
)
AddTriangle
(
Surface,v4,v1,v3
)
VertexColor
(
Surface,v1,
0
,green,
0
,alpha
)
VertexColor
(
Surface,v2,
0
,green,
0
,alpha
)
VertexColor
(
Surface,v3,
0
,green,
0
,alpha
)
VertexColor
(
Surface,v4,
0
,green,
0
,alpha
)
;Blue
v1 =
AddVertex
(
Surface,x+
(
N*
2
)
,y,z+inset
)
;Bottom Left
v2 =
AddVertex
(
Surface,x+
(
N*
2
)
,y,z+
1
-inset
)
;Top Left
v3 =
AddVertex
(
Surface,x+
1
-inset,y,z+
1
-inset
)
;Top Right
v4 =
AddVertex
(
Surface,x+
1
-inset,y,z+inset
)
;Bottom Right
AddTriangle
(
Surface,v1,v2,v3
)
AddTriangle
(
Surface,v4,v1,v3
)
VertexColor
(
Surface,v1,
0
,
0
,blue,alpha
)
VertexColor
(
Surface,v2,
0
,
0
,blue,alpha
)
VertexColor
(
Surface,v3,
0
,
0
,blue,alpha
)
VertexColor
(
Surface,v4,
0
,
0
,blue,alpha
)
End Select
End Function
Function
FUNC_MoveEntity
(
entity,speed_multiplier#=
1
)
TFormVector
(
KeyDown
(
32
)
-
KeyDown
(
30
)
)
*speed_multiplier,
0
,
(
KeyDown
(
17
)
-
KeyDown
(
31
)
)
*speed_multiplier,Camera,
0
TranslateEntity
entity,
TFormedX
(
)
,
TFormedY
(
)
,
TFormedZ
(
)
End Function
Function
FUNC_GTATurnCamera
(
pitch_pivot,yaw_pivot,turn_multiplier#=
1
)
TurnEntity
yaw_pivot,
0
,-
MouseXSpeed
(
)
*turn_multiplier,
0
TurnEntity
pitch_pivot,
MouseYSpeed
(
)
*turn_multiplier,
0
,
0
RotateEntity
pitch_pivot,
EntityPitch
(
pitch_pivot
)
,
0
,
0
MoveMouse
GraphicsWidth
(
)
/
2
,
GraphicsHeight
(
)
/
2
End Function
Function
ImageToModel
(
file$,alphafile$=
""
,pixel_type=
1
,inset#=.01
)
Local
Image =
LoadImage
(
file
)
Local
ImageAlpha =
LoadImage
(
alphafile
)
Local
Width,Height
Local
RGB,R,G,B,A#,Pixels,Dupe
If
Image
DebugLog
"ImageToModel("
+file+
")"
Width =
ImageWidth
(
Image
)
Height =
ImageHeight
(
Image
)
If
ImageAlpha
DebugLog
"ImageAlpha exists"
LockBuffer
ImageBuffer
(
ImageAlpha
)
EndIf
LockBuffer
ImageBuffer
(
Image
)
For
x =
0
To
Width-
1
For
y =
0
To
Height-
1
A =
1
If
ImageAlpha
RGB =
ReadPixelFast
(
x,y,
ImageBuffer
(
ImageAlpha
)
)
R = GetRed
(
RGB
)
G = GetGreen
(
RGB
)
B = GetBlue
(
RGB
)
A =
(
(
R+G+B
)
/
3.0
)
/
255.0
EndIf
RGB =
ReadPixelFast
(
x,y,
ImageBuffer
(
Image
)
)
R = GetRed
(
RGB
)
G = GetGreen
(
RGB
)
B = GetBlue
(
RGB
)
If
R
Or
G
Or
B
CreatePixel
(
(
Width-x
)
-
(
Width*.5
)
,
0
,y-
(
Height*.5
)
,R,G,B,A,pixel_type,inset
)
EndIf
Pixels=Pixels+
1
Next
Next
UnlockBuffer
ImageBuffer
(
Image
)
If
ImageAlpha
UnlockBuffer
ImageBuffer
(
ImageAlpha
)
FreeImage
ImageAlpha
EndIf
DebugLog
"Done : "
+Pixels+
"Pixels"
FreeImage
Image
Return
True
EndIf
DebugLog
"File ("
+file+
") Not found"
End Function
Function
TextureToModel
(
file$,flags=
1
+
2
,pixel_type=
1
,inset#=.01
)
Local
Texture =
LoadTexture
(
file,flags
)
Local
Width,Height
Local
RGB,R,G,B,A#,Pixels,Dupe
If
Texture
DebugLog
"TextureToModel("
+file+
")"
Width =
TextureWidth
(
Texture
)
Height =
TextureHeight
(
Texture
)
LockBuffer
TextureBuffer
(
Texture
)
For
x =
0
To
Width-
1
For
y =
0
To
Height-
1
RGB =
ReadPixelFast
(
x,y,
TextureBuffer
(
Texture
)
)
R = GetRed
(
RGB
)
G = GetGreen
(
RGB
)
B = GetBlue
(
RGB
)
A = GetAlpha
(
RGB
)
/
255.0
CreatePixel
(
(
Width-x
)
-
(
Width*.5
)
,
0
,y-
(
Height*.5
)
,R,G,B,A,pixel_type,inset
)
Pixels=Pixels+
1
Next
Next
UnlockBuffer
TextureBuffer
(
Texture
)
DebugLog
"Done : "
+Pixels+
"Pixels"
FreeTexture
Texture
Return
True
EndIf
DebugLog
"File ("
+file+
") Not found"
End Function
Function
GetRed
(
rgb
)
Return
(
rgb
And
$FF0000
)
Shr
16
End Function
Function
GetGreen
(
rgb
)
Return
(
rgb
And
$FF00
)
Shr
8
End Function
Function
GetBlue
(
rgb
)
Return
rgb
And
$FF
End Function
Function
GetAlpha
(
rgb
)
Return
(
rgb
And
$FF000000
)
Shr
24
End Function
Comments :
_PJ_(Posted 1+ years ago)
Interesting effect, helps to show how RGB composites are made
GIB3D(Posted 1+ years ago)
After I went to bed I was thinking more about it. Maybe I/we could use this to make a virtual Monitor. That'd be awesome! Changing virtual pixels in real time on a virtual monitor.
_PJ_(Posted 1+ years ago)
What about the yellow pixels?!?!
(j/k)
Logged
Print
Pages: [
1
]
Go Up
« previous
next »
SyntaxBomb - Indie Coders
»
Languages & Coding
»
Blitz Code Archives
»
3D Graphics - Effects
»
[bb] Image/Texture To Model by GIB3D [ 1+ years ago ]
SimplePortal 2.3.6 © 2008-2014, SimplePortal