本文整理汇总了C++中Vector4::Transform方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector4::Transform方法的具体用法?C++ Vector4::Transform怎么用?C++ Vector4::Transform使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vector4
的用法示例。
在下文中一共展示了Vector4::Transform方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
CRsElementDesc& CVertexShader::Process( const std::shared_ptr<CMesh> pMesh )
{
m_vsOutput.m_vertices.clear();
m_vsOutput.m_vertices.reserve( pMesh->m_nVerties );
m_vsOutput.m_localVertices.reserve( pMesh->m_nVerties );
Matrix4 wvpMatrix = m_worldMatrix * m_viewMatrix * m_projectionMatrix;
for ( int i = 0; i < pMesh->m_nVerties; ++i )
{
Vector4 position = pMesh->m_vertices[i];
m_vsOutput.m_localVertices.emplace_back( position.X, position.Y, position.Z );
if ( pMesh->m_coordinate == COORDINATE::OBJECT_COORDINATE )
{
position.Transform( wvpMatrix );
}
m_vsOutput.m_vertices.emplace_back( position );
}
unsigned int key = 0;
m_vsOutput.m_faces.clear();
for ( std::vector<Face>::iterator faceiter = pMesh->m_faces.begin( ); faceiter != pMesh->m_faces.end( ); ++faceiter )
{
key = faceiter - pMesh->m_faces.begin( );
if ( m_vsOutput.m_faces.size( ) <= key )
{
m_vsOutput.m_faces.emplace_back( );
m_vsOutput.m_faces[key].reserve( faceiter->m_indices.size( ) );
}
for ( std::vector<int>::iterator indexiter = faceiter->m_indices.begin( ); indexiter != faceiter->m_indices.end( ); ++indexiter )
{
m_vsOutput.m_faces[key].emplace_back( *indexiter );
}
}
m_vsOutput.m_coordinate = pMesh->m_coordinate;
return m_vsOutput;
}
示例2: Render
void ModelRenderer::Render(const Camera* camera)
{
if(!_renders)
return;
// ワールド行列設定
Matrix SclMtx, RotMtx, PosMtx, WldMtx, WVPMtx;
// 拡縮
D3DXMatrixScaling(&SclMtx, _scale.x, _scale.y, _scale.z);
// 回転 : switch-case…クォータニオンか回転行列かXYZ指定か
this->Evaluate();
RotMtx = this->_worldRotationMatrix;
// 位置
D3DXMatrixTranslation(&PosMtx, _position.x, _position.y, _position.z);
GraphicsManager::_device->SetRenderState(D3DRS_CULLMODE, _cullingState);
// デバッグ用
//GraphicsManager::_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
// シェーダを使用する場合カメラのビュー行列(0)、プロジェクション行列(1)をワールド行列に合成
WldMtx = SclMtx * RotMtx * PosMtx;
WVPMtx = WldMtx * camera->GetMatrix(ViewBehavior::VIEW) * camera->GetMatrix(ViewBehavior::PROJECTION);
// カメラの座標をシェーダに使用するための行列変換
Matrix CamMtx = WldMtx * camera->GetMatrix(ViewBehavior::VIEW);
D3DXMatrixInverse(&CamMtx, NULL, &CamMtx);
auto eye = camera->GetEye();
Vector4 EyePos = Vector4(eye.x, eye.y, eye.z, 1);
EyePos.Transform(CamMtx);
D3DXVec4Normalize((D3DXVECTOR4*)&EyePos, (D3DXVECTOR4*)&EyePos);
// シェーダ設定
_shader->SetTechnique();
// シェーダにワールド * ビュー * プロジェクション行列を渡す
_shader->SetWVPMatrix(WVPMtx);
// シェーダー特有の値の設定
_shader->ApplyEffect(RotMtx, EyePos);
HRESULT hr;
// 3D モデルのパーツ分ループして描画
for(size_t i = 0 ; i < _mesh->GetMaterialNumber(); i++)
{
// テクスチャが存在しない場合のカラー
D3DXVECTOR4 color = D3DXVECTOR4(1.0,1.0,1.0,1.0);
// 格パーツに対応するテクスチャを設定
// シェーダにテクスチャを渡す
if(NULL != _textures[i])
{
LPDIRECT3DTEXTURE9 texture = _textures[i]->GetTextureData();
// シェーダにカラーを渡す
_shader->SetColor(_colorRGBA);
_shader->SetTexture(texture);
}else
_shader->SetColor(color);
// シェーダの使用開始
_shader->BeginShader();
// シェーダのパス設定
_shader->BeginPass(_addsBlend);
// パーツの描画
if(SUCCEEDED(GraphicsManager::_device->BeginScene()))
{
_mesh->GetMesh()->DrawSubset(i);
V(GraphicsManager::_device->EndScene());
}
// パス終了
_shader->EndPass();
// シェーダ終了
_shader->EndShader();
}
}
示例3: Render
void GraphicalPlane::Render(const Camera* camera)
{
// 描画しないならここで関数終了
if(!_renders)
return;
// 分割読み込みした場合の画像範囲選択
if(_previousNumber != _number)
{
Vertex* vertex;
_mesh->GetMesh()->LockVertexBuffer( 0, (void**)&vertex );
vertex[0]._uv.x = (float)_rects[_number].left / _textures[0]->GetImageInfo().Width;
vertex[0]._uv.y = (float)_rects[_number].bottom / _textures[0]->GetImageInfo().Height;
vertex[1]._uv.x = (float)_rects[_number].right / _textures[0]->GetImageInfo().Width;
vertex[1]._uv.y = (float)_rects[_number].bottom / _textures[0]->GetImageInfo().Height;
vertex[2]._uv.x = (float)_rects[_number].left / _textures[0]->GetImageInfo().Width;
vertex[2]._uv.y = (float)_rects[_number].top / _textures[0]->GetImageInfo().Height;
vertex[3]._uv.x = (float)_rects[_number].right / _textures[0]->GetImageInfo().Width;
vertex[3]._uv.y = (float)_rects[_number].top / _textures[0]->GetImageInfo().Height;
_mesh->GetMesh()->UnlockIndexBuffer();
_previousNumber = _number;
}
// ワールド行列設定
Matrix SclMtx, RotMtx, PosMtx, WldMtx, WVPMtx;
// 拡縮
D3DXMatrixScaling(&SclMtx, _scale.x, _scale.y, _scale.z);
// 回転
// クォータニオンか回転行列かXYZ指定か
this->Evaluate();
RotMtx = _worldRotationMatrix;
// ビルボードの場合
if(_isBillBoard)
{
Vector3 cameraPosition = camera->GetEye() ;
GetBillBoardRotation(&_position, &cameraPosition, &RotMtx);
}
// 位置
D3DXMatrixTranslation(&PosMtx, _position.x, _position.y, _position.z);
// カリングを設定
GraphicsManager::_device->SetRenderState(D3DRS_CULLMODE, _cullingState);
// デバッグ用
//GraphicsManager::_device->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME );
// シェーダを使用する場合カメラのビュー行列(0)、プロジェクション行列(1)をワールド行列に合成
WldMtx = SclMtx * RotMtx * PosMtx;
WVPMtx = WldMtx * camera->GetMatrix(ViewBehavior::VIEW) * camera->GetMatrix(ViewBehavior::PROJECTION);
// カメラの座標をシェーダに使用するための行列変換
Matrix CamMtx = WldMtx * camera->GetMatrix(ViewBehavior::VIEW);
D3DXMatrixInverse(&CamMtx, NULL, &CamMtx);
Vector4 EyePos = Vector4(
camera->GetEye().x,
camera->GetEye().y,
camera->GetEye().z,
1
);
EyePos.Transform(CamMtx);
D3DXVec4Normalize((D3DXVECTOR4*)&EyePos, (D3DXVECTOR4*)&EyePos);
// シェーダ設定
_shader->SetTechnique();
// シェーダにワールド * ビュー * プロジェクション行列を渡す
_shader->SetWVPMatrix(WVPMtx);
// シェーダー特有の値の設定
_shader->ApplyEffect(RotMtx, EyePos);
HRESULT hr;
// 3D モデルのパーツ分ループして描画
for(size_t i = 0 ; i < _mesh->GetMaterialNumber(); i++)
{
// テクスチャが存在しない場合のカラー
D3DXVECTOR4 vec4 = D3DXVECTOR4(1.0,1.0,1.0,1.0);
// 格パーツに対応するテクスチャを設定
// シェーダにテクスチャを渡す
if(NULL != _textures[i])
{
LPDIRECT3DTEXTURE9 texture = _textures[i]->GetTextureData();
// シェーダにカラーを渡す
_shader->SetColor(_colorRGBA);
_shader->SetTexture(texture);
}else
_shader->SetColor(vec4);
// シェーダの使用開始
_shader->BeginShader();
// シェーダのパス設定
_shader->BeginPass(_addsBlend);
// パーツの描画
if(SUCCEEDED(GraphicsManager::_device->BeginScene()))
{
_mesh->GetMesh()->DrawSubset(i);
V(GraphicsManager::_device->EndScene());
}
// パス終了
_shader->EndPass();
// シェーダ終了
_shader->EndShader();
}
}
示例4:
Vector4 operator*(const Matrix4 &lhs, const Vector4 &rhs)
{
return Vector4(rhs.Transform(lhs));
}