aka Blue Posted October 23, 2016 Share Posted October 23, 2016 Buenas. No sé exactamente como explicar ésto así que dejaré una imagen a continuación. Básicamente quiero scriptear un retrovisor DX con el cual se pueda ver la parte trasera del vehículo para posteriormente ver si viene un vehículo, el lugar por donde hemos pasado, etc. Gracias de antemano. Link to comment
Tomas Posted October 23, 2016 Share Posted October 23, 2016 Creo que puedes setear un setCameraMatrix en un onClientPreRender, llamar dxUpdateScreenSource y en onClientRender setCameraTarget(localPlayer), pero no estoy seguro. Link to comment
aka Blue Posted October 23, 2016 Author Share Posted October 23, 2016 @Tomas ¿Podrías darme un ejemplo? No sé como funciona correctamente dxUpdateScreenSource, por desgracia xd. Link to comment
Sergioks Posted October 23, 2016 Share Posted October 23, 2016 Hay un script en la comunidad que se llama cam2rt que hace exactamente eso. Inclusive, tiene lo que pides en 'test.lua': Claro, yo lo edite un poco para hacerlo de esa forma de la fotografía, pero la funcion original "de fabrica", tiene lo que dices. Link to comment
aka Blue Posted October 23, 2016 Author Share Posted October 23, 2016 @Sergioks ¿Cuál parte es la que funciona como quiero? ¿La que está entre --[[ ? Gracias Link to comment
-Rex- Posted October 23, 2016 Share Posted October 23, 2016 12 minutes ago, aka Blue said: @Sergioks ¿Cuál parte es la que funciona como quiero? ¿La que está entre --[[ ? Gracias Curratela un poco amigo Link to comment
aka Blue Posted October 23, 2016 Author Share Posted October 23, 2016 @-Rex- Disculpa pro scripter Link to comment
aka Blue Posted October 24, 2016 Author Share Posted October 24, 2016 @Sergioks El script no funciona, me tira errores Link to comment
Sergioks Posted October 24, 2016 Share Posted October 24, 2016 A mi me funciono bien . Es el segundo, en test.lua hay 3 pruebas. Una con una pantalla "real" en el mundo, otra con dxDrawImage y no recuerdo la otra. La de dxDrawImage es la que muestra la cámara trasera. Link to comment
aka Blue Posted October 24, 2016 Author Share Posted October 24, 2016 @Sergioks A mi no me funciona. Me tira error en el 5 argumento del draw de la imagen, dice que es nil. local thisImage = nil addEventHandler( "onClientResourceStart", resourceRoot, function() local cameraMat = getCamera():getMatrix() thisImage = cam2RTImage:create( cameraMat, true ) if thisImage then outputChatBox( "kitipasa" ) end end ) addEventHandler( "onClientResourceStop", resourceRoot, function() thisImage:destroy() end ) addEventHandler( "onClientPreRender", root, function() if thisImage then local mat = localPlayer:getMatrix() local pos = mat:getPosition() - mat:getForward() * 2 local rot = mat:getRotation() - Vector3( 0, 0, 180 ) local camMatrix = Matrix( pos, rot) thisImage:setCameraMatrix( camMatrix ) end end ) local sx, sy = guiGetScreenSize () addEventHandler( "onClientHUDRender", root, function() if thisImage then myImage = thisImage:getRenderTarget() local colR, colG, colB = getSkyGradient() dxDrawRectangle(sx / 2 - sy * 0.25, 0, sy * 0.5, sy * ((sy/ sx) * 0.4), tocolor(colR, colG, colB, 255)) dxDrawImage(sx / 2 - sy * 0.25, 0, sy * 0.5, sy * ((sy/ sx) * 0.4), myImage) end end ) Link to comment
Sergioks Posted October 24, 2016 Share Posted October 24, 2016 42 minutes ago, aka Blue said: @Sergioks A mi no me funciona. Me tira error en el 5 argumento del draw de la imagen, dice que es nil. local thisImage = nil addEventHandler( "onClientResourceStart", resourceRoot, function() local cameraMat = getCamera():getMatrix() thisImage = cam2RTImage:create( cameraMat, true ) if thisImage then outputChatBox( "kitipasa" ) endend)addEventHandler( "onClientResourceStop", resourceRoot, function() thisImage:destroy() end ) addEventHandler( "onClientPreRender", root, function() if thisImage then local mat = localPlayer:getMatrix() local pos = mat:getPosition() - mat:getForward() * 2 local rot = mat:getRotation() - Vector3( 0, 0, 180 ) local camMatrix = Matrix( pos, rot) thisImage:setCameraMatrix( camMatrix ) end end ) local sx, sy = guiGetScreenSize () addEventHandler( "onClientHUDRender", root, function() if thisImage then myImage = thisImage:getRenderTarget() local colR, colG, colB = getSkyGradient() dxDrawRectangle(sx / 2 - sy * 0.25, 0, sy * 0.5, sy * ((sy/ sx) * 0.4), tocolor(colR, colG, colB, 255)) dxDrawImage(sx / 2 - sy * 0.25, 0, sy * 0.5, sy * ((sy/ sx) * 0.4), myImage) end end ) mi test.lua esta asi: -- -- test.lua -- --[[ local thisMirror = nil addEventHandler( "onClientResourceStart", resourceRoot, function() setCameraInterior ( 15 ) setElementInterior( localPlayer, 15 ) setElementPosition( localPlayer, 2222, -1151, 1026 ) local mirrorMat = Matrix( Vector3( 2217.229, -1150.458, 1026.796 ), Vector3( 0, 0, 275 )) thisMirror = cam2RTMirror:create( mirrorMat, Vector2( 4, 3 )) end ) addEventHandler( "onClientResourceStop", resourceRoot, function() thisMirror:destroy() end ) addEventHandler( "onClientPreRender", root, function() if thisMirror then thisMirror:draw() end end ) --]] --[[ local thisScreen = nil addEventHandler( "onClientResourceStart", resourceRoot, function() setCameraInterior ( 15 ) setElementInterior( localPlayer, 15 ) setElementPosition( localPlayer, 2222, -1151, 1026 ) local screenMat = Matrix( Vector3( 2217.229, -1150.458, 1026.796 ), Vector3( 0, 0, 275 )) local cameraMat = Matrix( Vector3( 2217.229, -1150.458, 1026.796 ), Vector3( 0, 0, 275 )) thisScreen = cam2RTScreen:create( cameraMat, screenMat, Vector2( 4, 3 )) end ) addEventHandler( "onClientResourceStop", resourceRoot, function() thisScreen:destroy() end ) addEventHandler( "onClientPreRender", root, function() if thisScreen then thisScreen:draw() end end ) --]]-- --[ local thisImage = nil addEventHandler( "onClientResourceStart", resourceRoot, function() outputChatBox('You might want to change world drawing range by changing shader range from 60 to 0 - look in c_cam2RTImage.lua line 12, 13') local cameraMat = getCamera():getMatrix() thisImage = cam2RTImage:create( cameraMat, true ) end ) addEventHandler( "onClientResourceStop", resourceRoot, function() thisImage:destroy() end ) addEventHandler( "onClientPreRender", root, function() if thisImage then local mat = localPlayer:getMatrix() local pos = mat:getPosition() - mat:getForward() * 2 local rot = mat:getRotation() - Vector3( 0, 0, 180 ) local camMatrix = Matrix( pos, rot) thisImage: setCameraMatrix( camMatrix ) end end ) local sx, sy = guiGetScreenSize () addEventHandler( "onClientHUDRender", root, function() if thisImage then myImage = thisImage:getRenderTarget() local colR, colG, colB = getSkyGradient() dxDrawRectangle(sx / 2 - sy * 0.25, 0, sy * 0.5, sy * ((sy/ sx) * 0.4), tocolor(colR, colG, colB, 255)) dxDrawImage(sx / 2 - sy * 0.25, 0, sy * 0.5, sy * ((sy/ sx) * 0.4), myImage) end end ) --]]-- y me funciona Link to comment
aka Blue Posted October 24, 2016 Author Share Posted October 24, 2016 Mmmm a mi me tira lo siguiente: http://i.imgur.com/8etaFCZ.jpg Link to comment
MTA Team 0xCiBeR Posted October 24, 2016 MTA Team Share Posted October 24, 2016 Puede ser que no tengas suficiente memoria de video para crear la textura. Revisa eso Link to comment
aka Blue Posted October 24, 2016 Author Share Posted October 24, 2016 @.:CiBeR:. Si, de hecho fue lo que pensé. Pero, entonces, qué podría hacer o comprobar si realmente es ese el problema? Link to comment
Tomas Posted October 24, 2016 Share Posted October 24, 2016 dxGetStatus().VideoMemoryFreeForMTA Link to comment
Recommended Posts