C++ opengl-如何在3d不规则对象上放置纹理
我必须在盖特林机枪被射击的地方制作动画(不必太复杂,因为这只是一种练习)。我画了我的枪的基本版本,看起来像这样: 不用担心颜色——我这样做是为了能够看到枪的特定部件的EGDE在哪里。现在,我想通过使用一些纹理(莫罗或类似金属色的东西)或其他颜色使它看起来更好。我知道如何加载纹理以及如何将其用于2d对象,但我不知道是否有可能将此纹理用于我的整个图形,还是必须单独使用纹理用于每个部分?这是我的代码,对应于从bmp文件加载纹理并使其能够使用:C++ opengl-如何在3d不规则对象上放置纹理,c++,opengl,3d,glut,C++,Opengl,3d,Glut,我必须在盖特林机枪被射击的地方制作动画(不必太复杂,因为这只是一种练习)。我画了我的枪的基本版本,看起来像这样: 不用担心颜色——我这样做是为了能够看到枪的特定部件的EGDE在哪里。现在,我想通过使用一些纹理(莫罗或类似金属色的东西)或其他颜色使它看起来更好。我知道如何加载纹理以及如何将其用于2d对象,但我不知道是否有可能将此纹理用于我的整个图形,还是必须单独使用纹理用于每个部分?这是我的代码,对应于从bmp文件加载纹理并使其能够使用: void initTexture(string file
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()是加载位图文件的函数。我试着在互联网和stackoverflow上搜索一些东西,但是所有的Exmaple都是关于立方体或球体的,这对我没有帮助。如何在此图形上放置纹理?纹理贴图需要(手动)为每个顶点指定纹理坐标。有一些方法可以自动生成纹理坐标,或者在没有纹理坐标的情况下,通过给每个人脸一个单独的像素(迪士尼动画开创了他们的计算机动画电影的后一种方法) 由于您没有指定用于建模的程序,我将向您介绍一些有关Blender纹理UV贴图的教程 请不要告诉我你给你的枪“编码”,因为这是错误的,错误的,错误的
获得纹理坐标后,将其作为另一个顶点属性传递给OpenGL。我知道这是错误的,但这是我的做法。我必须只使用OpenGL绘制这一切,而不加载任何模型。我知道这很愚蠢,但我能说什么-我只是不得不这么做…:(@Blood:家庭作业?那就告诉他们教你现实世界中的期望——没有人硬编码模型。还告诉他们他们不能指望本科生解决问题,这些问题仍然是活跃的学术研究。你当然可以使用一些技巧,比如给每个桶赋予自己的纹理和使用圆柱形纹理c坐标。你错了。我已经发布了这个问题的答案。请查看