圆柱体()和纹理坐标偏移/乘数
gluCylinder() and texture coordinates offset / multiplier?
如何设置纹理坐标偏移量和乘数为gluCylinder()和gluDisk()等功能?
所以如果纹理通常从0点开始,我想设置它从0.6或3.2点开始,通过乘数,我的意思是纹理会变得更大或更小。
解决方案不能是glScalef(),因为1)我使用法线,2)我想调整纹理的起始位置,以及
尝试使用纹理矩阵堆栈:
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.6f, 3.2f, 0.0f);
glScalef(2.0f, 2.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
drawObject();
解决方案与GLU函数无关,并且确实是glScalef
(和glTranslatef
用于偏移调整),但将其应用于纹理矩阵(假设您不使用着色器)。用GL_TEXTURE
调用glMatrixMode
选择的纹理矩阵,在插值和访问纹理之前转换顶点的纹理坐标(不管这些纹理坐标是如何计算的,在这种情况下是由GLU计算的,它只是在CPU上计算它们并调用glTexCoord2f
)。
所以要让纹理从(0.1,0.2)开始(当然是在纹理空间中),并将其设置为2倍大,只需调用:
glMatrixMode(GL_TEXTURE);
glTranslatef(0.1f, 0.2f, 0.0f);
glScalef(0.5f, 0.5f, 1.0f);
在调用gluCylinder
之前。但是一定要在之后恢复这些更改(可能在glPush/PopMatrix
之间包装)。
但是如果你想根据世界空间坐标改变纹理坐标,这可能需要更多的计算。当然,你也可以使用顶点着色器来完全控制纹理坐标的生成。
相关文章:
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 比较两个节点坐标的最佳方法是什么?
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在C++中获取坐标?
- 如何将 x.y 坐标的值存储在不同的数组中
- 如何将鼠标坐标转换为"mm"
- 重心坐标并不总是有效(3d)
- 尝试渲染像素坐标时,简单线条渲染失败
- 使用 GTK3 C++获取指针坐标
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- 我想制作设置鼠标回调函数,以便在仍然按下鼠标左键时连续传递坐标
- 将鼠标悬停在图片框上时,如何显示带有 x-y 坐标的十字准线光标?
- 跳转到通过输入坐标定义的控制台屏幕位置
- QImage::p ixel 和 QImage::setPixel 坐标超出范围误差
- 如何从 3d 对象文件中获取 3d 坐标
- 圆柱体()和纹理坐标偏移/乘数