C++ c++;OpenGL旋转和计算

C++ c++;OpenGL旋转和计算,c++,opengl,rotation,C++,Opengl,Rotation,在OpenGL项目中,我有一个旋转模型的函数: glRotatef(M_PI/4,0,0,1)//旋转PI/4弧度,即45度 现在,当我绘制关于旋转的点(0,1)。我将在点(1/sqrt(2),1/sqrt(2))这只是单位圆几何。但是,这些点将使用可变坐标x1、x2、y1、y2绘制。此外,我想在我的近似值足够接近后停止绘制 问题是我的停止标准仍然是全局坐标,而不是旋转。例如,考虑Y2=Y1,其中等式尊重变换。因此,在全局坐标中,这将是y2=y1*sin(pi/4),因此y2将位于y1的下方和右

在OpenGL项目中,我有一个旋转模型的函数:

glRotatef(M_PI/4,0,0,1)//旋转PI/4弧度,即45度

现在,当我绘制关于旋转的点
(0,1)
。我将在点(1/sqrt(2),1/sqrt(2))这只是单位圆几何。但是,这些点将使用可变坐标
x1、x2、y1、y2
绘制。此外,我想在我的近似值足够接近后停止绘制

问题是我的停止标准仍然是全局坐标,而不是旋转。例如,考虑Y2=Y1,其中等式尊重变换。因此,在全局坐标中,这将是y2=y1*sin(pi/4),因此y2将位于y1的下方和右侧。但是,y2的值刚刚设置为y1,这在我的停止标准y2-y1中产生了一个问题,该标准将为零


如何从OpenGL获取y2的旋转值?

您的问题有点让人困惑,因为我不明白您所说的停止标准是什么意思。但是,如果您想要获得点的变换值,那么您可以简单地通过适当的变换矩阵将它们传递到您想要的空间中。例如,如果希望在眼睛空间中显示值,则通过modelview矩阵传递顶点坐标。有关如何工作的详细信息。

如果使用OpenGL中的
glRotatef
,请不要忘记旋转角度以度为单位,而不是以弧度为单位

对于转换和混淆部分,user1118321是绝对正确的

出于您的目的,您只需应用
GL\u MODELVIEW\u MATRIX

若需要模型空间中的坐标,则必须将逆模型视图矩阵乘以全局坐标向量

若需要全局空间中的坐标,则必须将modelview矩阵乘以模型坐标向量

顶点发送的坐标位于模型空间中 您可以使用gl函数
glGetFlotav/glGetDoublev

double m[16];
glGetDoublev(GLU模型视图矩阵,m);
逆矩阵和矩阵x向量乘法在OpenGL中不存在,因此您必须自己编写或使用一些库。不要忘记,OpenGL中的矩阵是面向列的,而不是面向行的,并且坐标向量是同质的,因此
x,y,z,w
,其中
w=1
。这是我用于OpenGL子计算的代码,所有向量都是
double[4]
,矩阵都是
double[16]

void matrix\u mul\u vector(双*c,双*a,双*b)
{
双q[3];
q[0]=(a[0]*b[0])+(a[4]*b[1])+(a[8]*b[2])+(a[12]);
q[1]=(a[1]*b[0])+(a[5]*b[1])+(a[9]*b[2])+(a[13]);
q[2]=(a[2]*b[0])+(a[6]*b[1])+(a[10]*b[2])+(a[14]);

对于(int i=0;我必须澄清,
glRotatef()
以度为单位,而不是弧度。