始めましてIke_SDKといいます。
毎回、DXライブラリを使わせてプログラミングしたりしているのですが、今回はDXライブラリで初の3Dに挑戦してみたのですが、以下の画像のようにモデルが上手く表示されません。
DxLibModelViewer.exeでは正確と表示されているのですが、プログラムを走らせると画像のように輪郭というかエッジの部分が黒く太くなります。
問題の画像
http://www1.axfc.net/uploader/He/so/297783
画像のモデルデータはMMDのマシンさんのタコルカを使わせてもらいました
http://www10.plala.or.jp/masisi/DL_MMD.html
他にもいろいろなモデルデータを使って試してみましたが全て同じ結果になってしまいます。
以下はプログラムになります
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
//3Dモデルの変数
int ModelHandle ;
//カメラ座標の関数
float VRotate, HRotate, TRotate ;
// タイトルを test に変更
SetMainWindowText( "3Dテストプログラム" ) ;
// 画面モードの変更
SetGraphMode( 800 , 600 , 32 ) ;
// ウインドウモードに変更
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1 ; // エラーが起きたら直ちに終了
}
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
// ニア、ファー クリップの距離を設定
SetCameraNearFar( 100.0f, 2000.0f ) ;
// カメラの回転値を初期化
VRotate = 0.0f ;
HRotate = 0.0f ;
TRotate = 0.0f ;
// モデルの読み込み
ModelHandle = MV1LoadModel( "モデルデータ保存ディレクトリ" );
/////////////////////////////////////////////////////////////////////////////////
//メインループ
/////////////////////////////////////////////////////////////////////////////////
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
DrawBox( 0 , 0 , 800 , 600 , GetColor( 255 , 255 , 255 ) , TRUE) ; // 四角形を描画
// 左シフトキーを押しているかどうかで処理を分岐
if( CheckHitKey( KEY_INPUT_LSHIFT ) == 1 ){
// 左右キーでカメラの捻り方向回転値を変更
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
TRotate -= PHI_F / 60.0f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
TRotate += PHI_F / 60.0f ;
}
}else{
// 左右キーでカメラの水平方向回転値を変更
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
HRotate -= PHI_F / 60.0f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
HRotate += PHI_F / 60.0f ;
}
}
// 上下キーでカメラの垂直方向回転値を変更
if( CheckHitKey( KEY_INPUT_UP ) == 1 ){
VRotate += PHI_F / 60.0f ;
}
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 ){
VRotate -= PHI_F / 60.0f ;
}
// カメラの位置と回転値をセット、カメラの位置は原点
SetCameraPositionAndAngle( VGet( 0.0f, 0.0f, 0.0f ), VRotate, HRotate, TRotate ) ;
//モデルの拡大
MV1SetScale( ModelHandle, VGet(10.0f, 10.0f, 10.0f) );
//モデルの座標
MV1SetPosition( ModelHandle, VGet( 0.0f, -50.0f, 100.0f ) ) ;
// モデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
// 画面をクリア
ClearDrawScreen() ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
動作環境は
OSが32bitのWindows 7 Home Premium
CPUはIntel Corei7 870
メモリ4G
グラフィックボードがGeForce GTS 250