im trying to make a camera in roblox with raytracing. it isnt working all that well. when i use it, the image comes out just as blue. can someone help? heres the server script:
--Made by AppleBLOXIAN
local folder = script.Parent
local tool = folder.Parent
local req = folder:WaitForChild("Request")
local capev = game.ReplicatedStorage:WaitForChild("OnImageCapture")
local settings = tool:WaitForChild("Settings")
local capheight = settings:WaitForChild("CaptureHeight")
local capwidth = settings:WaitForChild("CaptureWidth")
function getHex(num)
local chars = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}
local hex = ""
local x = num / 16
local y = num % 16
hex = chars[math.floor(x) + 1] .. chars[math.floor(y) + 1]
return hex
end
function color3ToHex(color3)
if not color3["r"] then return "000000" end
local r, g, b = color3.r * 255, color3.g * 255, color3.b * 255
return "" .. getHex(r) .. getHex(g) .. getHex(b)
end
function capture()
local image = {
width = capwidth.Value,
height = capheight.Value,
data = {}
}
--init
print("Initializing...")
local rays; do
rays = {}
local halfwidth = image.width / 2
local halfheight = image.height / 2
local startpos = tool:WaitForChild("Handle").Position - Vector3.new(halfwidth*0.05,halfheight*0.05,0)
print("Raycasting...")
local cx = startpos.X
local cy = startpos.Y
local cpos = startpos
for i = 1,image.height do
for i = 1,image.width do
local ray = Ray.new(cpos,tool:WaitForChild("Handle").CFrame.lookVector)
local hit,pos,normal = workspace:FindPartOnRay(ray)
if hit then
local color = color3ToHex(hit.Color)
image.data[#image.data+1] = color
else
local color = color3ToHex(Color3.fromRGB(0,255,255))
image.data[#image.data+1] = color
end
cx = cx + 0.05
cpos = Vector3.new(cx,cy,0)
end
cx = startpos.X
cy = cy + 0.05
cpos = Vector3.new(cx,cy,0)
end
end
--handle image
print("Compiling...")
image = game:GetService("HttpService"):JSONEncode(image)
print("Done!")
capev:Fire(image)
end
function onServerEvent(plr,req)
if req == "Capture" then
capture()
end
end
req.OnServerEvent:connect(onServerEvent)
and heres the local script:
--Made by AppleBLOXIAN
local folder = script.Parent
local tool = folder.Parent
local guis = tool:WaitForChild("GUIs")
local gui = guis:WaitForChild("ScreenGui")
local button = gui:WaitForChild("TextButton")
local req = folder:WaitForChild("Request")
function onEquip()
gui.Parent = game.Players.LocalPlayer:WaitForChild("PlayerGui")
end
function onUnEquip()
gui.Parent = guis
end
function onClick()
req:FireServer("Capture")
spawn(function()
button.Text = "Captured"
wait(0.5)
button.Text = "Capture"
end)
end
tool.Equipped:connect(onEquip)
tool.Unequipped:connect(onUnEquip)
button.MouseButton1Click:connect(onClick)
and heres another server script displaying the image on a surfacegui:
local sgui = script.Parent
local imgfolder = sgui:WaitForChild("Image")
local capev = game.ReplicatedStorage:WaitForChild("OnImageCapture")
function hexToColor3(hex)
local r,g,b = hex:sub(1,2),hex:sub(3,4),hex:sub(5,6)
r,g,b = tonumber(r,16),tonumber(g,16),tonumber(b,16)
return Color3.fromRGB(r,g,b)
end
function stringSplit(s)
local tab = {}
for w in s:gmatch("%S+") do
tab[#tab+1] = w
end
return tab
end
function renderImage(x,y,hex)
local hextab = stringSplit(hex)
local cx = 1
local cy = 1
local frm; do
frm = Instance.new("Frame")
frm.Size = UDim2.new(0,x,0,y)
frm.BackgroundTransparency = 1
end
spawn(function()
for i,v in pairs(hextab) do
local pixel; do
pixel = Instance.new("Frame",frm)
pixel.Size = UDim2.new(0,1,0,1)
pixel.Position = UDim2.new(0,cx-1,0,cy-1)
pixel.BackgroundColor3 = hexToColor3(v)
pixel.BorderSizePixel = 0
end
if cx == x then
cx = 1
cy = cy+1
coroutine.yield()
else
cx = cx+1
if cx == x/4 then
coroutine.yield()
end
end
end
end)
return frm
end
function onEvent(json)
imgfolder:ClearAllChildren()
local imgdata = game:GetService("HttpService"):JSONDecode(json)
local x = imgdata.width
local y = imgdata.height
local hex = table.concat(imgdata.data," ")
local img = renderImage(x,y,hex)
img.Parent = imgfolder
end
capev.Event:connect(onEvent)
