Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL不能正确地绘制模型_C++_Opengl_Collada_Assimp - Fatal编程技术网

C++ OpenGL不能正确地绘制模型

C++ OpenGL不能正确地绘制模型,c++,opengl,collada,assimp,C++,Opengl,Collada,Assimp,我将搅拌机盒导出为Collada文件,我正在使用ASIMP加载它,但它无法正确绘制。 下面是它的外观: 我尝试过使用.fbx和.obj,但没有成功。 这是我的代码中的错误,还是顶点数据不正确? 我检查了法线,它们都指向正确的方向, 是什么让我相信脸的方向是正确的 这是我的密码: #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括“Shader.h” #包括“vertex.h” #包括“Cam.h” #包括“obj.h” int mai

我将搅拌机盒导出为Collada文件,我正在使用ASIMP加载它,但它无法正确绘制。 下面是它的外观:

我尝试过使用.fbx和.obj,但没有成功。 这是我的代码中的错误,还是顶点数据不正确? 我检查了法线,它们都指向正确的方向, 是什么让我相信脸的方向是正确的

这是我的密码:

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括“Shader.h”
#包括“vertex.h”
#包括“Cam.h”
#包括“obj.h”
int main(){
glewExperimental=GL_TRUE;
如果(!glewInit()){
std::cout mNumVertices;it++){
顶点v;
如果(mesh->HasPositions())v.pos=vec3(mesh->mVertices[it]);
如果(网格->HasNormals())v.normal=vec3(网格->mNormals[it]);
如果(mesh->HasVertexColors(0))v.color=vec4(mesh->mColors[0][it]);
如果(mesh->HasTextureCoords(0))v.uv=vec2(mesh->mTextureCoords[0][it]);
顶点。推回(v);
}
对于(std::uint32\u t it=0;itmNumFaces;it++){
index.push_back(mesh->mFaces[it].mIndices[0]);
index.push_back(mesh->mFaces[it].mIndices[1]);
index.push_back(mesh->mFaces[it].mIndices[2]);
}
标准:uint32_t VAO、VBO、IBO、TID;
glGenVertexArrays(1和VAO);
glBindVertexArray(VAO);
glGenBuffers(1,&VBO);
glBindBuffer(GL_数组_BUFFER,VBO);
glBufferData(GL_数组_缓冲区,顶点.size()*sizeof(顶点),顶点.data(),GL_静态_绘制);
glvertexattributepointer(0,3,GL_FLOAT,GL_FALSE,12*sizeof(FLOAT),(void*)0);
GlenableVertexAttributeArray(0);
glvertexattributepointer(1,3,GL_FLOAT,GL_FALSE,12*sizeof(FLOAT),(void*)(3*sizeof(FLOAT));
GlenableVertexAttributeArray(1);
glvertexattributepointer(2,4,GL_FLOAT,GL_FALSE,12*sizeof(FLOAT),(void*)(6*sizeof(FLOAT));
GlenableVertexAttributeArray(2);
glvertexattributepointer(3,2,GL_FLOAT,GL_FALSE,12*sizeof(FLOAT),(void*)(10*sizeof(FLOAT));
GlenableVertexAttributeArray(3);
glGenBuffers(1,&IBO);
glBindBuffer(GL_元素数组缓冲区,IBO);
glBufferData(GL\u元素\u数组\u缓冲区,index.size()*sizeof(std::uint32\u t),index.data(),GL\u静态\u绘图);
///////////////////////////////质地//////////////////////////////////////////////////////
sf::图像img;
loadFromFile(“c:/textures/bunteksite.png”);
glGenTextures(1和TID);
glBindTexture(GLU纹理2D,TID);
glTexParameteri(GL_纹理2D、GL_纹理包裹S、GL_重复);
glTexParameteri(GL_纹理2D、GL_纹理包裹、GL_重复);
glTexParameteri(GL\u纹理\u 2D、GL\u纹理\u最小\u过滤器、GL\u线性\u MIPMAP\u线性);
glTexParameteri(GL_纹理2D、GL_纹理MAG_过滤器、GL_线性);
if(img.getPixelsPtr()){
GLTEXAGE2D(GL_纹理_2D,0,GL_RGBA,img.getSize().x,img.getSize().y,0,GL_RGBA,GL_无符号_字节,img.getPixelsPtr());
GLGENATEMIPMAP(GL_纹理_2D);
}
否则{
std::cout我打电话给glEnable(GL\U深度测试)
创建OpenGL上下文之前。 事后称之为解决了这个问题

啊,最后:

您确定collada文件中的面是三角形吗?如果不是,您可能会错过一些索引。代码的总体思路看起来不错(至少不检查着色器)。假设立方体的每一侧都应该有一个静态颜色,则不太可能存在方向或深度测试问题。是的,我是。我在混合器中进行了三角剖分,并在使用assimp进行预处理期间进行了三角剖分。如果我只绘制前三个顶点,它只绘制一个三角形。“它没有正确绘制”是什么意思甚至是这里的意思?从一点也不清楚的图像来看。“定向或深度测试不太可能是问题”代码中没有深度测试。可能重复@DuckPuppy为什么重复这个问题?