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轴旋转?
请指教!谢谢!
10 个解决方案
#1
建议为为每一个元件建立一个矩阵。元件变换后保存矩阵,在下次变换前载入你保存的矩阵。
glLoadMatrixf((GLfloat*)&m_fMarix); //载入变换后的矩阵
glGetFloatv(GL_MODELVIEW_MATRIX,(GLfloat *)&m_fMarix); //保存变换后的矩阵
glLoadMatrixf((GLfloat*)&m_fMarix); //载入变换后的矩阵
glGetFloatv(GL_MODELVIEW_MATRIX,(GLfloat *)&m_fMarix); //保存变换后的矩阵
#2
没弄明白
“建议为为每一个元件建立一个矩阵”
“元件”指什么?
能给出具体操作语句吗?
我的绘图代码如下:
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());
}
“建议为为每一个元件建立一个矩阵”
“元件”指什么?
能给出具体操作语句吗?
我的绘图代码如下:
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());
}
#3
现在的情况是:
按照默认情况下我绘制出的三维坐标系原点在屏幕的中心,
我想把这个坐标原点移动到靠近左上方的位置,所以使用了glTranslatef(-10.0,10.0,0.0);
并使图形按照现在绘制的坐标轴旋转,
我不知道有没有别的方法能实现这种效果,
如果有别的方法也行,比如使用移动视口之类的
按照默认情况下我绘制出的三维坐标系原点在屏幕的中心,
我想把这个坐标原点移动到靠近左上方的位置,所以使用了glTranslatef(-10.0,10.0,0.0);
并使图形按照现在绘制的坐标轴旋转,
我不知道有没有别的方法能实现这种效果,
如果有别的方法也行,比如使用移动视口之类的
#4
glLoadMatrixf
glPopMatrixf
先把你需要用矩阵存起来,在进行完具体的操作,可以用Pop恢复,函数和存储都是opengl提供。
还需要自己创建么?不清楚了,初学。
glPopMatrixf
先把你需要用矩阵存起来,在进行完具体的操作,可以用Pop恢复,函数和存储都是opengl提供。
还需要自己创建么?不清楚了,初学。
#5
没懂你意思了。你要是想按照变换后的坐标轴旋转,在环绕之前改变就好了。
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);
不清楚你要实现的功能。
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);
不清楚你要实现的功能。
#6
先把矩阵存起来,然后执行操作,然后再恢复
这个过程跟移动坐标原点,围绕坐标轴旋转是什么样的关系?
这个过程跟移动坐标原点,围绕坐标轴旋转是什么样的关系?
#7
呵呵,谢谢LUCIzm
实现了
实现了
#8
元件就是指一个独立的物体。比如说一个圆柱。
需要自己创建,如果你视图中有多个物体,你如何做到在原来变换的基础上再次变换(没有规律)呢(不影响其它的元件)。这就需要为每一个元件保存自己的矩阵,在变换时载入上次变换的矩阵,变换后在保存矩阵。
最简单的方法
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_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;
#9
m_xRotation =0; //使用后恢复
m_yRotation =0;
m_xMove =0;
m_yRotation =0;
m_xMove =0;
#10
谢谢mycool2001
真不好意思,我结贴太快了
已经结贴了
没法给您分了
虽然分数很少,但还是有些歉疚
Sorry!
真不好意思,我结贴太快了
已经结贴了
没法给您分了
虽然分数很少,但还是有些歉疚
Sorry!
#1
建议为为每一个元件建立一个矩阵。元件变换后保存矩阵,在下次变换前载入你保存的矩阵。
glLoadMatrixf((GLfloat*)&m_fMarix); //载入变换后的矩阵
glGetFloatv(GL_MODELVIEW_MATRIX,(GLfloat *)&m_fMarix); //保存变换后的矩阵
glLoadMatrixf((GLfloat*)&m_fMarix); //载入变换后的矩阵
glGetFloatv(GL_MODELVIEW_MATRIX,(GLfloat *)&m_fMarix); //保存变换后的矩阵
#2
没弄明白
“建议为为每一个元件建立一个矩阵”
“元件”指什么?
能给出具体操作语句吗?
我的绘图代码如下:
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());
}
“建议为为每一个元件建立一个矩阵”
“元件”指什么?
能给出具体操作语句吗?
我的绘图代码如下:
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());
}
#3
现在的情况是:
按照默认情况下我绘制出的三维坐标系原点在屏幕的中心,
我想把这个坐标原点移动到靠近左上方的位置,所以使用了glTranslatef(-10.0,10.0,0.0);
并使图形按照现在绘制的坐标轴旋转,
我不知道有没有别的方法能实现这种效果,
如果有别的方法也行,比如使用移动视口之类的
按照默认情况下我绘制出的三维坐标系原点在屏幕的中心,
我想把这个坐标原点移动到靠近左上方的位置,所以使用了glTranslatef(-10.0,10.0,0.0);
并使图形按照现在绘制的坐标轴旋转,
我不知道有没有别的方法能实现这种效果,
如果有别的方法也行,比如使用移动视口之类的
#4
glLoadMatrixf
glPopMatrixf
先把你需要用矩阵存起来,在进行完具体的操作,可以用Pop恢复,函数和存储都是opengl提供。
还需要自己创建么?不清楚了,初学。
glPopMatrixf
先把你需要用矩阵存起来,在进行完具体的操作,可以用Pop恢复,函数和存储都是opengl提供。
还需要自己创建么?不清楚了,初学。
#5
没懂你意思了。你要是想按照变换后的坐标轴旋转,在环绕之前改变就好了。
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);
不清楚你要实现的功能。
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);
不清楚你要实现的功能。
#6
先把矩阵存起来,然后执行操作,然后再恢复
这个过程跟移动坐标原点,围绕坐标轴旋转是什么样的关系?
这个过程跟移动坐标原点,围绕坐标轴旋转是什么样的关系?
#7
呵呵,谢谢LUCIzm
实现了
实现了
#8
元件就是指一个独立的物体。比如说一个圆柱。
需要自己创建,如果你视图中有多个物体,你如何做到在原来变换的基础上再次变换(没有规律)呢(不影响其它的元件)。这就需要为每一个元件保存自己的矩阵,在变换时载入上次变换的矩阵,变换后在保存矩阵。
最简单的方法
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_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;
#9
m_xRotation =0; //使用后恢复
m_yRotation =0;
m_xMove =0;
m_yRotation =0;
m_xMove =0;
#10
谢谢mycool2001
真不好意思,我结贴太快了
已经结贴了
没法给您分了
虽然分数很少,但还是有些歉疚
Sorry!
真不好意思,我结贴太快了
已经结贴了
没法给您分了
虽然分数很少,但还是有些歉疚
Sorry!