あれ? これどうして横に引き伸ばされるわけ?

アバター
T-ARCs
記事: 4
登録日時: 5年前

あれ? これどうして横に引き伸ばされるわけ?

投稿記事 by T-ARCs » 5年前

何故か横に引き伸ばされてしまう

立方体を表示させるつもりなのに

一体何が問題なんだろうか……

[code]

#pragma once
#include "DXGraphics.h"

// DirectX 3Dグラフィックス関連

class CDXGraphics3D;

struct XYZBuffer
{

FLOAT x,y,z;
};

struct ColorBuffer
{
D3DCOLOR color;
};

class CDXGraphics3D
{
public:
class CDXGraphics * m_pDXG;

XYZBuffer * pXYZ;
ColorBuffer * pCol;
DWORD * pIndex;

LPDIRECT3DVERTEXDECLARATION9 pDecl;
LPDIRECT3DVERTEXBUFFER9 pD3DVB_XYZ;
LPDIRECT3DVERTEXBUFFER9 pD3DVB_COLOR;
LPDIRECT3DINDEXBUFFER9 pD3DIB;

LPDIRECT3DVERTEXSHADER9 vertex_shader;
LPDIRECT3DPIXELSHADER9 pixel_shader;


D3DXMATRIX mat;
D3DXMATRIX matWorld;
D3DXMATRIX matScalling;
D3DXVECTOR3 vEye,vAt,vUp;
D3DXMATRIX matView;
D3DXMATRIX matPers;

LPDIRECT3DSTATEBLOCK9 pStateBlock;

CDXGraphics3D(CDXGraphics *pDXG)
{
m_pDXG = pDXG;
//頂点フォーマットの定義
D3DVERTEXELEMENT9 decl[] =
{
{0,0,D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_POSITION,0},
{1,0,D3DDECLTYPE_D3DCOLOR,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_COLOR,0},
D3DDECL_END()
};

//頂点宣言オブジェクトを作る
m_pDXG->m_pD3DDevice->CreateVertexDeclaration(
decl,
&pDecl
);
}

void preparing_3D()
{
set_viewport();
create_buffers();
create_shaders();
calculation();
settings_and_register();

}

void set_viewport()
{
HRESULT hr;

D3DVIEWPORT9 vp;
vp.X = 0;
vp.Y = 0;
vp.Width = m_pDXG->m_d3dpp.BackBufferWidth;
vp.Height = m_pDXG->m_d3dpp.BackBufferHeight;
vp.MinZ = 0.0f;
vp.MaxZ = 1.0f;

hr = m_pDXG->m_pD3DDevice->SetViewport(&vp);
if(FAILED(hr))
{
MessageBoxW(NULL,L"",L"ERR",MB_OK);
}
}

void create_buffers()
{
//頂点バッファ、インデックスバッファの作成
//頂点バッファ

HRESULT hr;

int vertex_number = 8;

hr = m_pDXG->m_pD3DDevice->CreateVertexBuffer(sizeof(XYZBuffer) * vertex_number,0,0,D3DPOOL_MANAGED,&pD3DVB_XYZ,NULL);
if(FAILED(hr))
{
MessageBoxW(NULL,L"",L"ERR",MB_OK);
}
hr = m_pDXG->m_pD3DDevice->CreateVertexBuffer(sizeof(ColorBuffer) * vertex_number,0,0,D3DPOOL_MANAGED,&pD3DVB_COLOR,NULL);
if(FAILED(hr))
{
MessageBoxW(NULL,L"",L"ERR",MB_OK);
}

//インデックスバッファ

//インデックスバッファの考え方
// 立方体メッシュ→6面
// 正方形→三角形プリミティブ2つで構成
// 三角形プリミティブ→3つの頂点
// インデックスバッファ→ 6 * 2 * 3 = 36頂点分必要

hr = m_pDXG->m_pD3DDevice->CreateIndexBuffer(
sizeof(DWORD) * 36,
0,
D3DFMT_INDEX32,
D3DPOOL_MANAGED,
&pD3DIB,
NULL
);
if(FAILED(hr))
{
MessageBoxW(NULL,L"",L"ERR",MB_OK);
}

//頂点バッファへの書き込み

pD3DVB_XYZ->Lock(0,0,(LPVOID *)&pXYZ,0);
// 書き込み
pXYZ[0].x =1.0f;pXYZ[0].y =1.0f; pXYZ[0].z =1.0f;
pXYZ[1].x =1.0f;pXYZ[1].y =1.0f; pXYZ[1].z =-1.0f;
pXYZ[2].x =1.0f;pXYZ[2].y =-1.0f; pXYZ[2].z =1.0f;
pXYZ[3].x =1.0f;pXYZ[3].y =-1.0f; pXYZ[3].z =-1.0f;
pXYZ[4].x =-1.0f;pXYZ[4].y =1.0f; pXYZ[4].z =1.0f;
pXYZ[5].x =-1.0f;pXYZ[5].y =1.0f; pXYZ[5].z =-1.0f;
pXYZ[6].x =-1.0f;pXYZ[6].y =-1.0f;pXYZ[6].z =1.0f;
pXYZ[7].x =-1.0f;pXYZ[7].y =-1.0f;pXYZ[7].z =-1.0f;
pD3DVB_XYZ->Unlock();


pD3DVB_COLOR->Lock(0,0,(LPVOID *)&pCol,0);
// 書き込み
pCol[0].color=D3DCOLOR_XRGB(0x00,0xff,0x00);
pCol[1].color=D3DCOLOR_XRGB(0x00,0x00,0x00);
pCol[2].color=D3DCOLOR_XRGB(0x00,0x00,0x00);
pCol[3].color=D3DCOLOR_XRGB(0xff,0x00,0x00);
pCol[4].color=D3DCOLOR_XRGB(0x00,0x00,0xff);
pCol[5].color=D3DCOLOR_XRGB(0x00,0x00,0x00);
pCol[6].color=D3DCOLOR_XRGB(0x00,0xff,0x00);
pCol[7].color=D3DCOLOR_XRGB(0x00,0x00,0x00);
pD3DVB_COLOR->Unlock();

//インデックスバッファへの書き込み

pD3DIB->Lock(0,0,(LPVOID *)&pIndex,0);
//書き込み
pIndex[0]=0; pIndex[1]=3; pIndex[2]=1;
pIndex[3]=0; pIndex[4]=2; pIndex[5]=3;
pIndex[6]=0; pIndex[7]=5; pIndex[8]=4;
pIndex[9]=0; pIndex[10]=1; pIndex[11]=5;
pIndex[12]=4; pIndex[13]=2; pIndex[14]=0;
pIndex[15]=4; pIndex[16]=6; pIndex[17]=2;
pIndex[18]=5; pIndex[19]=6; pIndex[20]=4;
pIndex[21]=5; pIndex[22]=7; pIndex[23]=6;
pIndex[24]=3; pIndex[25]=6; pIndex[26]=7;
pIndex[27]=3; pIndex[28]=2; pIndex[29]=6;
pIndex[30]=1; pIndex[31]=7; pIndex[32]=5;
pIndex[33]=1; pIndex[34]=3; pIndex[35]=7;

pD3DIB->Unlock();
}

void create_shaders()
{
HRESULT hr;
//プログラマブルシェーダの作成

LPD3DXBUFFER pCode;

hr = D3DXAssembleShaderFromFileW(
L"dat\\vertex_shader.txt",
NULL,NULL,0,
&pCode,
NULL
);
if(FAILED(hr))
{
MessageBoxW(NULL,L"頂点シェーダのコンパイルに失敗",L"ERR",MB_OK);
}

hr = m_pDXG->m_pD3DDevice->CreateVertexShader((DWORD *)pCode->GetBufferPointer(),&vertex_shader);
DX_RELEASE(pCode);
if(FAILED(hr))
{
MessageBoxW(NULL,L"",L"ERR",MB_OK);
}

hr = D3DXAssembleShaderFromFileW(
L"dat\\pixel_shader.txt",
NULL,NULL,0,
&pCode,
NULL
);
if(FAILED(hr))
{
MessageBoxW(NULL,L"ピクセルシェーダのコンパイルに失敗",L"ERR",MB_OK);
}

hr = m_pDXG->m_pD3DDevice->CreatePixelShader((DWORD *)pCode->GetBufferPointer(),&pixel_shader);
DX_RELEASE(pCode);
if(FAILED(hr))
{
MessageBoxW(NULL,L"",L"ERR",MB_OK);
}
}


void calculation()
{
//行列の計算
// ワールド
D3DXMatrixRotationX(&matWorld , 1.0f);

D3DXMatrixScaling(
&matScalling,
1.0f,
1.0f,
1.0f
);

vEye.x = 0.0f;
vEye.y = 5.0f;
vEye.z = -5.0f;

vAt.x = 0.0f;
vAt.y = 0.0f;
vAt.z = 0.0f;

vUp.x = 0.0f;
vUp.y = 1.0f;
vUp.z = 0.0f;

// ビュー
D3DXMatrixLookAtLH(
&matView,
&vEye,
&vAt,
&vUp
);
// 透視(パース)
D3DXMatrixPerspectiveFovLH(
&matPers,
3.1415f / 3.0f,
m_pDXG->m_d3dpp.BackBufferWidth / m_pDXG->m_d3dpp.BackBufferHeight,
3.0f,
12.0f
);
//掛け合わせ
mat = matScalling * matWorld * matView * matPers;
//転置行列に変換
D3DXMatrixTranspose(&mat,&mat);
m_pDXG->m_pD3DDevice->SetVertexShaderConstantF(0,(FLOAT *)&mat,4);
}

void settings_and_register()
{

m_pDXG->m_pD3DDevice->BeginStateBlock();
// レンダリングステートを設定
m_pDXG->m_pD3DDevice->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);
m_pDXG->m_pD3DDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);
m_pDXG->m_pD3DDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
// サンプラステート
// テクスチャステージステート
m_pDXG->m_pD3DDevice->EndStateBlock(&pStateBlock);
pStateBlock->Apply();

// 頂点宣言オブジェクトを登録する
m_pDXG->m_pD3DDevice->SetVertexDeclaration(pDecl);
// 頂点バッファインデックスバッファを登録
m_pDXG->m_pD3DDevice->SetStreamSource(0 ,pD3DVB_XYZ,0,sizeof(XYZBuffer) );
m_pDXG->m_pD3DDevice->SetStreamSource(1 ,pD3DVB_COLOR,0,sizeof(ColorBuffer) );
m_pDXG->m_pD3DDevice->SetIndices(pD3DIB);
// プログラマブルシェーダーを登録する
m_pDXG->m_pD3DDevice->SetVertexShader(vertex_shader);
m_pDXG->m_pD3DDevice->SetPixelShader(pixel_shader);
}

void render_object()
{
// レンダリング
m_pDXG->m_pD3DDevice->DrawIndexedPrimitive(
D3DPT_TRIANGLELIST,
0,0,8,0,12
);
}

};

[/code]
添付ファイル
scr_cap.png
scr_cap.png (43.73 KiB) 閲覧数: 1184 回
最後に編集したユーザー T-ARCs on 2018年9月09日(日) 19:26 [ 編集 8 回目 ]

コメントはまだありません。