DxSetShaderTransform: Difference between revisions
Jump to navigation
Jump to search
(Created page with "{{Client function}} __NOTOC__ This function applies a 3D transformation to a shader element when it is draw with dxDrawImage. ==Syntax== <syntaxhighlight lang="lua"> bool dxSetShaderT...") |
Fernando187 (talk | contribs) (Remove obsolete Requirements section) |
||
(14 intermediate revisions by 10 users not shown) | |||
Line 1: | Line 1: | ||
{{Client function}} | {{Client function}} | ||
__NOTOC__ | __NOTOC__ | ||
This function applies a 3D transformation to a [[shader]] element when it is | This function applies a 3D transformation to a [[shader]] element when it is drawn with [[dxDrawImage]]. | ||
==Syntax== | ==Syntax== | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
bool dxSetShaderTransform ( element | bool dxSetShaderTransform ( element theShader, | ||
float rotationX, float rotationY, float rotationZ, | float rotationX, float rotationY, float rotationZ, | ||
[ float rotationCenterOffsetX = 0, float rotationCenterOffsetY = 0, float rotationCenterOffsetZ = 0, | [ float rotationCenterOffsetX = 0, float rotationCenterOffsetY = 0, float rotationCenterOffsetZ = 0, | ||
Line 12: | Line 12: | ||
bool bPerspectiveCenterOffsetOriginIsScreen = false ] ) | bool bPerspectiveCenterOffsetOriginIsScreen = false ] ) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{OOP||[[shader]]:setTransform}} | |||
===Required Arguments=== | ===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. | *'''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. | *'''rotationY:''' Rotation angle in degrees around the Y axis (Up,down). This will make the shader rotate along its height. | ||
Line 20: | Line 21: | ||
===Optional Arguments=== | ===Optional Arguments=== | ||
{{OptionalArg}} | |||
*'''rotationCenterOffsetX :''' The center of rotation offset X position in screen relative units. | *'''rotationCenterOffsetX :''' The center of rotation offset X position in screen relative units. | ||
*'''rotationCenterOffsetY :''' The center of rotation offset Y position in screen relative units. | *'''rotationCenterOffsetY :''' The center of rotation offset Y position in screen relative units. | ||
*'''rotationCenterOffsetZ :''' The center of rotation offset Z position in screen relative units. | *'''rotationCenterOffsetZ :''' The center of rotation offset Z position in screen relative units. | ||
*'''bRotationCenterOffsetOriginIsScreen :''' Set to [[boolean|true]] if the center of rotation origin should be the center of the screen rather than the center of the | *'''bRotationCenterOffsetOriginIsScreen :''' Set to [[boolean|true]] if the center of rotation origin should be the center of the screen rather than the center of the image. | ||
*'''perspectiveCenterOffsetX :''' The center of perspective offset X position in screen relative units. | *'''perspectiveCenterOffsetX :''' The center of perspective offset X position in screen relative units. | ||
*'''perspectiveCenterOffsetY :''' The center of perspective offset Y position in screen relative units. | *'''perspectiveCenterOffsetY :''' The center of perspective offset Y position in screen relative units. | ||
*'''bPerspectiveCenterOffsetOriginIsScreen :''' Set to [[boolean|true]] if the center of perspective origin should be the center of the screen rather than the center of the | *'''bPerspectiveCenterOffsetOriginIsScreen :''' Set to [[boolean|true]] if the center of perspective origin should be the center of the screen rather than the center of the image. | ||
To convert screen relative units into screen pixel coordinates, ''multiply'' by the screen size. Conversely, to convert screen pixel coordinates to screen relative units, '''''divide''''' by the screen size. | To convert screen relative units into screen pixel coordinates, ''multiply'' by the screen size. Conversely, to convert screen pixel coordinates to screen relative units, '''''divide''''' by the screen size. | ||
Line 35: | Line 37: | ||
==Example== | ==Example== | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
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) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==See Also== | ==See Also== | ||
{{Drawing_functions}} | {{Drawing_functions}} |
Latest revision as of 15:40, 7 November 2024
This function applies a 3D transformation to a shader element when it is drawn with dxDrawImage.
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 ] )
OOP Syntax Help! I don't understand this!
- Method: shader:setTransform(...)
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. For more information on optional arguments, see optional arguments.
- rotationCenterOffsetX : The center of rotation offset X position in screen relative units.
- rotationCenterOffsetY : The center of rotation offset Y position in screen relative units.
- rotationCenterOffsetZ : The center of rotation offset Z position in screen relative units.
- bRotationCenterOffsetOriginIsScreen : Set to true if the center of rotation origin should be the center of the screen rather than the center of the image.
- perspectiveCenterOffsetX : The center of perspective offset X position in screen relative units.
- perspectiveCenterOffsetY : The center of perspective offset Y position in screen relative units.
- bPerspectiveCenterOffsetOriginIsScreen : Set to true if the center of perspective origin should be the center of the screen rather than the center of the image.
To convert screen relative units into screen pixel coordinates, multiply by the screen size. Conversely, to convert screen pixel coordinates to screen relative units, divide by the screen size.
Returns
Returns true if the shader element's transform was successfully changed, false otherwise.
Example
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)
See Also
- dxConvertPixels
- dxCreateFont
- dxCreateRenderTarget
- dxCreateScreenSource
- dxCreateShader
- dxCreateTexture
- dxDrawCircle
- dxDrawImage
- dxDrawImageSection
- dxDrawLine
- dxDrawLine3D
- dxDrawMaterialLine3D
- dxDrawMaterialPrimitive
- dxDrawMaterialPrimitive3D
- dxDrawMaterialSectionLine3D
- dxDrawPrimitive
- dxDrawPrimitive3D
- dxDrawRectangle
- dxDrawText
- dxDrawWiredSphere
- dxGetBlendMode
- dxGetFontHeight
- dxGetMaterialSize
- dxGetPixelColor
- dxGetPixelsSize
- dxGetPixelsFormat
- dxGetStatus
- dxGetTextSize
- dxGetTextWidth
- dxGetTexturePixels
- dxIsAspectRatioAdjustmentEnabled
- dxSetAspectRatioAdjustmentEnabled
- dxSetBlendMode
- dxSetPixelColor
- dxSetRenderTarget
- dxSetShaderValue
- dxSetShaderTessellation
- dxSetShaderTransform
- dxSetTestMode
- dxSetTextureEdge
- dxSetTexturePixels
- dxUpdateScreenSource