小编aka*_*300的帖子

我想在 opengl 中将图像包裹在球体周围

我正在开发台球游戏,桌子上有几个球。为了使每个球都独一无二,我尝试使用纹理给它们编号。使用纹理我还可以显示球的旋转。

到目前为止,我已经使用 SOIL 映射了纹理

INIT()函数---

glGenTextures(1,&texture_id);
texture_id = SOIL_load_OGL_texture("globe.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID,  SOIL_FLAG_INVERT_Y);

glBindTexture(GL_TEXTURE_2D, texture_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Run Code Online (Sandbox Code Playgroud)

显示函数()

glPushMatrix();                                       // Push the current matrix stack
    glColor3f(1,1,1);
    glEnable( GL_TEXTURE_2D );
    glBindTexture( GL_TEXTURE_2D, texture_id);

    glEnable(GL_TEXTURE_GEN_S);
    glEnable(GL_TEXTURE_GEN_T);
    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
    glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTranslatef(world.qBall.pos.x,world.qBall.pos.y,world.qBall.pos.z);  //Multiply the current matrix by a translation matrix
    glRotatef(30,1,0,0);
    glutSolidSphere  (world.qBall.radius*5,50,50); 
    glDisable(GL_TEXTURE_GEN_S);
    glDisable(GL_TEXTURE_GEN_T);
    glDisable(GL_TEXTURE_2D);
glPopMatrix();  // Pop the current matrix stack
Run Code Online (Sandbox Code Playgroud)

我从中得到的是整个图像映射到球体的可见部分,而不是包裹球体,以便只有部分图像可见。另外,当我移动相机纹理时,它也会随之旋转。

那么,我如何将纹理包裹在球体周围,以便只出现部分图像!

c++ opengl image opengl-es

3
推荐指数
1
解决办法
5134
查看次数

标签 统计

c++ ×1

image ×1

opengl ×1

opengl-es ×1