-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathhgimg4.hs
2436 lines (2202 loc) · 106 KB
/
hgimg4.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
;
; HSP help manager用 HELPソースファイル
; (先頭が「;」の行はコメントとして処理されます)
;
%type
拡張命令
%ver
3.7
%note
hgimg4.asまたはhgimg4dx.asをインクルードすること。
%date
2024/07/04
%author
onitama
%dll
hgimg4
%url
https://hsp.tv/make/hgimg4.html
%port
Win
%portinfo
Windows/Linux/android/iOS等HGIMG4をサポートするシステム上で動作します。
Windowsの場合は、OpenGL3.1以降/DirectX9が必要です。
%index
gpreset
HGIMG4の初期化
%group
拡張画面制御命令
%prm
option
option(0) : 初期化オプション
%inst
HGIMG4の初期化を行ないます。
シーンを再構築する場合に使用してください。
optionで設定した内容によって初期化の内容が変わります。
^p
オプション値 内容
---------------------------------------------------------------
0 すべてのオブジェクトを破棄して初期状態に戻す
1 シーンに存在するオブジェクトのみ破棄する
^p
%href
%index
gpdraw
シーン内の全オブジェクトを描画する
%group
拡張画面制御命令
%prm
option,debug
option($ffff) : 描画オプション
debug(0) : デバッグオプション
%inst
シーン内のオブジェクトをすべて描画します。
optionパラメーターを指定することで、限られた項目の描画だけを行なうことができます。
^p
マクロ名 内容
-------------------------------------------------------------------------------
GPDRAW_OPT_OBJUPDATE オブジェクトの自動移動処理/アニメーション処理
GPDRAW_OPT_DRAWSCENE 3Dシーン描画処理
GPDRAW_OPT_DRAWSCENE_LATE 3Dシーン描画処理(OBJ_LATE)
GPDRAW_OPT_DRAW2D 2Dスプライト描画処理
GPDRAW_OPT_DRAW2D_LATE 2Dスプライト描画処理(OBJ_LATE)
^p
optionパラメーターを省略した場合は、すべての項目が選択されている状態になります。
通常は、optionパラメーターを指定しなくても問題ありません。
また、2Dの直接描画命令だけを使用して、オブジェクトによる描画が不要な場合は、gpdraw命令を記述する必要もありません。
OBJ_LATEのモードフラグ値が付加されたもの(半透明α値が設定されているものを含む)は、不透明のオブジェクトよりも後に描画するため、項目が分けられています。
複数の項目を「|」で区切って指定することもできます。
^p
例:
gpdraw GPDRAW_OPT_DRAW2D|GPDRAW_OPT_DRAW2D_LATE
^p
上の例では、2Dスプライト描画処理、2Dスプライト描画処理(OBJ_LATE)だけを実行します。
これを利用すると、3Dシーン描画と2Dスプライト描画の間にgcopy命令など別な描画命令による表示を行なうことが可能になります。
debugパラメーターを指定することで、デバッグのための描画を追加することができます。
通常は、debugパラメーターを指定しなくても問題ありません。
^p
マクロ名 内容
-------------------------------------------------------------------------------
GPDRAW_OPT_DEBUG_PHY 物理オブジェクトのデバッグ表示
^p
GPDRAW_OPT_DEBUG_PHYは、物理設定された3Dオブジェクトのデバッグ表示を有効にします。
%href
%index
gpusescene
シーンの切り替え
%group
拡張画面制御命令
%prm
id
id(0) : 選択するシーンID
%inst
(今後のバージョンでサポートするための予約キーワードです。機能は現在まだ実装されていません。)
%href
%index
gpsetprm
オブジェクトのコアパラメーター設定
%group
拡張画面制御命令
%prm
objid,prmid,value
objid(0) : オブジェクトID
prmid(0) : コアパラメーターID
value(0) : 設定する値(整数値)
%inst
オブジェクトごとに保持されているコアパラメーターにvalueで指定された値を上書き設定します。
値を上書きではなく、ビット単位にON,OFFを行ないたい場合は、gpsetprmon/gpsetprmoff命令を使用してください。
コアパラメーターは、32bit整数値で、様々な情報を管理しています。
コアパラメーターIDとして指定可能な項目は以下の通りです。
^p
マクロ名 | 内容
--------------------------------------------------------------
PRMSET_FLAG オブジェクト登録フラグ(*)
PRMSET_MODE モードフラグ値
PRMSET_ID オブジェクトID(*)
PRMSET_ALPHA 透明度(α値)
PRMSET_TIMER タイマー値
PRMSET_MYGROUP 自身のコリジョングループ
PRMSET_COLGROUP 衝突検出するコリジョングループ
PRMSET_SHAPE 形状ID(*)
PRMSET_USEGPMAT マテリアルID
PRMSET_USEGPPHY 物理設定ID(*)
PRMSET_COLILOG コリジョンログID(*)
PRMSET_FADE フェードパラメーター
PRMSET_SPRID ソースバッファID(スプライトのみ)
PRMSET_SPRCELID ソースのセルID(スプライトのみ)
PRMSET_SPRGMODE コピーモード(スプライトのみ)
(*)の項目は読み出しのみ
^p
たとえば、PRMSET_FADEパラメーターを変更することでフェードイン・アウトなどの制御を行うことができます。
^p
例:
gpsetprm id, PRMSET_FADE, -4 ; フェードアウト
^p
PRMSET_MODEで設定されるモードフラグ値では、ビットごとにオブジェクトの挙動を設定することができます。
特定のモードフラグ値だけを設定・消去するためのsetobjmode命令も用意されています。
%href
gpgetprm
gpsetprmon
gpsetprmoff
setobjmode
%index
gpgetprm
オブジェクトのコアパラメーター取得
%group
拡張画面制御命令
%prm
var,objid,prmid
var : 値が代入される変数名
objid(0) : オブジェクトID
prmid(0) : コアパラメーターID
%inst
オブジェクトごとに保持されているコアパラメーターに値を取得します。
コアパラメーターは、32bit整数値で、様々な情報を管理しています。
コアパラメーターIDとして指定可能な項目は以下の通りです。
^p
マクロ名 | 内容
--------------------------------------------------------------
PRMSET_FLAG オブジェクト登録フラグ(*)
PRMSET_MODE モードフラグ値
PRMSET_ID オブジェクトID(*)
PRMSET_ALPHA 透明度(α値)
PRMSET_TIMER タイマー値
PRMSET_MYGROUP 自身のコリジョングループ
PRMSET_COLGROUP 衝突検出するコリジョングループ
PRMSET_SHAPE 形状ID(*)
PRMSET_USEGPMAT マテリアルID
PRMSET_COLILOG コリジョンログID(*)
PRMSET_FADE フェードパラメーター
PRMSET_SPRID ソースバッファID(スプライトのみ)
PRMSET_SPRCELID ソースのセルID(スプライトのみ)
PRMSET_SPRGMODE コピーモード(スプライトのみ)
(*)の項目は読み出しのみ
^p
%href
gpsetprm
%index
gppostefx
ポストエフェクト生成
%group
拡張画面制御命令
%prm
var
var : エフェクトIDが代入される変数名
%inst
(今後のバージョンでサポートするための予約キーワードです。機能は現在まだ実装されていません。)
%href
%index
gpuselight
ライトオブジェクトの登録
%group
拡張画面制御命令
%prm
id,index
id(0) : 登録するライトオブジェクトのID
index=0〜9(0) : 登録するライトオブジェクトのインデックス
%inst
指定したライトオブジェクトをカレントライトに登録します。
必ず、ライトとして初期化されているライトオブジェクトを指定する必要があります。
ライトオブジェクトは、gplight命令によって初期化することができます。
カレントライトには、ディレクショナルライト・ポイントライト・スポットライトの3種類をそれぞれ最大10個まで登録することができます。
初期状態では、カレントライトに設定ができるライトは、ディレクショナルライト1個のみとなっています。ポイントライト、スポットライトなど複数のライトを使用する場合は、gpresetlight命令によってカレントライトの個数をあらかじめ決めておく必要があります。
indexの値は、複数のライトをカレントライトに登録する場合に使用します。1個目のライトは0、2個目のライトは1…という形で1つの種類につき最大10個のライトを設定することが可能です。
カレントライトに登録することで、以降に生成されるモデル・マテリアルはカレントライトの影響を受けることになります。
既にオブジェクトに設定されているライトの設定を変更する場合は、setobjlight命令を使用してください。
%href
gpresetlight
gplight
gpusecamera
setobjlight
%index
gpusecamera
カメラオブジェクトの切り替え
%group
拡張画面制御命令
%prm
id
id(0) : 選択するカメラオブジェクトのID
%inst
指定したノードオブジェクトを有効なカメラオブジェクトとして選択します。
必ず、カメラとして初期化されているノードオブジェクトを指定する必要があります。
以降は、切り替えられたカメラを視点としてシーンの描画が行なわれます。
%href
gpuselight
%index
gpmatprm
マテリアルのパラメーター設定
%group
拡張画面制御命令
%prm
id,"name",x,y,z
id(0) : マテリアルID/オブジェクトID
"name" : パラメーター名
x(0.0) : Xの設定値(実数値)
y(0.0) : Yの設定値(実数値)
z(0.0) : Zの設定値(実数値)
%inst
生成されたマテリアルのシェーダーパラメーターを設定します。
idがオブジェクトIDの場合は、オブジェクトに設定されているマテリアルが直接設定されます。
idがマテリアルIDの場合は、マテリアルが保持している設定が変更されます。
^p
例:
gpmatprm objid,"u_diffuseColor",1,0,0.5 ; マテリアルのパラメーター設定
^p
上の例では、u_diffuseColorという名称のパラメーターに( 1.0, 0.0, 0.5 )のベクトル値を設定します。
(シェーダーには、u_diffuseColorという名前で設定されたパラメーターが渡されます。)
シェーダーパラメーターに設定する項目の数に応じて、gpmatprm1、gpmatprm2、gpmatprm4、gpmatprm16命令が用意されています。
(x,y,z,w)の4項目を設定する場合は、gpmatprm4を使用してください。
また、テクスチャ(Sampler)パラメーターをシェーダーに渡すためのgpmatprmt、gpmatprmp命令、テクスチャ設定を行うgpmatprmf命令も用意されています。
%href
gpmat
gpmatprm1
gpmatprm2
gpmatprm4
gpmatprm16
gpmatprmt
gpmatprmtf
gpmatprmp
%index
gpmatstate
マテリアルのステート設定
%group
拡張画面制御命令
%prm
objid,"name","value"
id(0) : マテリアルID/オブジェクトID
"name" : 設定項目名(文字列)
"value" : 設定値(文字列)
%inst
生成されたマテリアルの表示ステート設定を変更します。
文字列としてnameで指定された項目に対して、valueで指定された内容を設定します。
項目名と設定内容はすべて文字列で行なうので注意してください。
項目名と設定内容はすべて文字列で行なうので注意してください。(項目名及び設定値は大文字小文字を区別しません。)
^p
name value
--------------------------------------------------------------------
"blend" プレンドの有効/無効切り替え
(true または false を指定)
"blendSrc" ブレンド元を選択(下記参照)
"blendDst" ブレンド先を選択(下記参照)
"cullFace" 隠面除去(カリング)の有効/無効切り替え
(true または false を指定)
"cullFaceSide" 隠面除去(カリング)の面指定
"depthTest" true または false
(true または false を指定)
"depthWrite" Zバッファ書き込みの有効/無効切り替え
(true または false を指定)
"depthFunc" Z値比較方法を選択(下記参照)
(*)blendSrc,blendDstで設定できる文字列
"ZERO" 即値(0)
"ONE" 即値(1)
"SRC_COLOR" 書き込み元カラー
"ONE_MINUS_SRC_COLOR" 書き込み元カラー(反転値)
"DST_COLOR" 書き込み先カラー
"ONE_MINUS_DST_COLOR" 書き込み先カラー(反転値)
"SRC_ALPHA" 書き込み元α
"ONE_MINUS_SRC_ALPHA" 書き込み元α(反転値)
"DST_ALPHA" 書き込み先α
"ONE_MINUS_DST_ALPHA" 書き込み先α(反転値)
"CONSTANT_ALPHA" α固定値
"ONE_MINUS_CONSTANT_ALPHA" α固定値(反転値)
"SRC_ALPHA_SATURATE" 書き込み元α反転値
(*)cullFaceSideで設定できる文字列
BACK 裏面をカリング
FRONT 表面をカリング
FRONT_AND_BACK 両面をカリング
(*)depthFuncで設定できる文字列
NEVER 常に拒否
LESS 小さい値の時のみ許可
EQUAL 同一値のみ許可
LEQUAL 同一か小さい値の時のみ許可
GREATER 大きい値の時のみ許可
NOTEQUAL 同一でない値のみ許可
GEQUAL 同一か大きい値の時のみ許可
ALWAYS 常に許可
^p
%href
%index
gpviewport
ビューポート設定
%group
拡張画面制御命令
%prm
x,y,sx,sy
x(0) : ビューポート基点のX座標
y(0) : ビューポート基点のY座標
sx : ビューポートのXサイズ
sy : ビューポートのYサイズ
%inst
HGIMG4が描画を行なう領域(ビューポート)を設定します。
スクリーン座標の(x,y)を基点として(sx,sy)で指定したサイズの領域に対して描画が行なわれます。(X,Yで指定される座標は、(0,0)を左下とするスクリーン全体のピクセル数を指定します)
sx,syを省略すると、現在の表示X,Yサイズがデフォルトとして指定されます。
ビューポート設定
%href
viewcalc
gpcnvaxis
%index
setobjname
オブジェクトのノード名を設定する
%group
拡張画面制御命令
%prm
objid,"name"
objid(0) : オブジェクトのID
"name" : 設定される名称(文字列)
%inst
ノードオブジェクトに指定された名称を設定します。
すべてのノードオブジェクトは、任意に指定した名称を設定することが可能です。
%href
getobjname
%index
getobjname
オブジェクトのノード名を取得する
%group
拡張画面制御命令
%prm
var,objid
var : 結果が代入される変数名
objid(0) : オブジェクトのID
%inst
ノードオブジェクトに指定された名称を取得します。
varで指定された変数に名称が文字列型として代入されます。
すべてのノードオブジェクトは、任意に指定した名称が設定されています。
%href
setobjname
%index
gpcolormat
カラーマテリアルの生成
%group
拡張画面制御命令
%prm
var,color,opt
var : 生成されたマテリアルIDが代入される変数名
color(0) : マテリアルカラー(24bitRGB値)
opt(0) : マテリアルオプション値
%inst
指定された色を持つカラーマテリアルの生成を行ないます。
colorパラメーターは、24bitRGB値(0xRRGGBBで示される値)を指定します。省略した場合は、白色(0xffffff)が設定されます。
マテリアルを独自に生成することにより、詳細な質感の設定が可能になります。
^p
例:
gpcolormat mat_id,0xff00ff,GPOBJ_MATOPT_NOLIGHT
gpbox id_model, 1, , mat_id
^p
上の例では、RGBカラーが0xff00ff(紫)の、ライティングを行なわないマテリアルを持った、立方体のノードオブジェクトが生成されます。
optパラメーターにより、マテリアルの設定を変更することができます。
これらの設定は、gpmatstate命令で別途設定することも可能です。
^p
マクロ名 内容
-------------------------------------------------------------------
GPOBJ_MATOPT_NOLIGHT ライティングを行なわない
GPOBJ_MATOPT_NOMIPMAP MIPMAPを生成しない
GPOBJ_MATOPT_NOCULL カリングを無効にする
GPOBJ_MATOPT_NOZTEST Zテストを無効にする
GPOBJ_MATOPT_NOZWRITE Zバッファ書き込みを無効にする
GPOBJ_MATOPT_BLENDADD プレンドモードを加算に設定する
^p
正常にマテリアルが生成できなかった場合は、エラー3(パラメータの値が異常です)が発生します。
正しく生成された場合は、varで指定された変数にマテリアルID(整数値)が代入されます。
%href
gptexmat
gpusermat
%index
gptexmat
テクスチャマテリアルの生成
%group
拡張画面制御命令
%prm
var,"file",opt
var : 生成されたマテリアルIDが代入される変数名
"file" : 読み込まれるテクスチャファイル名
opt(0) : マテリアルオプション値
%inst
テクスチャ(画像)マテリアルの生成を行ないます。
マテリアルを独自に生成することにより、詳細な質感の設定が可能になります。
^p
例:
gptexmat id_texmat, "res/qbox.png" ; テクスチャマテリアル作成
gpbox id_model, 1, , id_texmat ; 箱ノードを追加
^p
上の例では、resフォルダ内のqbox.pngをテクスチャとして持ったマテリアルを持った、立方体のノードオブジェクトが生成されます。
optパラメーターにより、マテリアルの設定を変更することができます。
これらの設定は、gpmatstate命令で別途設定することも可能です。
^p
マクロ名 内容
-------------------------------------------------------------------
GPOBJ_MATOPT_NOLIGHT ライティングを行なわない
GPOBJ_MATOPT_NOMIPMAP MIPMAPを生成しない
GPOBJ_MATOPT_NOCULL カリングを無効にする
GPOBJ_MATOPT_NOZTEST Zテストを無効にする
GPOBJ_MATOPT_NOZWRITE Zバッファ書き込みを無効にする
GPOBJ_MATOPT_BLENDADD プレンドモードを加算に設定する
GPOBJ_MATOPT_SPECULAR 光源計算時にスペキュラー(u_specularExponent)を適用します
GPOBJ_MATOPT_MIRROR 反転した画像として表示する
GPOBJ_MATOPT_CUBEMAP キューブマップとして設定する
GPOBJ_MATOPT_NODISCARD αチャンネルによるピクセル破棄を無効にする
GPOBJ_MATOPT_UVOFFSET UVオフセット値(u_textureOffset)を指定可能にする
GPOBJ_MATOPT_UVREPEAT UVリピート値(u_textureRepeat)を指定可能にする
^p
正常にマテリアルが生成できなかった場合は、エラー3(パラメータの値が異常です)が発生します。
正しく生成された場合は、varで指定された変数にマテリアルID(整数値)が代入されます。
%href
gpcolormat
gpusermat
gpscrmat
%index
gpscrmat
オフスクリーンテクスチャマテリアルの生成
%group
拡張画面制御命令
%prm
var,id,opt
var : 生成されたマテリアルIDが代入される変数名
id : 参照されるオフスクリーンバッファID
opt(0) : マテリアルオプション値
%inst
オフスクリーンテクスチャバッファを参照するマテリアルを生成します。
マテリアルを独自に生成することにより、オフスクリーンにレンダリングされた画像イメージをテクスチャとして再利用することが可能になります。
^p
例:
buffer id_render,512,512,screen_offscreen
gpscrmat id_texmat, id_render, GPOBJ_MATOPT_NOLIGHT|GPOBJ_MATOPT_NOMIPMAP ; テクスチャマテリアル作成
gpbox id_model, 1, , id_texmat ; 箱ノードを追加
^p
上の例では、buffer命令で作成されたオフスクリーンテクスチャバッファを参照する立方体のノードオブジェクトが生成されます。
optパラメーターにより、マテリアルの設定を変更することができます。
これらの設定は、gpmatstate命令で別途設定することも可能です。
^p
マクロ名 内容
-------------------------------------------------------------------
GPOBJ_MATOPT_NOLIGHT ライティングを行なわない
GPOBJ_MATOPT_NOMIPMAP MIPMAPを生成しない
GPOBJ_MATOPT_NOCULL カリングを無効にする
GPOBJ_MATOPT_NOZTEST Zテストを無効にする
GPOBJ_MATOPT_NOZWRITE Zバッファ書き込みを無効にする
GPOBJ_MATOPT_BLENDADD プレンドモードを加算に設定する
GPOBJ_MATOPT_SPECULAR 光源計算時にスペキュラーを適用します
GPOBJ_MATOPT_MIRROR 反転した画像として表示する
GPOBJ_MATOPT_NODISCARD αチャンネルによるピクセル破棄を無効にする
^p
正常にマテリアルが生成できなかった場合は、エラー3(パラメータの値が異常です)が発生します。
正しく生成された場合は、varで指定された変数にマテリアルID(整数値)が代入されます。
%href
gpcolormat
gpusermat
%index
gpusermat
カスタムマテリアルの生成
%group
拡張画面制御命令
%prm
var,"vsh","fsh","defs",color,opt
var : 生成されたマテリアルIDが代入される変数名
"vsh" : バーテックスシェーダーファイル名
"fsh" : フラグメントシェーダーファイル名
"defs" : 追加のラベル定義
color(-1) : マテリアルカラー(24bitRGB値)
opt(0) : マテリアルオプション値
%inst
カスタムマテリアルを生成します。
カスタムマテリアルは、バーテックスシェーダー及びフラグメントシェーダーを指定した独自の描画を行ないます。
OpenGLのシェーダー言語(GLSL)で記述されたシェーダーファイル名を、"vsh"、"fsh"パラメーターに指定します。
"defs"パラメーターには、シェーダーコンパイル時に追加されるラベル定義を記述します。
colorパラメーターでデフォルトのカラーを設定することができます。省略した場合は、白色(0xffffff)が設定されます。
"vsh","fsh","defs"のパラメーターを省略した場合は、gpusershaderで設定された内容が設定されます。
optパラメーターにより、マテリアルの設定を変更することができます。
これらの設定は、gpmatstate命令で別途設定することも可能です。
^p
マクロ名 内容
-------------------------------------------------------------------
GPOBJ_MATOPT_NOLIGHT ライティングを行なわない
GPOBJ_MATOPT_NOMIPMAP MIPMAPを生成しない
GPOBJ_MATOPT_NOCULL カリングを無効にする
GPOBJ_MATOPT_NOZTEST Zテストを無効にする
GPOBJ_MATOPT_NOZWRITE Zバッファ書き込みを無効にする
GPOBJ_MATOPT_BLENDADD プレンドモードを加算に設定する
GPOBJ_MATOPT_SPECULAR 光源計算時にスペキュラーを適用します
GPOBJ_MATOPT_MIRROR 反転した画像として表示する
GPOBJ_MATOPT_CUBEMAP キューブマップとして設定する
GPOBJ_MATOPT_NODISCARD αチャンネルによるピクセル破棄を無効にする
^p
正常にマテリアルが生成できなかった場合は、エラー3(パラメータの値が異常です)が発生します。
正しく生成された場合は、varで指定された変数にマテリアルID(整数値)が代入されます。
^
カスタムマテリアルにより、任意のシェーダーを使って描画のすべてをコントロールすることができるようになります。
これは、シェーダーについての知識がある上級者向けの拡張機能ですので、通常は使用する必要はありません。
カスタムマテリアルを生成した場合は、gpmatprm命令によってシェーダーパラメーターに渡すための値を設定することができます。
%href
gpmatprm
gpcolormat
gptexmat
gpusershader
gpscrmat
%index
gpclone
ノードを複製
%group
拡張画面制御命令
%prm
var,objid,eventid
var : 複製されたオブジェクトのIDが代入される変数名
objid(0) : 複製元のオブジェクトID
eventid(-1) : イベントID
%inst
既に存在するオブジェクトと同じ設定で、新しいオブジェクトを生成します。
varで指定された変数に、複製されたオブジェクトのIDが代入されます。
同一の形状、パラメーター設定(物理設定を除く)を持ちますが座標や角度などを新しく設定することができます。
同一の物体を複数生成する場合に、設定や読み込みを何度も行なう手間を軽減し高速化にもつながります。
^p
例:
gpload id_model,"res/duck" ; モデル読み込み
gpclone i, id_model ; 同じものをクローン
^p
上の例では、res/duck.gpbファイルによる3Dモデルノード(id_model)をクローンして変数iに新しいオブジェクトIDを代入します。
クローンやIDの割り当てに失敗した場合は、varで指定された変数に-1が代入されます。
イベントIDをeventidパラメーターに指定することで、クローン後のオブジェクトにイベントを適用することができます。eventidがマイナス値か、省略された場合はイベントは設定されません。
※現在のバージョンでは、シーン内に存在する表示可能なオブジェクト以外はクローンすることができませんので注意してください。
%href
gpdraw
%index
gpnull
ヌルノードを生成
%group
拡張画面制御命令
%prm
var
var : 生成されたオブジェクトIDが代入される変数名
%inst
空のノードオブジェクト(ヌルノード)を生成します。
varで指定された変数に、複製されたオブジェクトのIDが代入されます。
ヌルノードは、カメラやライトなどモデルを持つ必要のないノードを作成する場合などに使用します。
生成されたノードは、他のノードと同様に3D空間の中で自由に操作することが可能になります。
%href
gpcamera
gplight
%index
gpload
3Dモデルノードを生成
%group
拡張画面制御命令
%prm
var,"file","name"
var : 生成されたオブジェクトIDが代入される変数名
"file" : 読み込みを行なうgpbファイル名
"name" : 読み込み対象となるノード名
"defs" : 追加のラベル定義
%inst
ファイル化された3Dモデルデータ(.gpbファイル)をノードとして生成します。
varで指定された変数に、生成されたオブジェクトのIDが代入されます。
生成されたノードは3D空間の中で自由に操作することが可能になります。
"file"でフォルダ及びファイル名を指定します。「.gpb」などの拡張子は指定する必要ありません。
ファイルの中で特定の名前を持ったノードだけを読み込みたい場合は、"name"で指定することができます。
"name"の指定を省略した場合は、ファイルに含まれている階層構造をすべて読み込みノードとして生成します。
マテリアルに関する情報は、「.material」ファイルから読み込まれます。必ず「.gpb」ファイルとセットで用意するようにしてください。
"defs"パラメーターが指定された場合には、すべてのシェーダーコンパイル時に指定されたラベル定義が追加されます。
^
ノードに物理設定を行なう場合は、gppbind命令を使用してください。
3Dモデルデータの接触判定は、全体を包む球(バウンディング球)が使用されます。
^
生成されたオブジェクト(ノード)の描画はgpdraw命令によりまとめて行なわれます。
^p
例:
gpload id_model,"res/duck" ; モデル読み込み
^p
上の例では、resフォルダ内にあるduck.gpbファイルを読み込みます。
その際に、マテリアル情報が書かれているduck.materialファイルが参照されます。
さらに、テクスチャが必要な場合は、同じフォルダ内の画像ファイルも読み込まれます。ファイル読み込み時にエラーが発生した場合には、オブジェクトIDとしてマイナス値が代入されます。
さらに詳細な読み込み時のエラーやワーニングを調べたい場合は、gpgetlog命令によってログを収集することが可能です。
^
gpload命令で読み込むためのファイル(.gpb形式)は、gameplay3Dで標準的に使用されているデータ形式です。
HGIMG4では、.gpb形式を生成するためのGPBコンバーター(gpbconv.exe)を用意しています。
詳しくは、HGIMG4マニュアルを参照してください。
%href
gpgetlog
gpdraw
gppbind
%index
gpplate
板ノードを生成
%group
拡張画面制御命令
%prm
var,sizex,sizey,color,matobj
var : 生成されたオブジェクトIDが代入される変数名
sizex(1) : 生成されるXサイズ
sizey(1) : 生成されるYサイズ
color(-1) : マテリアルカラー(24bitRGB値)
matobj(-1) : マテリアルID
%inst
垂直に立った1枚の板(四角形)を3Dモデルデータとしてノードを生成します。
varで指定された変数に、生成されたオブジェクトのIDが代入されます。
生成されたノードは3D空間の中で自由に操作することが可能になります。
モデルのX,Yサイズをsizex,sizeyパラメーターで指定することができます。
colorパラメーターでモデルの色(マテリアルカラー)を24bitRGB値(0xRRGGBBで示される値)により指定します。
colorパラメーターが省略された場合は、白色(0xffffff)が使用されます。
matobjパラメーターで、マテリアルIDを指定することができます。
gpcolormat命令などにより、ユーザーが生成したマテリアルを使用する場合は指定してください。
matobjパラメーターが省略された場合は、標準のマテリアルが使用されます。
^
生成されたオブジェクト(ノード)の描画はgpdraw命令によりまとめて行なわれます。
^
ノードに物理設定を行なう場合は、gppbind命令を使用してください。
ノードの接触判定は、もとのモデルと同じ形状が使用されます。
%href
gpdraw
gppbind
%index
gpfloor
床ノードを生成
%group
拡張画面制御命令
%prm
var,sizex,sizey,color,matobj
var : 生成されたオブジェクトIDが代入される変数名
sizex(1) : 生成されるXサイズ
sizey(1) : 生成されるYサイズ
color(-1) : マテリアルカラー(24bitRGB値)
matobj(-1) : マテリアルID
%inst
1枚の床(四角形)を3Dモデルデータとしてノードを生成します。
varで指定された変数に、生成されたオブジェクトのIDが代入されます。
生成されたノードは3D空間の中で自由に操作することが可能になります。
モデルのX,Yサイズをsizex,sizeyパラメーターで指定することができます。
colorパラメーターでモデルの色(マテリアルカラー)を24bitRGB値(0xRRGGBBで示される値)により指定します。
colorパラメーターが省略された場合は、白色(0xffffff)が使用されます。
matobjパラメーターで、マテリアルIDを指定することができます。
gpcolormat命令などにより、ユーザーが生成したマテリアルを使用する場合は指定してください。
matobjパラメーターが省略された場合は、標準のマテリアルが使用されます。
^
生成されたオブジェクト(ノード)の描画はgpdraw命令によりまとめて行なわれます。
^
ノードに物理設定を行なう場合は、gppbind命令を使用してください。
(床モデルは標準で、同じ場所に固定された物理特性が設定されます)
ノードの接触判定は、もとのモデルと同じ形状が使用されます。
%href
gpdraw
gppbind
%index
gpbox
箱ノードを生成
%group
拡張画面制御命令
%prm
var,size,color,matobj
var : 生成されたオブジェクトIDが代入される変数名
size(1) : 生成されるサイズ
color(-1) : マテリアルカラー(24bitRGB値)
matobj(-1) : マテリアルID
%inst
指定サイズの立方体を3Dモデルデータとしてノードを生成します。
varで指定された変数に、生成されたオブジェクトのIDが代入されます。
生成されたノードは3D空間の中で自由に操作することが可能になります。
モデルのX,Yサイズをsizex,sizeyパラメーターで指定することができます。
colorパラメーターでモデルの色(マテリアルカラー)を24bitRGB値(0xRRGGBBで示される値)により指定します。
colorパラメーターが省略された場合は、白色(0xffffff)が使用されます。
matobjパラメーターで、マテリアルIDを指定することができます。
gpcolormat命令などにより、ユーザーが生成したマテリアルを使用する場合は指定してください。
matobjパラメーターが省略された場合は、標準のマテリアルが使用されます。
^
生成されたオブジェクト(ノード)の描画はgpdraw命令によりまとめて行なわれます。
^
ノードに物理設定を行なう場合は、gppbind命令を使用してください。
ノードの接触判定は、もとのモデルと同じ形状が使用されます。
%href
gpdraw
gppbind
%index
gpspr
2Dスプライトノード生成
%group
拡張画面制御命令
%prm
var,bufid,celid,gmode
var : 生成されたオブジェクトIDが代入される変数名
bufid(0) : バッファID
celid(0) : セルID
gmode(3) : コピーモード
%inst
2Dスプライトを表示するためのノードを生成します。
varで指定された変数に、生成されたオブジェクトのIDが代入されます。
生成されたノードは2Dスクリーンの中で自由に操作することが可能になります。
bufidパラメーターで表示元の画像が読み込まれているバッファIDを、celidパラメーターで表示するセルIDを指定します。
また、gmodeパラメーターでgcopy命令で指定するものと同様のコピーモードを指定します。
^p
gmode値 | 内容
---------------------------------------------------
0,1 アルファチャンネル無効
2 アルファチャンネル有効
5 色加算・アルファチャンネル有効
^p
生成されたオブジェクト(ノード)の描画はgpdraw命令によりまとめて行なわれます。
^p
; スプライト1個あたりの描画
gmode [gmode設定値]
pos [ノードX座標],[ノードY座標]
celput [バッファID], [セルID], [ノードXスケール], [ノードYスケール], [ノードZ回転]
^p
つまり、2Dスプライトノードは上のような処理をあらかじめ登録した設定をまとめて行なう機能と考えることができます。
また、getcoli命令による2Dスプライトノード同士の接触判定を手軽に行なうことが可能です。
%href
gpdraw
%index
gplight
ライトノードを設定
%group
拡張画面制御命令
%prm
id,opt,range,inner,outer
id(0) : オブジェクトのID
opt(0) : ライト生成オプション
range(1) : 影響範囲パラメーター
inner(0.5): 内側の減衰パラメーター
outer(1) : 外側の減衰パラメーター
%inst
生成済みのノードにライトとしての機能を追加します。
idパラメーターで、ノードのオブジェクトIDを指定します。
optパラメーターでライト生成オプション値を指定することができます。
^p
opt値 | 内容
--------------------------------------------------------------
GPOBJ_LGTOPT_NORMAL 平行光源(ディレクショナルライト)
GPOBJ_LGTOPT_POINT 点光源(ポイントライト)
GPOBJ_LGTOPT_SPOT スポットライト
^p
rangeパラメーターは、ポイントライト及びスポットライトの影響範囲に関する設定を行ないます。
また、inner,outerパラメーターは、スポットライトが減衰する内側・外側のパラメーターを設定します。
^p
例:
gpnull id_alight ; ヌルノードを生成する
gplight id_alight, GPOBJ_LGTOPT_NORMAL ; ライトとして登録する
gpuselight id_alight ; デフォルトのライトに設定
^p
gplight命令は、あくまでもオブジェクトにライトとしての機能を設定するだけです。
設定されたライトは、gpuselight命令によりカレントライトとして登録することで、以降に生成されるモデル・マテリアルに反映されます。
%href
gpresetlight
gpuselight
gpnull
%index
gpcamera
カメラノードを設定
%group
拡張画面制御命令
%prm
id,fov,aspect,near,far,sw
id(0) : オブジェクトのID
fov(45) : 視野(FOV)パラメーター
aspect(1.5): アスペクト比
near(0.5) : ニアクリップZ値
far(768) : ファークリップZ値
sw(0) : カメラタイプ値(0,1)
%inst
生成済みのノードにカメラとしての機能を追加します。
idパラメーターで、ノードのオブジェクトIDを指定します。
fovパラメーターで視野(FOV)を設定します。45を指定した場合は、45度の視野となります。
aspectパラメーターでアスペクト比(縦横比)を指定します。
また、near,farパラメーターにより近くと遠くのZ座標(クリッピングに使われるZ座標)を指定することができます。
^p
例:
gpnull id_camera ; ヌルノードを生成する
gpcamera id_camera, 45, 1.5, 0.5, 768 ; カメラとして設定する
gpusecamera id_camera ; 使用するカメラを選択する
setpos id_camera, 0,20,20 ; カメラ位置を設定する
^p
カメラタイプ値(sw)に1を指定することにより、平行投影(Orthographic)を行うカメラを設定することが可能です。その場合は、fov値はズーム値(1.0が標準)として反映されます。
シーン内に配置されたカメラは、gpusecamera命令により切り替えることができます。
%href
gpusecamera
gpnull
%index
gplookat
指定座標に向けてノードを回転
%group
拡張画面制御命令
%prm
objid,x,y,z
objid(0) : オブジェクトID
x(0) : 目標となるX座標
y(0) : 目標となるY座標
z(0) : 目標となるZ座標
%inst
3Dノードを、指定した座標に向けて回転させます。
カメラに適用した場合は、指定座標を注視する角度に設定されます。
%href
%index
gppbind
ノードに標準的な物理特性を設定
%group
拡張画面制御命令
%prm
objid,mass,friction,option
objid(0) : オブジェクトID
mass(1) : 重さ
friction(0.5) : 摩擦係数
option(0) : 設定オプション
%inst
ノードオブジェクトに対して、基本的な物理設定を行ないます。
massパラメーターは物体の重さ。frictionパラメーターは摩擦係数です。値を省略した場合は、デフォルト値が使用されます。
重さ(mass)を0にすることで静的剛体(衝突はするが、動かない)として設定されます。
それ以外の場合は、物理法則に従って床のある場所まで落下します。
^
gppbind命令は基本的な物理特性だけを設定します。詳細な物理パラメーターを設定する場合には、gppset命令を使用して設定を行ってください。
^
※物理挙動を設定する場合は、必ず床(地面)となる部分を作成しておいてください。
gpfloor命令によって生成された床に標準的な物理特性を設定することで、固定された床面を生成することができます。
床が存在しなかった場合、物体は永遠に落下を続けることになります。
^
物理設定を行なったノードオブジェクトは、それ以降自立して動作するようになり、setposなどの座標変更は無効となります。
物体に力を加えたい場合は、gppapply命令を使用してください。
^
optionパラメーターにより設定時のオプションを付加します。以下のマクロを指定することができます。
^p
opt値 | 内容
--------------------------------------------------------------
GPPBIND_NOSCALE コリジョンにノードのスケールを反映させない
GPPBIND_MESH コリジョンとしてノードのモデルを反映させる
^p
ノードオブジェクトに物理設定を行なうと、接触判定を行う情報(コリジョン)が作成されます。
箱ノード、床ノード、板ノードはそれぞれの形状をコリジョンとして扱います。optionに、GPPBIND_NOSCALEを指定した場合は、スケールが反映されていないもともとの形状がコリジョンとなります。
3Dモデルノードは、標準ではモデル全体を覆うスフィア(球体)をコリジョンとして作成します。ただし、optionにGPPBIND_MESHを指定した場合は、モデルの形状そのものをコリジョンとして扱います。ただし、複雑なモデル形状をコリジョンにした場合、接触判定にかかる負荷が増大します。
また、モデルの形状をコリジョンとして扱う際には凹んだ部分を考慮する必要があります。凹型の部分は正しく判定されない場合があります。
コリジョンは、モデルの形状とは独立した情報となります。コリジョンが作成された後は、ノードのスケール値は反映されませんので注意してください。
%href
gppapply
gppset
%index
getwork2
ノードワーク値2を取得
%group
拡張画面制御命令
%prm
id,x,y,z
id : オブジェクトID
(x,y,z) : 取得する変数
%inst
オブジェクトの持つwork2パラメーターを取得します。
(x,y,z)は、実数型の変数として設定されます。
命令の最後に「i」を付加することで、整数値として値を取得することができます。
%href
getwork2i
%index
getwork2i
ノードワーク値2を取得(整数値)
%group
拡張画面制御命令
%prm
id,x,y,z
id : オブジェクトID
(x,y,z) : 取得する変数
%inst
オブジェクトの持つwork2パラメーターを取得します。
(x,y,z)は、整数型の変数として設定されます。
getwork2命令を使用することで、実数値として値を取得することができます。
%href
getwork2
%index
getcolor
オブジェクトカラー値を取得
%group
拡張画面制御命令
%prm
id,x,y,z
id : オブジェクトID
(x,y,z) : 取得する変数
%inst
オブジェクトの持つcolorパラメーターを取得します。
(x,y,z)は、実数型の変数として設定されます。
命令の最後に「i」を付加することで、整数値として値を取得することができます。
%href
getcolori