Linderdaum рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Android рдХреЗ рд▓рд┐рдП рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рдЖрдЬ рд╣рдо Linderdaum рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдг рдорд▓реНрдЯреАрдЯрдЪ рдФрд░ рдЪреБрдЯрдХреА-рдЬрд╝реВрдо рд╣рд╛рд╡рднрд╛рд╡ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

Linderdaum рдЗрдВрдЬрди рд▓реЛрдЧреЛ





1. рддреИрдпрд╛рд░реА

рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд▓рд┐рдВрдбрд░рдбреИрдо рдЗрдВрдЬрди рдПрд╕рдбреАрдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИред рдЖрдк SDK рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдкреЛрд╕реНрдЯ habrahabr.ru/blogs/gdev/121062 рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рдорд▓реНрдЯреАрдЯрдЪ рд╕рдкреЛрд░реНрдЯ рд╡рд╛рд▓рд╛ рдПрдХ Android рдбрд┐рд╡рд╛рдЗрд╕ред

2. рд╣рдо рдЖрд╡реЗрджрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рд╕рдмрд╕реЗ рдХреЙрдореНрдкреИрдХреНрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - clPinchZoomHandler рд╡рд░реНрдЧред рдорд▓реНрдЯреАрдЯрдЪ рдХреЗ рд╕рд╛рде рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдиреНрдп рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд▓рд╛рд╕ рдХреНрд▓реАрд╕реНрдЯреБрд░рд╣реИрдВрдбрд▓рд░ рд╣реИред рдпрджрд┐ рдЖрдк рдХрдЯреНрдЯрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк L_EVENT_MOTION рдИрд╡реЗрдВрдЯ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рднреА рдХреНрд▓рд┐рдХ рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ (рдкреАрд╕реА рдкрд░ рдорд╛рдЙрд╕ рд╕рд╣рд┐рдд, рддрд╛рдХрд┐ рдпрд╣ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ)ред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЪреБрдиреЗрдВ:



рд╣рдо .cpp рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХреА рдЧрдИ рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдореНрди рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

#include "Linderdaum.h" sEnvironment* Env = NULL; clScene* g_Scene = NULL; clPinchZoomHandler* g_PinchZoomHandler = NULL; LMatrix4 Position = LMatrix4::IdentityStatic(); LMatrix4 PositionDelta = LMatrix4::IdentityStatic(); LMatrix4 ZoomDelta = LMatrix4::IdentityStatic(); int g_PlaneID; //      ,     void Event_DRAW( LEvent Event, const LEventArgs& Args ) { //   g_Scene->RenderForward(); //     ,      if ( !g_PinchZoomHandler->IsGestureValid() ) return; if ( g_PinchZoomHandler->IsDraggingValid() ) { //    PositionDelta = g_PinchZoomHandler->GetTranslationMatrix(); } else { //       Position = Position * PositionDelta; PositionDelta = LMatrix4::Identity(); } float ZoomFactor = 1.0f; if ( g_PinchZoomHandler->IsPinchZoomValid() ) { //    ZoomFactor = g_PinchZoomHandler->GetPinchZoomFactor(); ZoomDelta = g_PinchZoomHandler->GetPinchZoomMatrix(); } else { //       Position = Position * ZoomDelta; ZoomDelta = LMatrix4::Identity(); } //      g_Scene->SetLocalTransform( g_PlaneID, Position * PositionDelta * ZoomDelta ); //            size_t NumContacts = g_PinchZoomHandler->GetMotionData()->GetNumTouchPoints(); clCanvas* C = Env->Renderer->GetCanvas(); LString Str1( "Zoom factor: " + LStr::ToStr( ZoomFactor ) ); LString Str2( "Active : " + LStr::ToStr( NumContacts ) ); C->TextStrFreeType( LRect( 0.0f, 0.0f ), Str1, 0.05f, LC_White, NULL, TextAlign_Left ); C->TextStrFreeType( LRect( 0.0f, 0.05f ), Str2, 0.05f, LC_White, NULL, TextAlign_Left ); } //  APPLICATION_ENTRY_POINT { Env = new sEnvironment(); Env->DeployDefaultEnvironment( "", "../../CommonMedia" ); Env->Connect( L_EVENT_DRAWOVERLAY, Utils::Bind( &Event_DRAW ) ); //  ,      clGeom* TestGeom1 = Env->Resources->CreatePlane( 0.1f, 0.2f, 0.9f, 0.8f, -0.1f, 10 ); //     g_Scene = Env->Linker->Instantiate( "clScene" ); g_Scene->SetCameraTransform( LMatrix4::GetTranslateMatrix( LVector3(0.0f) ) ); g_Scene->SetCameraProjection( Env->Renderer->GetCanvas()->GetOrthoMatrices()->GetProjectionMatrix() ); g_Scene->SetUseOffscreenBuffer( false, false ); //      g_PlaneID = g_Scene->AddGeom( TestGeom1 ); //     clMaterial* Mtl = Env->Resources->CreateMaterial(); Mtl->SetPropertyValue( "DiffuseMap", "banner.jpg" ); g_Scene->SetMtl( g_PlaneID, Mtl ); //    -        g_PinchZoomHandler = Env->Linker->Instantiate( "clPinchZoomHandler" ); Env->RunApplication( DEFAULT_CONSOLE_AUTOEXEC ); APPLICATION_EXIT_POINT( Env ); } //  APPLICATION_SHUTDOWN { delete( g_Scene ); delete( g_PinchZoomHandler ); } 

рдбреЗрдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, banner.jpg рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред рдпрд╣рд╛рдБ рдПрдХ (256x128) рд╣реИ:
рдЫрд╡рд┐
рд╕рд╛рдЗрдмрд░рд╡рд┐рди рдЪрд▓рд╛рдПрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ:
ndk-build
ant copy-common-media debug

рд╣рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП .apk рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИред

3. рдкрд░рд┐рдгрд╛рдо

рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЫрд╡рд┐
рдЖрдк рдЪрд┐рддреНрд░ рдХреЛ рдПрдХ рдЙрдВрдЧрд▓реА рд╕реЗ рдФрд░ рджреЛ рдХреЗ рд╕рд╛рде рд╕реНрдХреЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрд╕рдбреАрдХреЗ рдореЗрдВ рд╣реА рдЪреБрдЯрдХреА рдЬрд╝реВрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред

Source: https://habr.com/ru/post/In124688/


All Articles