diff --git a/scene_screenshot_buffer.lua b/scene_capture_texture.lua similarity index 97% rename from scene_screenshot_buffer.lua rename to scene_capture_texture.lua index d09ca85..64bbdc0 100644 --- a/scene_screenshot_buffer.lua +++ b/scene_capture_texture.lua @@ -5,7 +5,7 @@ hg.InputInit() hg.WindowSystemInit() res_x, res_y, tex_size = 1024, 1024, 1024 -win = hg.RenderInit('Frame Buffer Screenshot', res_x, res_y, hg.RF_VSync | hg.RF_MSAA4X) +win = hg.RenderInit('Scene Capture Texture', res_x, res_y, hg.RF_VSync | hg.RF_MSAA4X) -- Link precompiled assets folder to the project hg.AddAssetsFolder("resources_compiled") diff --git a/scene_capture_texture.py b/scene_capture_texture.py new file mode 100644 index 0000000..1d5f084 --- /dev/null +++ b/scene_capture_texture.py @@ -0,0 +1,83 @@ +# Toyota 2JZ-GTE Engine model by Serhii Denysenko (CGTrader: serhiidenysenko8256) +# URL : https://www.cgtrader.com/3d-models/vehicle/part/toyota-2jz-gte-engine-2932b715-2f42-4ecd-93ce-df9507c67ce8 + + +import harfang as hg +import math + +hg.InputInit() +hg.WindowSystemInit() + +res_x, res_y, tex_size = 1024, 1024, 1024 +win = hg.RenderInit('Scene Capture Texture', res_x, res_y, hg.RF_VSync | hg.RF_MSAA4X) + + +#Link precompiled assets folder to the project +hg.AddAssetsFolder("resources_compiled") + +#Create Pipeline +pipeline = hg.CreateForwardPipeline() +res = hg.PipelineResources() + +#Create a 1024*1024 frame buffer to draw the scene to +frame_buffer = hg.CreateFrameBuffer(tex_size, tex_size, hg.TF_RGBA8, hg.TF_D24, 4, 'framebuffer') +tex_color = hg.GetColorTexture(frame_buffer) + +#Prepare screenshot requirements +tex_color_ref = res.AddTexture("tex_rb", tex_color) +tex_readback = hg.CreateTexture(tex_size, tex_size, "readback", hg.TF_ReadBack | hg.TF_BlitDestination, hg.TF_RGBA8) +picture = hg.Picture(tex_size, tex_size, hg.PF_RGBA32) + +#Load scene +scene = hg.Scene() +ret = hg.LoadSceneFromAssets("car_engine/engine.scn", scene, res, hg.GetForwardPipelineInfo()) + +#Create the plane model +vtx_layout = hg.VertexLayoutPosFloatTexCoord0UInt8() +plane_mdl = hg.CreatePlaneModel(vtx_layout, 1, 1, 1, 1) +plane_ref = res.AddModel('plane', plane_mdl) + +#Prepare the plane shader program +plane_prg = hg.LoadProgramFromAssets('shaders/texture') + +#Main Loop +frame = 0 +state = "none" + +while not hg.ReadKeyboard().Key(hg.K_Escape) and hg.IsWindowOpen(win): + dt = hg.TickClock() + + scene.Update(dt) + + trs = scene.GetNode("engine_master").GetTransform() + trs.SetRot(trs.GetRot() + hg.Vec3(0, hg.Deg(15) * hg.time_to_sec_f(dt), 0)) + + view_id = 0 + view_id = hg.SubmitSceneToPipeline(view_id, scene, hg.IntRect(0, 0, res_x, res_y), True, pipeline, res, frame_buffer.handle) + + #Draw a plabe using the texture the scene was rendered to + hg.SetViewPerspective(view_id , 0, 0, res_x, res_y, hg.TranslationMat4(hg.Vec3(0, 0, -1.8))) + + val_uniforms = {hg.MakeUniformSetValue('color', hg.Vec4(1, 1, 1, 1))} + tex_uniforms = {hg.MakeUniformSetTexture('s_tex', tex_color, 0)} + + hg.DrawModel(view_id, plane_mdl, plane_prg, val_uniforms, tex_uniforms, + hg.TransformationMat4(hg.Vec3(0, 0, 0), hg.Vec3(math.pi / 2, 0, math.pi))) + + # Change state to capture when user press Space and Capture is not already running + if (hg.ReadKeyboard().Key(hg.K_Space) and state == "none"): + state = "capture" + frame_count_capture, view_id = hg.CaptureTexture(view_id, res, tex_color_ref, tex_readback, picture) + + # Take screenshot if CaptureTexture is ready and user pressed space + elif(state == "capture" and frame_count_capture <= frame): + png_filename = "screenshots/" + ".png" + hg.SavePNG(picture, png_filename) + state = "none" #Reset state to none to be able to screenshot again + + # + frame = hg.Frame() + hg.UpdateWindow(win) + +hg.RenderShutdown() +hg.DestroyWindow(win) \ No newline at end of file diff --git a/scene_screenshot_buffer.py b/scene_screenshot_buffer.py deleted file mode 100644 index e69de29..0000000