Tomas Posted January 22, 2017 Posted January 22, 2017 How i can rotate 2d image? I have this code, but it rotates viewport not image. Script.Tx = Texture:Load("Materials/Compass/compass.tex") function Script:Start() self.camera = Camera:Create() self.camera:SetRotation(self.entity:GetRotation(true)) self.camera:SetPosition(self.entity:GetPosition(true)+Vec3(0,1.8,0)) end function Script:PostRender() local context=Context:GetCurrent() local rot=Vec3() rot=self.entity:GetRotation(true) context:SetRotation(rot.y) context:DrawImage(self.Tx,100,100,10,100) end Quote
macklebee Posted January 22, 2017 Posted January 22, 2017 One way to do it: http://www.leadwerks.com/werkspace/topic/13422-draw-image-mirror-options/#entry94355 Quote Win7 64bit / Intel i7-2600 CPU @ 3.9 GHz / 16 GB DDR3 / NVIDIA GeForce GTX 590 LE / 3DWS / BMX / Hexagon macklebee's channel
Tomas Posted January 22, 2017 Author Posted January 22, 2017 Thanks for reply. I tried the code, downloaded the shader, but it didnt worked for me as it should. Dont know why, but the shader wouldnt load into engine. I copied the shader contents into "drawimage.shader" that comes with engine, and then it worked. Theres my code: Script.Tx = Texture:Load("Materials/Compass/compass.tex") function Script:Start() self.camera = Camera:Create() self.camera:SetRotation(self.entity:GetRotation(true)) self.camera:SetPosition(self.entity:GetPosition(true)+Vec3(0,1.8,0)) self.imageshader = Shader:Load("Shaders/Drawing/drawimage.shader") end function Script:PostRender() local context=Context:GetCurrent() context:SetShader(imageshader) self.imageshader:SetVec2("pivotposition", Vec2(100.0,100.0)) self.imageshader:SetFloat("angle",45) local rot=Vec3() rot=self.entity:GetRotation(true) --context:SetRotation(rot.y) context:DrawImage(self.Tx,100,100,200,200) context:DrawLine(100,100,200,200) end Any ideas what could be wrong? Quote
macklebee Posted January 22, 2017 Posted January 22, 2017 Two things off the bat that I see is that you didn't load the custom shader and then you did not set the context's shader to it. self.imageshader = Shader:Load("Shaders/Drawing/drawimage.shader") should be: self.imageshader = Shader:Load("Shaders/Drawing/drawimage_enhanced.shader") and context:SetShader(imageshader) should be: context:SetShader(self.imageshader) Also, the correct syntax for the PostRender is: function Script:PostRender(context) Also I would recommend capturing the current context shader prior to setting to the custom and then setting it back prior to ending the PostRender: Script.Tx = Texture:Load("Materials/Compass/compass.tex") function Script:Start() self.camera = Camera:Create() self.camera:SetRotation(self.entity:GetRotation(true)) self.camera:SetPosition(self.entity:GetPosition(true)+Vec3(0,1.8,0)) self.imageshader = Shader:Load("Shaders/Drawing/drawimage_enhanced.shader") end function Script:PostRender(context) local oldshader = context:GetShader() context:SetShader(self.imageshader) self.imageshader:SetVec2("pivotposition", Vec2(100.0,100.0)) self.imageshader:SetFloat("angle",45) context:DrawImage(self.Tx,100,100,200,200) context:SetShader(oldshader) context:DrawLine(100,100,200,200) end EDIT: I see you edited your post. I do not recommend that you overwrite an existing standard shader that comes with the engine as there are possiblities of it getting overwritten from engine updates. If you use the code i posted, it will work without the need to overwrite existing shaders. Quote Win7 64bit / Intel i7-2600 CPU @ 3.9 GHz / 16 GB DDR3 / NVIDIA GeForce GTX 590 LE / 3DWS / BMX / Hexagon macklebee's channel
Tomas Posted January 22, 2017 Author Posted January 22, 2017 Thanks macklebee for your help. Code works now. 1 Quote
Jazz Posted January 22, 2017 Posted January 22, 2017 Nice shader macklebee. Just made a (really) simple compass in PS for anyone to use/play with. I wrote the instructions out so new people can follow it. Extract the zip file into the Materials directory. This goes at the top of FPSPlayer.lua: Script.imageshader = Shader:Load("Shaders/drawimage_enhanced.shader") Script.Tx = Texture:Load("Materials/compass.tex") Script.Tx2 = Texture:Load("Materials/compasspointer.tex") This goes in FPSPlayer.lua's PostRender function after context:SetBlendMode(Blend.Alpha) context:DrawImage(self.Tx,100,100,200,200) local oldShader = context:GetShader() context:SetShader(self.imageshader) local angle = self.entity:GetRotation(true) self.imageshader:SetVec2("pivotposition", Vec2(100.0,100.0)) self.imageshader:SetFloat("angle", angle.y) context:DrawImage(self.Tx2,100,100,200,200) context:SetShader(oldShader) If you're using the release version (4.2) where the SetInput bug exists change the following line or player rotation won't be updated when standing still: self.entity:SetInput(self.camRotation.y, playerMovement.z, playerMovement.x, jump , false, 1.0, 0.5, true) to self.entity:SetInput(self.camRotation.y, playerMovement.z + 0.0000001, playerMovement.x, jump , false, 1.0, 0.5, true) compass.zip 3 Quote --- Scott Using Windows 7 Ultimate 64 bit/Core I7-2700K @ 4312mhz/24G RAM/Nvidia GTX 1060
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.