Tomas Posted January 22, 2017 Share 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 Link to comment Share on other sites More sharing options...
macklebee Posted January 22, 2017 Share 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 Link to comment Share on other sites More sharing options...
Tomas Posted January 22, 2017 Author Share 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 Link to comment Share on other sites More sharing options...
macklebee Posted January 22, 2017 Share 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 Link to comment Share on other sites More sharing options...
Tomas Posted January 22, 2017 Author Share Posted January 22, 2017 Thanks macklebee for your help. Code works now. 1 Quote Link to comment Share on other sites More sharing options...
Jazz Posted January 22, 2017 Share 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 Link to comment Share on other sites More sharing options...
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.