2013-04-16 46 views
1

我必须创建动画,在那里加特林枪将会被射击(它不一定是复杂的,因为它只是一种练习)。我拔出枪的基本版本,看起来像这样:opengl - 如何将纹理放在3D不规则物体上

Gatling gun

不要打扰颜色 - 我让他们一样,要能看到有枪的特定部分的egdes。现在我想通过使用一些纹理 - 摩洛或类似金属色 - example 1example2使其看起来更好。我知道如何加载纹理以及如何将其用于2d对象,但我不知道是否有可能为我的整个绘图使用此纹理,或者是否必须分别为每个部分使用纹理?这是我的代码对应于从BMP文件加载纹理,并使其能够使用:

void initTexture(string fileName) 
{ 
    loadBmp(fileName.c_str()); 
    textureId = 13; 
    glBindTexture(GL_TEXTURE_2D, textureId); //Tell OpenGL which texture to edit 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
    //Map the image to the texture 
    glTexImage2D(GL_TEXTURE_2D,    //Always GL_TEXTURE_2D 
       0,       //0 for now 
       GL_RGB,      //Format OpenGL uses for image 
       tex.info.biWidth, tex.info.biHeight, //Width and height 
       0,       //The border of the image 
       GL_RGB, //GL_RGB, because pixels are stored in RGB format 
       GL_UNSIGNED_BYTE, //GL_UNSIGNED_BYTE, because pixels are stored 
            //as unsigned numbers 
       tex.px);    //The actual pixel data 

} 

loadBmp()是函数加载位图文件。我试图在互联网和计算器中搜索某些东西,但所有关于立方体或球体的例子都不帮助我。我怎样才能把纹理放在这张图上?

回答

1

纹理映射需要(手动)将纹理坐标分配给每个顶点。在自动纹理坐标生成方面,或者在没有纹理坐标的情况下,通过为每个面部分配一个像素(迪士尼动画公司为其计算机动画电影的后期方法开创了先河),可以实现自动纹理坐标生成。

既然你没有指定你用来模拟我会向您推荐一些教程,纹理UV映射搅拌机

哪些程序

http://wiki.blender.org/index.php/Doc:2.6/Manual/Textures/Mapping/UV/Unwrapping

请不要告诉我你做“码”你的枪,因为这是错的,错的,错的!

一旦你得到了纹理坐标,你将它们作为另一个顶点属性传递给OpenGL。

+0

我知道这是错误的,但这是我的做法。我必须使用OpenGL绘制所有这些,而无需加载任何模型。我知道这是愚蠢的,但我能说什么 - 我只需要做这个... :( – Blood

+0

@血液:家庭作业的任务?那么告诉他们教你什么在现实世界的预期 - 没有人硬编码模型。他们不能指望大学生解决问题,这些问题仍然是积极的学术研究,你当然可以使用一些技巧,比如给每个桶提供自己的纹理,并使用圆柱形纹理坐标 – datenwolf

+0

你是不对的我已经发布回答这个问题。检查出来 – Blood