本文整理汇总了C++中LPD3DXSPRITE::GetTransform方法的典型用法代码示例。如果您正苦于以下问题:C++ LPD3DXSPRITE::GetTransform方法的具体用法?C++ LPD3DXSPRITE::GetTransform怎么用?C++ LPD3DXSPRITE::GetTransform使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LPD3DXSPRITE
的用法示例。
在下文中一共展示了LPD3DXSPRITE::GetTransform方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: currentPosition
void CTextureDx9::RenderWithoutTransform(LPD3DXSPRITE _lpDSpriteHandle, D3DXVECTOR2 position, D3DXVECTOR2 Center, D3DXVECTOR2 scale, float angle, D3DCOLOR color, RECT *srcRect, float deep)
{
D3DXVECTOR2 CamTransDistance;
CamTransDistance.x = -Camera::getInstance()->GetMatrixTranslate()._41;
CamTransDistance.y = Camera::getInstance()->GetMatrixTranslate()._42;
position.y += Camera::getInstance()->getBound().bottom;
Center.y += Camera::getInstance()->getBound().bottom;
D3DXVECTOR3 currentPosition(position.x + CamTransDistance.x, position.y, deep); //toa do trong the gioi thuc
D3DXMATRIX oldMatrix; //ma tran luu lai phep transform cua SpriteBatch
_lpDSpriteHandle->GetTransform(&oldMatrix);
D3DXVECTOR2 centerScale = D3DXVECTOR2(position.x, position.y);//lay vi tri cua vat the lam tam xoay(vi vi tri cua vat la vi tri chinh giua cua vat)
D3DXMATRIX matrixScalingRotate; //ma tran rotate, scale
D3DXMatrixTransformation2D(&matrixScalingRotate, ¢erScale, 0.0f, &scale, &Center, D3DXToRadian(angle), 0);
D3DXMATRIX finalMatrix = matrixScalingRotate * oldMatrix;
_lpDSpriteHandle->SetTransform(&finalMatrix); //ma tran chuyen toa do vi tri cua vat the tu the gioi thuc sang toa do trong directX de ve
_lpDSpriteHandle->Draw(
this->m_lpTexture,
srcRect,
&D3DXVECTOR3((float)(srcRect->right - srcRect->left)/2, (float)(srcRect->bottom - srcRect->top)/2, 0),
¤tPosition,
color);
_lpDSpriteHandle->SetTransform(&oldMatrix);
}
示例2: draw
int OpticSprite::draw(LPD3DXSPRITE sprite, double time, D3DXCOLOR colour, double offsetX, double offsetY) {
if(!this->animate) {
sprite->Draw(texture, NULL, NULL, NULL, colour);
return 1;
}
if(animation.lifetime() > time) {
animation.updateState(aniState, time);
colour = D3DXCOLOR(aniState.red, aniState.green, aniState.blue, colour.a < aniState.alpha? colour.a : aniState.alpha);
float rotation = 6.28318531f * aniState.rotation;
D3DXMATRIX mat, current;
D3DXVECTOR2 scaling(aniState.scale_x, aniState.scale_y);
D3DXVECTOR2 position(floor(((pResolution->width * aniState.position_x) - translateCentre.x) + offsetX),
floor(((pResolution->height * aniState.position_y) - translateCentre.y) + offsetY));
D3DXMatrixTransformation2D(&mat, &transformCentre, 0.0f, &scaling, &transformCentre, rotation, &position);
sprite->GetTransform(¤t);
mat *= current;
sprite->SetTransform(&mat);
HRESULT res;
//Spritesheet rect calculations are slightly iffy thanks to the texture scaling (rounding errors)
if(this->spritesheet) {
int x = (width * currFrame) % surfaceDesc.Width;
//Hacky workaround
int diff = x - surfaceDesc.Width;
if(abs(diff) <= 10) {
x = 0;
}
//End of hacky workaround
int y = height * currRow;
RECT source;
source.top = y;
source.left = x;
source.right = x + width;
source.bottom = y + height;
res = sprite->Draw(texture, &source, NULL, NULL, colour);
sprite->SetTransform(¤t);
if(!advanceFrame(time, x, y)) {
return 0;
}
} else {
res = sprite->Draw(texture, NULL, NULL, NULL, colour);
sprite->SetTransform(¤t);
}
if(res != S_OK) {
throw OpticSpriteException("Rendering sprite failed!");
}
return 1;
}
return 0;
}
示例3: draw
bool OpticMedal::draw(LPD3DXSPRITE sprite) {
double time;
if(tickTimer) {
time = timer.current();
} else {
tickTimer = true;
timer.start();
time = 0;
}
D3DXMATRIX aniMat, currMat;
sprite->GetTransform(&currMat);
D3DXMatrixIdentity(&aniMat);
D3DXCOLOR colour = -1;
if(this->animate) {
if(this->animation.lifetime() > time) {
animation.updateState(aniState, time);
colour = D3DXCOLOR(aniState.red, aniState.green, aniState.blue, aniState.alpha);
float rotation = 6.28318531f * aniState.rotation;
D3DXVECTOR2 scaling(aniState.scale_x, aniState.scale_y);
D3DXVECTOR2 position(floor(((pResolution->width * aniState.position_x) - translateCentre.x)),
floor(((pResolution->height * aniState.position_y) - translateCentre.y)));
D3DXMatrixTransformation2D(&aniMat, &transformCentre, 0.0f, &scaling, &transformCentre, rotation, &position);
} else {
return false;
}
}
aniMat *= currMat;
double offset_x = spawnOffsetX;
double offset_y = spawnOffsetY;
for(auto i = sliders.begin(); i != sliders.end(); ++i) {
OpticAnimation& animation = std::get<0>(*i);
AnimationState& state = std::get<1>(*i);
double time = std::get<2>(*i).current();
animation.updateState(state, time);
offset_x += this->_dimensions.first * state.position_x;
offset_y += this->_dimensions.second * state.position_y;
}
if(_endTime > 0 && time > _endTime) {
if(!_ending) {
endSlideAnimation = defaultEndSlideAnimation(offset_x, offset_y);
_ending = true;
endTimer.start();
}
endSlideAnimation.updateState(endState, endTimer.current());
offset_x = endState.position_x;
offset_y = endState.position_y;
}
sprite->SetTransform(&aniMat);
int keepDrawing = 0;
/* Faster to erase all of the sprites at once rather than one
by one when they've finished drawing */
for(auto i = sprites.begin(); i != sprites.end(); ++i) {
keepDrawing |= i->draw(sprite, time, colour, offset_x, offset_y);
}
sprite->SetTransform(&currMat);
return keepDrawing == 1;
}
示例4: DrawText
// called after clear_text_texture
void zz_font_d3d::draw_text_prim (const zz_font_text& text_item)
{
if (!text_item.msg.get()) return;
size_t length;
length = text_item.msg.size();
if (length <= 0) return; // draw nothing
assert(_d3d_font);
if (!_d3d_font)
return;
zz_renderer_d3d * r = static_cast<zz_renderer_d3d*>(znzin->renderer);
LPD3DXSPRITE sprite = r->get_sprite();
assert(sprite);
if (!text_item.use_sprite) { // begin sprite
zz_assert(!r->sprite_began());
r->begin_sprite(ZZ_SPRITE_ALPHABLEND, "draw_text_prim"); //조성현 2006 04 25 Text출력..
// we assumes that identity matrix transform is the default
D3DXMATRIX mat, mat2;
D3DXMatrixIdentity(&mat2);
sprite->GetTransform(&mat);
mat2._41 = mat._41;
mat2._42 = mat._42;
mat2._43 = mat._43;
sprite->SetTransform(&mat2);
}
else {
zz_assert(r->sprite_began());
}
HRESULT hr;
if (text_item.to_texture) { // render to texture stage
r->enable_zbuffer(false);
r->enable_zwrite(false);
zz_rect new_rect;
int width, height;
width = text_item.rect.right - text_item.rect.left;
height = text_item.rect.bottom - text_item.rect.top;
SetRect(&new_rect, text_item.tex_rect.left, text_item.tex_rect.top,
text_item.tex_rect.left + width, text_item.tex_rect.top + height);
assert((text_item.tex_rect.top != 0) || (text_item.tex_rect.bottom != 0));
//ZZ_LOG("font: draw_text_prim(%s), [%d, %d]\n", text_item.msg.get(), text_item.tex_rect.top, text_item.tex_rect.top + height);
//ZZ_LOG("font: draw_text_prim(%s), [%d, %d, %d, %d]\n",
// text_item.msg.get(),
// new_rect.left, new_rect.top, new_rect.right, new_rect.bottom);
DWORD frontcolor = 0xFFFFFFFF;
if (FAILED(hr = _draw_text(
sprite,
text_item.msg.get(), -1,
&new_rect,
text_item.format,
frontcolor )))
{
ZZ_LOG("font_d3d: DrawText() failed\n", zz_renderer_d3d::get_hresult_string(hr));
}
// restore states
r->enable_zbuffer(true);
r->enable_zwrite(true);
}
else {
RECT rect = text_item.rect;
if (FAILED(hr = _draw_text(
sprite,
text_item.msg.get(), -1,
&rect,
text_item.format,
text_item.color )))
{
ZZ_LOG("font_d3d: DrawText() failed\n", zz_renderer_d3d::get_hresult_string(hr));
}
}
if (!text_item.use_sprite) { // end sprite
r->end_sprite();
}
}