HSP3.5HGIMG4에 여러 카메라 포커스 그리기

2707 단어 HSPHSP3
HSP3.5HGIMG4에서는 off Cleak을 적용해 여러 카메라 시야각을 그릴 수 있다.
gpdraw를 정상적으로 실행하면 이벤트 등 자동 이동 횟수를 반영하기 때문에 포인트는 gpdraw에 파라미터를 지정하여 자동 이동 반영과 그림을 분리하는 것입니다.
샘플 코드는 다음과 같습니다.
#include "hgimg4.as"

#const EG_CALC GPDRAW_OPT_OBJUPDATE
#const EG_DRAW2D (GPDRAW_OPT_DRAW2D | GPDRAW_OPT_DRAW2D_LATE)
#const EG_DRAW3D (GPDRAW_OPT_DRAWSCENE | GPDRAW_OPT_DRAWSCENE_LATE)


    sx = ginfo(26)
    sy = ginfo(27)

    gpreset
    setcls CLSMODE_SOLID, 0x000033

// 上下往復運動
    newevent ev
    event_addpos ev, 0, -0.002, 0
    event_wait ev, 120
    event_addpos ev, 0, 0.002, 0
    event_wait ev, 120
    event_jump ev, 0

    gpload id, "res/duck"
    setangr id, 0, -64, 0
    setevent id, ev
    duck_id = id

// ちらつき防止用
    buffer 1, 32,32, 0

    ow = sx / 4
    oh = sy / 4

    dist = 4

// メインカメラ
    gpnull id
    gpcamera id, 45, double(sx) / double(sy), 0.5, 768
    setpos id, 2, 2, 3
    gplookat id, 0, 0, 0
    cam_id = id
// サブカメラ
    dim cams,4
    foreach cams
        gpnull id
        gpcamera id, 45, double(ow) / double(oh), 0.5, 768
        if cnt == 0 {
            setpos id, 0,0, dist
            gplookat id, 0,0,0
        }
        if cnt == 1 {
            setpos id, 0,dist,0
            setangr id, -64, 0, 0
        }
        if cnt == 2 {
            setpos id, -dist,0,0
            gplookat id, 0,0,0
        }
        if cnt == 3 {
            setpos id, dist,0,0
            gplookat id, 0,0,0
        }
        cams.cnt = id

        buffer cnt + 2, ow,oh, screen_offscreen
        celdiv cnt + 2, ow, oh, ow/2, oh/2
    loop

    repeat
        getreq ts, SYSREQ_TIMER
        getreq fps, SYSREQ_FPS
// 移動の反映
        gsel 1
        gpdraw EG_CALC
// サブカメラでのオフスクリーン描画
        foreach cams
            gsel cnt + 2
            redraw 0

            gpusecamera cams.cnt
            gpdraw EG_DRAW2D | EG_DRAW3D
            redraw 1
        loop
// メインカメラ
        gsel 0
        gpusecamera cam_id
        gpdraw EG_DRAW2D | EG_DRAW3D
// サブカメラのオフスクリーンを可視描画
        color 224,224,224
        foreach cams
            x = ((cnt & 1) * 10 + 3) * ow / 4
            y = ((cnt / 2) * 10 + 3) * oh / 4
            grect x, y, 0, ow+8, oh+8

            pos x, y
            celput cnt + 2
        loop

        pos 16, oh * 2
        color 224,224,224
        font "",36
        mes strf("%2d [fps]", fps)

        redraw 1
        await 1000/60
    loop
실행 결과

일반 메인 카메라와 정면, 상, 좌우의 하위 카메라
프레임마다 그리는 횟수가 처리 부하를 증가하지만 캐릭터 위치 시점, 제3자 시점과 굽어보는 시점을 동시에 그릴 수 있다.

좋은 웹페이지 즐겨찾기