- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 gluQuadric 和 gluCylinder 绘制一个圆柱体。这个圆柱体应该有纹理。
我的绘制代码如下:
pTexture->Enable();
pTexture->Bind();
glPushMatrix();
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
gluQuadricOrientation(quadric, GLU_OUTSIDE);
gluQuadricNormals(quadric, true);
gluQuadricTexture(quadric, true);
gluCylinder(quadric, getRadius(), getRadius(), getHeight(), 16, 1);
glPopMatrix();
pTexture->Unbind();
pTexture->Disable();
我现在的问题是,纹理旋转了 90 度。如何旋转二次曲面的 uv 贴图?
纹理在其他地方使用,因此无法编辑。
最佳答案
除了使用比较广泛的GL_MODELVIEW
和GL_PROJECTION
矩阵栈外,还有一个GL_TEXTURE
矩阵栈可以用来应用转换为纹理坐标。例如,这会将纹理坐标旋转 90 度:
glMatrixMode(GL_TEXTURE);
glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
由于纹理坐标通常在 [0.0, 1.0] x [0.0, 1.0] 单位正方形中,仅使用它可能会产生不良副作用。旋转是围绕原点逆时针旋转的,因此我们的单位正方形将旋转到范围为 [-1.0, 0.0] x [0.0, 1.0] 的正方形。所以除了旋转之外,正方形还移动了 (0.0, -1.0)。如果环绕模式是 GL_REPEAT
,这是无害的,但在使用像 GL_CLAMP_TO_EDGE
这样的环绕模式时会很糟糕。我们可以通过在旋转后沿相反方向应用平移来纠正这一点(请记住,最后指定的变换是最先应用的变换):
glMatrixMode(GL_TEXTURE);
glTranslatef(1.0f, 0.0f, 0.0f);
glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
此外,根据图像的方向,您可能需要旋转 -90 度。在这种情况下,范围为 [0.0, 1.0] x [0.0, 1.0] 的单位正方形将旋转为范围为 [0.0, 1.0] x [-1.0, 0.0] 的正方形。对这种情况应用相同类型的纠正翻译,我们最终得到:
glMatrixMode(GL_TEXTURE);
glTranslatef(0.0f, 1.0f, 0.0f);
glRotatef(-90.0f, 0.0f, 0.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
关于c++ - 具有旋转纹理的 gluCylinder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24556114/
我正在编写一个函数,使用 OpenGL 管道命令和 gluCylinder() 函数绘制一个圆柱体,该圆柱体的每个底面的中心都位于特定点上。 作为第一次尝试,我只是尝试绘制圆柱体,结果是一个圆柱体,底
我想使用 gluQuadric 和 gluCylinder 绘制一个圆柱体。这个圆柱体应该有纹理。 我的绘制代码如下: pTexture->Enable(); pTexture->Bind(); gl
我想用 OpenGL build 一个板球场。我制作了几个多边形来表示球场、球场和保龄球线。但问题是,当我尝试使用 gluCylinder 制作树桩时,我制作了深度 glEnable(GL_DEPTH
如何为 gluCylinder() 和 gluDisk() 等函数设置纹理坐标偏移和乘数? 因此,如果正常情况下纹理会从点 0 开始,我想将其设置为从点 0.6 或 3.2 等开始。乘数意味着纹理会变
我遇到了一个问题,我用以下代码制作了一个圆柱体,我一直在尝试移动它(向后移动,以便它的中心位于灰色光束所在的位置)。 但是,输出根本没有移动圆柱体,我没能发现问题所在? GLfloat plane[]
我将 OpenGL 与 C++(但没有着色器和 GLSL)结合使用,并使用 glu 库函数绘制球体(台球)和圆柱体(球杆)。我正在使用 glBindTexture() 绑定(bind)纹理并使用 SO
我是一名优秀的程序员,十分优秀!