DirectX9かOpenGLか、何がいいのかと調べていたら、龍神録にUPされているではありませんか。
おお、DxLibでも使えるのね・・・ってことで、さっそく試してみました。
UPされたのは新しいのに、DxLibのバージョンは古いのねと思いながら・・・・
これから、勉強する人のためには、やっぱり新しいバージョンの方がよろしいかと思い
チェックしてみました。
>DXライブラリは2D専用ライブラリです。
>しかし、1つだけ3Dが利用出来る関数があります。
いまは、使用できる3D関数が増えたのでは?
>DrawPolygon3Dという関数です。(関数の仕様について、出来るだけまずはリンクから本家リファレンスをご覧下さい)
リンクが違っています。
>2,4,8,16,32,64,256,512...そういうサイズの画像しか扱えません
画像は8ピクセル以上ですので、2,4は使えません。
>VERTEX_3D
これは、旧バージョンで、最新バージョンではVERTEX3Dです。
ついでにプログラムも変えました。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GrHandle ;
float Z, ZAdd ;
VERTEX3D Vertex[6] ; // ポリゴン2枚なので、頂点は6個
ChangeWindowMode(TRUE);
// DXライブラリ初期化処理
if( DxLib_Init() == -1 )
return -1 ; // エラーが起きたら直ちに終了
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// テクスチャの読み込み
GrHandle = LoadGraph( "mydat/img/kabe.png" ) ;
// Z値の初期化
Z = 0.0F ;
// Z値の加算値を初期化(最初は近づける)
ZAdd = -1.0F ;
// 何かキーが押されるまでループ
while( CheckHitKeyAll() == 0 )
{
// メッセージ処理
if( ProcessMessage() != 0 ) break ;
// 画面の初期化
ClearDrawScreen() ;
// Z値の処理
Z += ZAdd ;
// 一定のラインを越えていたら進行方向を反転する
if( Z < -300.0F || Z > 300.0F ) ZAdd = -ZAdd ;
// 頂点情報のセット
{
// 画面の中央に幅・高さ100で描画
Vertex[0].pos.x = 320.0F - 50.0F ; Vertex[0].pos.y = 240.0F + 50.0F ; Vertex[0].pos.z = Z ;
Vertex[0].u = 0.0F ;
Vertex[0].v = 0.0F ;
Vertex[1].pos.x = 320.0F + 50.0F ; Vertex[1].pos.y = 240.0F + 50.0F ; Vertex[1].pos.z = Z ;
Vertex[1].u = 1.0F ;
Vertex[1].v = 0.0F ;
Vertex[2].pos.x = 320.0F - 50.0F ; Vertex[2].pos.y = 240.0F - 50.0F ; Vertex[2].pos.z = Z ;
Vertex[2].u = 0.0F ;
Vertex[2].v = 1.0F ;
Vertex[3].pos.x = 320.0F + 50.0F ; Vertex[3].pos.y = 240.0F - 50.0F ; Vertex[3].pos.z = Z ;
Vertex[3].u = 1.0F ;
Vertex[3].v = 1.0F ;
Vertex[4].pos.x = 320.0F - 50.0F ; Vertex[4].pos.y = 240.0F - 50.0F ; Vertex[4].pos.z = Z ;
Vertex[4].u = 0.0F ;
Vertex[4].v = 1.0F ;
Vertex[5].pos.x = 320.0F + 50.0F ; Vertex[5].pos.y = 240.0F + 50.0F ; Vertex[5].pos.z = Z ;
Vertex[5].u = 1.0F ;
Vertex[5].v = 0.0F ;
// 輝度は全要素100%
for(int i=0;i<6;i++){
Vertex.dif = GetColorU8(255,255,255,255) ;
Vertex.norm = VGet(0.0f,0.0f,-1.0f) ;
Vertex.spc = GetColorU8(0,0,0,0) ;
Vertex.su=0.0f;
Vertex.sv=0.0f;
}
}
// ポリゴンを透過色無しで2枚描画
DrawPolygon3D( Vertex, 2, GrHandle, TRUE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}さて、質問なのですが・・・
画像が暗いのです。そこで、いろいろといじっておりましたら・・・・
Vertex.norm = VGet(0.0f,0.0f,-1.0f) ; の最後のZ方向の法線ベクトル値を
例えば -2.0f にしたら明るくなります。
これは、なぜなのでしょうか?
法線ベクトルは単位ベクトルではないのでしょうか?
まだ、勉強を始めたばかりで、ライティングも理解できておりませんが、お助けを。