下午好,
我想使用 gluCylinder() 创建一个圆柱体(使用 gluDisk 创建圆柱体的底部和顶部),但我无法想象以后如何将纹理应用于此类对象。我知道逐点简单,还是这里原理一样,就好
for( ... ){
glTexCoord2f(x, y); glVertex3f(x1, y1, z1);
...//другие координаты
}
下午好,
我想使用 gluCylinder() 创建一个圆柱体(使用 gluDisk 创建圆柱体的底部和顶部),但我无法想象以后如何将纹理应用于此类对象。我知道逐点简单,还是这里原理一样,就好
for( ... ){
glTexCoord2f(x, y); glVertex3f(x1, y1, z1);
...//другие координаты
}
坦率地说,我不建议您使用 GLUT 库。无论多好,“手动”绘制体积图都有许多优点:
大量的形状选择。比如我用的GLUT'e,连平行六面体和椭球体都没有,更别说金字塔等更多样化的形状了!
优化的可能性。我认为现在对你(对我也是)来说,在这个库中绘制形状的方法是黑暗的。手绘时,您可以应用您喜欢的任何算法,从而实现更高的程序速度。
可变的旋转中心。当与旋转相关的矩阵操作 ( glRotate() ) 应用于使用 GLUT 绘制的形状时,该形状仅围绕其中心旋转。如果有必要旋转,比如说,一个立方体围绕它的一个角?
我对几何学的了解很差,但大约两个月前我仍然能够创建一个代码来绘制你需要的圆柱体。确实,纹理应用有些不正确,底部发生了诸如z-fighting之类的令人不快的事情(一个多边形具有与另一个完全相同的顶点,因此每次更新场景时,它们都会闪烁). 但是,我希望这会激发您编写类似的功能。
变量x、y和z表示形状在空间中的位置(如您所见,我只是添加这些值,从而移动圆柱体的每个点)。
宽度、高度和深度——当然是图形的大小;我通过将每个点乘以这些变量来应用它。
我用最后两个 for 循环绘制圆柱体的底部和顶部,一侧和另一侧交替坐标,编织一个假想的网,最终形成一个扁平的圆圈(请原谅我不恰当的文学比较)。
祝你好运!