我想画一个球体周围的轨迹。每个点都由纬度和经度坐标组成。所以,我打算通过第一次旋转(长),然后是第二次(纬度),然后是平移(z)来放置每个点。
但是如果我在glBegin()
和之间进行任何转换,我就无法画线glEnd()
......这是禁止的..
你知道怎么做吗?我是否必须自己从 lat/lon/alt 计算每个点 (x, y, z) 的坐标而不是进行转换?(我读到转换比自己完成工作要快......)
只需在轨迹上采样点并将其绘制为 GL_LINE_STRIP。
以下是一些重要信息: 不要使用 OpenGL 固定函数矩阵堆栈(glRotate、glTranslate、glScale 等)。使用真正的矩阵数学库时,使用起来很麻烦,事情变得容易得多。固定功能也已从现代 OpenGL 中删除。这让我想到了第二条建议:不要使用立即模式(glBegin ... glEnd),它是性能杀手,并且也已从现代 OpenGL 中删除。
除非您想上传一个为您进行转换的顶点着色器,否则您必须这样做。此外,自 OpenGL 3.0 以来,glRotate 等函数实际上已被弃用。
而“慢”是相对的。我相当确定使用 glRotate() 等调用进行旋转比仅计算每个顶点在 3d 空间中的位置要慢。
在相关的说明中,如果它是一条轨迹,您几乎肯定想要跟随地球上的一个大圆圈,而不是在 3d 空间中将它们绘制为直线。