dxSetShaderTransform | Multi Theft Auto: Wiki Skip to content

dxSetShaderTransform

Client-side
Server-side
Shared

Manual Review Required

Please finish this page using the corresponding Old Wiki article. Go to Contribution guidelines for more information.


This function applies a 3D transformation to a shader element when it is drawn with dxDrawImage.

OOP Syntax Help! I don't understand this!

  • Method: shader:setTransform(...)

Syntax

bool dxSetShaderTransform ( element theShader, float rotationX, float rotationY, float rotationZ, [ float rotationCenterOffsetX = 0, float rotationCenterOffsetY = 0, float rotationCenterOffsetZ = 0, bool bRotationCenterOffsetOriginIsScreen = false, float perspectiveCenterOffsetX = 0, float perspectiveCenterOffsetY = 0, bool bPerspectiveCenterOffsetOriginIsScreen = false ] )
Required Arguments
  • theShader: The shader element whose transformation is to be changed
  • rotationX: Rotation angle in degrees around the X axis (Left,right). This will make the shader rotate along its width.
  • rotationY: Rotation angle in degrees around the Y axis (Up,down). This will make the shader rotate along its height.
  • rotationZ: Rotation angle in degrees around the Z axis (In,out). This will make the shader rotate in a similar way to the rotation argument in dxDrawImage .
Optional Arguments

NOTE: When using optional arguments, you might need to supply all arguments before the one you wish to use.

  • rotationCenterOffsetX (default: 0): MISSING_PARAM_DESC
  • rotationCenterOffsetY (default: 0): MISSING_PARAM_DESC
  • rotationCenterOffsetZ (default: 0): MISSING_PARAM_DESC
  • bRotationCenterOffsetOriginIsScreen (default: false): MISSING_PARAM_DESC
  • perspectiveCenterOffsetX (default: 0): MISSING_PARAM_DESC
  • perspectiveCenterOffsetY (default: 0): MISSING_PARAM_DESC
  • bPerspectiveCenterOffsetOriginIsScreen (default: false): MISSING_PARAM_DESC

Returns

  • bool: value

Returns true if the shader element's transform was successfully changed, false otherwise.

Code Examples

shared
local shader
local texture
local angle = 0 -- Initialize angle for rotation
local radius = 50 -- Reduced radius for the circular motion
local centerX, centerY -- Center of the screen
function startShaderExample()
-- Create a shader
shader = dxCreateShader("texture.fx")
-- Load a texture
texture = dxCreateTexture("myTexture.png")
-- Apply the texture to the shader
dxSetShaderValue(shader, "gTexture", texture)
-- Get the center of the screen
local screenWidth, screenHeight = guiGetScreenSize()
centerX = screenWidth / 2
centerY = screenHeight / 2
-- Start rendering the shader
addEventHandler("onClientRender", root, renderShader)
end
addEventHandler("onClientResourceStart", resourceRoot, startShaderExample)
function renderShader()
-- Increment the angle to create rotation over time
angle = angle + 0.02
if angle > 2 * math.pi then
angle = 0
end
-- Calculate the position based on a smaller circular path
local positionX = centerX + math.cos(angle) * radius
local positionY = centerY + math.sin(angle) * radius
-- Apply transformation: translation along a smaller circular path and rotation
dxSetShaderTransform(shader, positionX, positionY, 0, 0, 0, angle)
-- Draw a rectangle with the shader applied, following the circular path
dxDrawImage(positionX - 128, positionY - 128, 256, 256, shader)
end
function stopShaderExample()
if shader then
destroyElement(shader)
shader = nil
end
if texture then
destroyElement(texture)
texture = nil
end
removeEventHandler("onClientRender", root, renderShader)
end
addEventHandler("onClientResourceStop", resourceRoot, stopShaderExample)