默认情况下,我画了一个三维坐标轴,使用下面的两个语句使绘制出来的图形围绕x、y轴旋转,
glRotatef(m_xRotation, 1.0, 0.0, 0.0);
glRotatef(m_yRotation, 0.0, 1.0, 0.0);
但现在我使用了
glTranslatef(-10.0,10.0,0.0);
把绘图坐标沿x、y轴调整了,
现在该怎样做才能使现在的图形绕着现在的x、y轴旋转,而不是按照原来的x、y轴旋转?
请指教!谢谢!
glRotatef(m_xRotation, 1.0, 0.0, 0.0);
glRotatef(m_yRotation, 0.0, 1.0, 0.0);
但现在我使用了
glTranslatef(-10.0,10.0,0.0);
把绘图坐标沿x、y轴调整了,
现在该怎样做才能使现在的图形绕着现在的x、y轴旋转,而不是按照原来的x、y轴旋转?
请指教!谢谢!
解决方案 »
- Edit 控件如何替换 \n 为 \r\n
- MDI菜单和子窗口的问题
- VC重置按钮该怎么做啊 请高手指点
- 如何实现内网的端口映射
- 高分在线等待!!!使用Richedit控件出现乱码!!!
- m_pRecordset.CreateInstance(_uuidof(Recordset));和m_pRecordset.CreateInstance("ADODB.Recordset");这两个用法用什么不用?
- 关于XtremeToolKit2.00的一个问题[在线等待]
- 关于列表控件选中一行?
- 急,急,急,谁有用vc编写的文本编辑器代码(包含插入,格式功能即可)
- 编写ODBC数据库程序时如何在程序中动态建一个表
- ListControl排序后显示正确,但实际并没有排序?
- 读取YUV时,出现问题,请高手帮忙
glLoadMatrixf((GLfloat*)&m_fMarix); //载入变换后的矩阵
glGetFloatv(GL_MODELVIEW_MATRIX,(GLfloat *)&m_fMarix); //保存变换后的矩阵
“建议为为每一个元件建立一个矩阵”
“元件”指什么?
能给出具体操作语句吗?
我的绘图代码如下:void CTrochoidView::OnDraw(CDC* /*pDC*/)
{
CTrochoidDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码
//清除颜色缓冲和深度缓冲
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//用单位矩阵替换当前矩阵
glLoadIdentity();
//旋转角度
glRotatef(m_xRotation, 1.0, 0.0, 0.0);
glRotatef(m_yRotation, 0.0, 1.0, 0.0);
//glRotatef(m_xRotation, - 10.0, 0.0+10.0, 0.0);
//glRotatef(m_yRotation, -10.0, 11.0, 0.0);
glTranslatef(-10.0,10.0,0.0);
this->DrawCoordinateSystem();
GetDataFromXMLFile(_T("trochoidData.xml")); //从XML文件获取数据,参数为XML文件名
GetWorld3DCoordinate();
GetWorldCoordinateRange();
GetLogic3DCoordinate();
GetLogicCoordinateRange();
DrawTrochoidLine();
//强制绘图完成
glFinish();
//交换缓冲区数据
SwapBuffers(wglGetCurrentDC());
}
按照默认情况下我绘制出的三维坐标系原点在屏幕的中心,
我想把这个坐标原点移动到靠近左上方的位置,所以使用了glTranslatef(-10.0,10.0,0.0);
并使图形按照现在绘制的坐标轴旋转,
我不知道有没有别的方法能实现这种效果,
如果有别的方法也行,比如使用移动视口之类的
glPopMatrixf
先把你需要用矩阵存起来,在进行完具体的操作,可以用Pop恢复,函数和存储都是opengl提供。还需要自己创建么?不清楚了,初学。
glTranslatef(-10.0,10.0,0.0);
glRotatef(m_xRotation, 1.0, 0.0, 0.0);
glRotatef(m_yRotation, 0.0, 1.0, 0.0);
//glRotatef(m_xRotation, - 10.0, 0.0+10.0, 0.0);
//glRotatef(m_yRotation, -10.0, 11.0, 0.0);
不清楚你要实现的功能。
需要自己创建,如果你视图中有多个物体,你如何做到在原来变换的基础上再次变换(没有规律)呢(不影响其它的元件)。这就需要为每一个元件保存自己的矩阵,在变换时载入上次变换的矩阵,变换后在保存矩阵。最简单的方法
m_xRotation =?; //在其他的地方设置
m_yRotation =?;
m_xMove =?;//glLoadIdentity(); //注销
//旋转角度
glRotatef(m_xRotation, 1.0, 0.0, 0.0);
glRotatef(m_yRotation, 0.0, 1.0, 0.0);
glTranslatef(m_xMove,10.0,0.0); m_xRotation =0; //在其他的地方恢复
m_yRotation =0;
m_xMove =0;
m_yRotation =0;
m_xMove =0;