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)