找不到使用 C# 在 openGL 中将纹理应用于 3d 对象的方法

Posted

技术标签:

【中文标题】找不到使用 C# 在 openGL 中将纹理应用于 3d 对象的方法【英文标题】:Can't find a way to apply textures on 3d objects in openGL using C# 【发布时间】:2012-05-22 21:02:58 【问题描述】:

我有一些项目,其中包括来自 Glut 命名空间的许多 3d 对象,例如

Glut.glutSolidCone(0.75, 30, 4, 20);

无论如何我都找不到在此类对象上应用纹理,只有 2d 纹理适用于 2d 对象。

我尝试了这段代码,虽然我认为它是错误的,但它不起作用,

Gl.glPushMatrix();
        Gl.glEnable(Gl.GL_TEXTURE_2D);
        Try.Terrain.LoadGLTextures("Textures/Sitework.Paving - Surfacing.Riverstone.jpg");
        Gl.glTexCoord2d(0, 0);
        Gl.glTexCoord2d(0, 1);
        Gl.glTexCoord2d(1, 1);
        Gl.glTexCoord2d(1, 1);
        Gl.glRotated(90, 1, 0, 0);
        Glut.glutSolidCone(5, 10, 30, 30);
        Gl.glDisable(Gl.GL_TEXTURE_2D);
        Gl.glPopMatrix();

结果是这个 3d 对象出现时应用了纹理的基本颜色。

【问题讨论】:

【参考方案1】:

glutSolidCone() 不包含纹理坐标。

你必须generate them yourself。

【讨论】:

这是否意味着不使用纹理坐标就无法应用任何纹理? 如果您不想复制glutSolidCone(),可以使用glTexGen() 和朋友。或者一个顶点着色器。 @LunaAlRawas:从长远来看,提供纹理坐标是唯一可行的做法。没有厨房水槽算法可以自动为任意几何图形生成纹理坐标。 (虽然有一些非常好的算法,但每个都有其局限性)。【参考方案2】:

老函数gluCylinder()支持纹理。

gluCylinder() 有两个半径参数:base 和 top,所以简单地设置 top=0 会生成一个圆锥而不是圆柱。

GLUquadricObj* quadobj = gluNewQuadric();
gluQuadricTexture(quadobj, GL_TRUE);
glBindTexture(GL_TEXTURE_2D, *your_texture );
gluCylinder(quadobj, 2.0, 0, 3.0, 10, 10);

我不确定 C# 中是否有 gluCylinder()。

【讨论】:

以上是关于找不到使用 C# 在 openGL 中将纹理应用于 3d 对象的方法的主要内容,如果未能解决你的问题,请参考以下文章

Three.js – 将纹理应用于 Collada 网格会产生意想不到的结果

将纹理应用到线框

我无法将图像纹理应用于对象

如何将多个纹理应用于立方体的 VBO?

如何将纹理应用到四边形以纹理立方体?

text 将纹理应用于modelItem