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 にしたら明るくなります。
これは、なぜなのでしょうか?
法線ベクトルは単位ベクトルではないのでしょうか?
まだ、勉強を始めたばかりで、ライティングも理解できておりませんが、お助けを。