どんな物を作ってるか分からなければ処理軽減の方法は分からない
方法を提案されても使えない可能性が高い
確実なのはオブジェクトの数を減らすぐらいしかない
カメラZ軸の範囲外とスクリーン座標のY座標が画面外なら非表示にするようにしてみたけど
2000個ともなると非表示に変える処理で数msかかるので半分以下に減らせても効果が少ない・・・
#include "hgimg3.as"
#include "objrotfv.hsp"
screen 0,640,480,0
cls 4
hgsetreq SYSREQ_MAXOBJ ,3000
hgini
setcolor 255
addbox mdid,5,5 ; BOXモデルを作成
regobj Center_objid,mdid ; BOXモデルをオブジェクトとして登録
addxfile xmdid,dir_exe+"\\sample\\hgimg3\\font_a.x" ; モデルを読み込む
modelorder xmdid,HGMODEL_ROTORDER_ZYX //通常モデルと同じ回転順序にする
DOTS=2300
repeat DOTS
regobj mychr(cnt),xmdid ;,OBJ_SORT;OBJ_LATE;OBJ_HIDE
setpos mychr(cnt),500.0-0.1*rnd(10000),500.0-0.1*rnd(10000),500.0-0.1*rnd(10000)
getpos mychr(cnt),xx,yy,zz
fvset vv,xx,-yy,zz //y軸反転してセット
fvface vv,0.0,0.0,0.0
selang mychr(cnt) //任意軸の回転させたいオブジェクト選択(objrotfvを使う準備)
fvset axis,0.0,0.0,0.0 //回転前の角度(obj初期値は全て0なので0設定)
fvdir axis,1.0 ,0.0 ,0.0 //x軸(euler2matrixの代わり)
objrotfv axis,vv //axis軸をvv分回転
fvset axis,0.0,0.0,0.0
fvdir axis,0.0 ,1.0 ,0.0 //y軸
objrotfv axis,vv(1)
fvset axis,0.0,0.0,0.0
fvdir axis,0 ,0 ,1 //z軸
objrotfv axis,vv(2)
loop
*main
hggettime tim,0
if HIDE_f=0{//非表示化処理オン[Enter]
HIDE=0
repeat DOTS
getpos mychr(cnt),x,y,z
hgcnvaxis xx,yy,zz,x,y,z,0
if zz<0.90 or zz>1.0 or yy>960 or yy<-480 {setobjmode mychr(cnt),OBJ_HIDE,0:HIDE++}else{setobjmode mychr(cnt),OBJ_HIDE,1}
loop
}else{//非表示化処理オフ[Enter]
if HIDE {
repeat DOTS
setobjmode mychr(cnt),OBJ_HIDE,1
loop
HIDE=0
}
}
hgdraw ; 描画処理
hggettime tim2,0
// hgdrawと非表示化処理の処理時間 非表示にしたオブジェクト数
title ""+(tim2-tim)+"ms "+HIDE
hgsync 16 ; 時間待ち
stick k,127-32
if k&128 : goto *owari ; [ESC]で終了
fvset cfv,0.0, 0.0, 0.0
if k&2 : cfv+0.01
if k&8 : cfv-0.01
if k&1 : cfv(1)-0.01
if k&4 : cfv(1)+0.01
if k&16 : cfv(2)+0.05
if k&64 : cfv(2)-0.05
if k&32 : HIDE_f^1 //[Enter]非表示化処理オンオフ切換
getang HGOJB_CAMERA,crx,cry,crz //現在のカメラ角度(これにcfvを各軸に加算)
selcang //カメラ選択(objrotfvを使う準備)
fvset axis,crx,-cry,crz //回転前の角度
fvdir axis,1.0 ,0.0 ,0.0 //x軸
objrotfv axis,cfv //axis軸をcfv分回転
fvset axis,crx,-cry,crz
fvdir axis,0.0 ,1.0 ,0.0 //y軸
objrotfv axis,cfv(1)
fvset axis,crx,-cry,crz
fvdir axis,0 ,0 ,1 //z軸
objrotfv axis,cfv(2)
getang HGOJB_CAMERA,crx,cry,crz
fvset vv,crx,-cry,crz
fvdir vv,0.0,0.0,100.0
selcpos
objsetfv vv
goto *main
*owari
end
自分の環境だと非表示オンで5〜6
非表示オフで7〜8
作ってるものによってはもっと効果出せたり(毎フレーム非表示化処理しなくて良いとか)
使えなかったりするだろう・・・
後半の話はウィンドウを透明、半透明にしてデスクトップマスコットを作る時の話だろう
>(hgsetreqは試してみたらむしろ遅くなりました)
昔はSYSREQ_DEFTIMER,0の設定で通常時(描画負荷関係なく)の負荷が大きかった時があった