CreateOffscreenPlainSurface
D3DXLoadSurfaceFromFile
StretchRect
Present
等一些函数,
终于能把位图显示在屏幕上了,
今天想把它旋转一下,不知道该怎么办
12 个解决方案
#1
如果喜欢使用现成函数的话,尝试下面的一些对象、函数、方法:
IDirect3DTexture9
ID3DXSprite
D3DXMATRIX
D3DXCreateTextureFromFile
D3DXCreateSprite
D3DXMatrixRotationZ
ID3DXSprite::SetTransform
ID3DXSprite::Begin
ID3DXSprite::Draw
ID3DXSprite::End
IDirect3DTexture9
ID3DXSprite
D3DXMATRIX
D3DXCreateTextureFromFile
D3DXCreateSprite
D3DXMatrixRotationZ
ID3DXSprite::SetTransform
ID3DXSprite::Begin
ID3DXSprite::Draw
ID3DXSprite::End
#2
不转图片,转几何体或者视点就可以了
#3
嗯是的,事实上还是SetTransform
#4
单纯的想旋转位图可以看图像处理方面的书,我自己曾经就实现过,可惜效果没有GDI+和D3D的好,后来自己也懒得改进了。呵呵。
#5
学习,帮顶
#6
其实用纹理变换也许更好。
所谓纹理变换,与world, view, proj类似,不过:
A. 是在纹理坐标系下变换(原点在左上角,X右向,Y下向)。
B. 对于X/Y轴只能平移变换
C. 对于Z轴只能旋转(效果同3D变换)
D. 最后要转换成3*3矩阵
Matrix4x4To3x3(&matTexture, &matTexture);//必须将4*4=>3*3
g_pD3DDevice->SetTransform(D3DTS_TEXTURE0, &matTexture);
g_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
所谓纹理变换,与world, view, proj类似,不过:
A. 是在纹理坐标系下变换(原点在左上角,X右向,Y下向)。
B. 对于X/Y轴只能平移变换
C. 对于Z轴只能旋转(效果同3D变换)
D. 最后要转换成3*3矩阵
Matrix4x4To3x3(&matTexture, &matTexture);//必须将4*4=>3*3
g_pD3DDevice->SetTransform(D3DTS_TEXTURE0, &matTexture);
g_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
#7
RE: cywater2000(如果)
楼上所说的Matrix4x4To3x3是哪里的方法阿?MSDN怎么找不到呢?
楼上所说的Matrix4x4To3x3是哪里的方法阿?MSDN怎么找不到呢?
#8
方法很多了,不过最好不要自已用sin,cos算法做,如果功底不强的话.效果不好.
//=============
用DX9里的纹理矩阵即可.
也可以让视角转动.
//=============
用DX9里的纹理矩阵即可.
也可以让视角转动.
#9
使用纹理变换矩阵是一种选择,但是并不推荐,原因是最终得到的效果未必是楼主所需要的
纹理变换矩阵本质是改变了矩形顶点的纹理坐标,表面上看是可以达到旋转的效果
但是问题是:这种旋转不能保证旋转后出现的画面还是完整的整幅画面
如果纹理的wrap模式打开的话,图片一些部分发生重复,一些部分消失不见
纹理变换矩阵本质是改变了矩形顶点的纹理坐标,表面上看是可以达到旋转的效果
但是问题是:这种旋转不能保证旋转后出现的画面还是完整的整幅画面
如果纹理的wrap模式打开的话,图片一些部分发生重复,一些部分消失不见
#10
"顾问团"说的对.呵呵,我忘了.哈哈.那就在渲染图片之前.
保存观察矩阵,然后更改视点.设置观察矩阵.然后渲图片,再恢复观察矩阵.
同样也适于世界矩阵操作.
保存观察矩阵,然后更改视点.设置观察矩阵.然后渲图片,再恢复观察矩阵.
同样也适于世界矩阵操作.
#11
转几何体或者转纹理坐标
#12
直接用旋转坐标变换(theta 为角度)
xr = x*cos(theta) – y*sin(theta)
yr = x*sin(theta) + y*cos(theta)
xr = x*cos(theta) – y*sin(theta)
yr = x*sin(theta) + y*cos(theta)
#1
如果喜欢使用现成函数的话,尝试下面的一些对象、函数、方法:
IDirect3DTexture9
ID3DXSprite
D3DXMATRIX
D3DXCreateTextureFromFile
D3DXCreateSprite
D3DXMatrixRotationZ
ID3DXSprite::SetTransform
ID3DXSprite::Begin
ID3DXSprite::Draw
ID3DXSprite::End
IDirect3DTexture9
ID3DXSprite
D3DXMATRIX
D3DXCreateTextureFromFile
D3DXCreateSprite
D3DXMatrixRotationZ
ID3DXSprite::SetTransform
ID3DXSprite::Begin
ID3DXSprite::Draw
ID3DXSprite::End
#2
不转图片,转几何体或者视点就可以了
#3
嗯是的,事实上还是SetTransform
#4
单纯的想旋转位图可以看图像处理方面的书,我自己曾经就实现过,可惜效果没有GDI+和D3D的好,后来自己也懒得改进了。呵呵。
#5
学习,帮顶
#6
其实用纹理变换也许更好。
所谓纹理变换,与world, view, proj类似,不过:
A. 是在纹理坐标系下变换(原点在左上角,X右向,Y下向)。
B. 对于X/Y轴只能平移变换
C. 对于Z轴只能旋转(效果同3D变换)
D. 最后要转换成3*3矩阵
Matrix4x4To3x3(&matTexture, &matTexture);//必须将4*4=>3*3
g_pD3DDevice->SetTransform(D3DTS_TEXTURE0, &matTexture);
g_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
所谓纹理变换,与world, view, proj类似,不过:
A. 是在纹理坐标系下变换(原点在左上角,X右向,Y下向)。
B. 对于X/Y轴只能平移变换
C. 对于Z轴只能旋转(效果同3D变换)
D. 最后要转换成3*3矩阵
Matrix4x4To3x3(&matTexture, &matTexture);//必须将4*4=>3*3
g_pD3DDevice->SetTransform(D3DTS_TEXTURE0, &matTexture);
g_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
#7
RE: cywater2000(如果)
楼上所说的Matrix4x4To3x3是哪里的方法阿?MSDN怎么找不到呢?
楼上所说的Matrix4x4To3x3是哪里的方法阿?MSDN怎么找不到呢?
#8
方法很多了,不过最好不要自已用sin,cos算法做,如果功底不强的话.效果不好.
//=============
用DX9里的纹理矩阵即可.
也可以让视角转动.
//=============
用DX9里的纹理矩阵即可.
也可以让视角转动.
#9
使用纹理变换矩阵是一种选择,但是并不推荐,原因是最终得到的效果未必是楼主所需要的
纹理变换矩阵本质是改变了矩形顶点的纹理坐标,表面上看是可以达到旋转的效果
但是问题是:这种旋转不能保证旋转后出现的画面还是完整的整幅画面
如果纹理的wrap模式打开的话,图片一些部分发生重复,一些部分消失不见
纹理变换矩阵本质是改变了矩形顶点的纹理坐标,表面上看是可以达到旋转的效果
但是问题是:这种旋转不能保证旋转后出现的画面还是完整的整幅画面
如果纹理的wrap模式打开的话,图片一些部分发生重复,一些部分消失不见
#10
"顾问团"说的对.呵呵,我忘了.哈哈.那就在渲染图片之前.
保存观察矩阵,然后更改视点.设置观察矩阵.然后渲图片,再恢复观察矩阵.
同样也适于世界矩阵操作.
保存观察矩阵,然后更改视点.设置观察矩阵.然后渲图片,再恢复观察矩阵.
同样也适于世界矩阵操作.
#11
转几何体或者转纹理坐标
#12
直接用旋转坐标变换(theta 为角度)
xr = x*cos(theta) – y*sin(theta)
yr = x*sin(theta) + y*cos(theta)
xr = x*cos(theta) – y*sin(theta)
yr = x*sin(theta) + y*cos(theta)