找不到使用 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 对象的方法的主要内容,如果未能解决你的问题,请参考以下文章