You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenGL按45度增量绕圆绘制图像问题求助

问题分析与解决

你的现有代码只是绘制了一个8顶点的折线框(用GL_LINE_STRIP还不会自动闭合),完全没涉及从TXT读取图像、旋转图像以及把图像定位到圆周上的操作,自然达不到预期需求。下面是具体的实现思路和代码示例:

核心实现步骤

  • 先把TXT文件里的图像数据加载成OpenGL纹理(假设TXT存储的是像素灰度/RGB值,需要根据格式解析后生成纹理ID)
  • 对每个45度增量的位置,通过矩阵变换完成平移到圆周点→旋转图像→绘制图像的流程,用glPushMatrix/glPopMatrix隔离每个位置的变换,避免互相干扰

修正后的代码示例

// 假设已完成纹理加载:textureID是生成的纹理ID,imgWidth、imgHeight是图像尺寸
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureID);

for(int ii=0; ii<8; ii++){
    float theta = PI * ii / 4.0f; // 45度增量转弧度
    float x = cx + r * cos(theta);
    float y = cy + r * sin(theta);

    glPushMatrix();
        // 平移到圆周上的目标点
        glTranslatef(x, y, 0.0f);
        // 旋转对应角度,让图像朝向圆心(可根据需求调整方向)
        glRotatef(theta * 180.0f / PI, 0.0f, 0.0f, 1.0f);
        // 绘制带纹理的图像,让图像中心落在当前圆周点上
        glBegin(GL_QUADS);
            glTexCoord2f(0, 0); glVertex2f(-imgWidth/2, -imgHeight/2);
            glTexCoord2f(1, 0); glVertex2f(imgWidth/2, -imgHeight/2);
            glTexCoord2f(1, 1); glVertex2f(imgWidth/2, imgHeight/2);
            glTexCoord2f(0, 1); glVertex2f(-imgWidth/2, imgHeight/2);
        glEnd();
    glPopMatrix();
}

glDisable(GL_TEXTURE_2D);

关键细节补充

  • 纹理加载:需要根据TXT的实际格式(比如每行像素值、通道数)读取数据,用glTexImage2D生成纹理,这部分需你根据TXT内容自行补充
  • 旋转方向:如果不需要图像朝向圆心,可将旋转参数改为固定值(比如0),或加180度反转方向
  • 图像居中:绘制四边形时用负的半宽半高,确保图像中心落在圆周点上,避免偏移

内容的提问来源于stack exchange,提问作者Happy Classics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:15:40