• Content count

  • Joined

  • Last visited

Community Reputation

111 Neutral

About asp_kom

  • Rank
  1. SSDO

    Hi! I have map with SSDO, map with light calculation result. How to combine them?
  2. How to rename Topic to mark it as SOLVED ? [img][/img]
  3. [img][/img] Error was here: [CODE] memcpy(&texCoords[FinishedFaces*2+i][0], mesh->texcos[face->index[ i ]], sizeof(float)*2); [/CODE] shoul'd be: [CODE] memcpy(&texCoords[FinishedFaces*3+i][0], mesh->texcos[face->index[ i ]], sizeof(float)*2); [/CODE] fail [img][/img]
  4. Compared texture coordinates, verticies and faces loaded by lib3ds and my own 3ds-loader. Everything match. Checked texture coordinates VBO with gDebugger. Coordinates are wrong ...[img][/img]
  5. Here is rendering code: [CODE] shaderProg->use(); shaderProg->setUniform("MVP",float_mvp); //shaderProg->setUniform("textureMy",(int)GL_TEXTURE0); shaderProg->setUniform("textureMy",(int)0); glBindBuffer(GL_ARRAY_BUFFER, ::model->getTexcoordVBO()); int m_texcord_loc = shaderProg->getAttribLocation("texcord"); glEnableVertexAttribArray(m_texcord_loc); glVertexAttribPointer(m_texcord_loc, 2, GL_FLOAT, GL_FALSE, 0, 0); ::model->bindTexture(); //rendering model ::model->Draw(); glUseProgram(0); [/CODE] rendering model: [CODE] // Enable vertex and normal arrays glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); // Bind the vbo with the normals glf_->glBindBuffer(GL_ARRAY_BUFFER, m_NormalVBO); // The pointer for the normals is NULL which means that OpenGL will use the currently bound vbo glNormalPointer(GL_FLOAT, 0, NULL); glf_->glBindBuffer(GL_ARRAY_BUFFER, m_VertexVBO); glVertexPointer(3, GL_FLOAT, 0, NULL); // Render the triangles glDrawArrays(GL_TRIANGLES, 0, m_TotalFaces * 3); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); [/CODE]
  6. Does anybody have experience with lib3ds? Using OpenGL with GLSL shaders. Looks like model is loaded fine. But when I try to render it with texture, I recieve something horrible: [img][/img] Here is model with texture coordinates interpreted as colors: [img][/img] Here is my code for loading texture (gDebugger shows that texture is loaded normally): [CODE] glGenTextures(1,&textureId); FREE_IMAGE_FORMAT fif = FreeImage_GetFileType(filename); FIBITMAP* fib = FreeImage_Load(fif,filename,0); int width = FreeImage_GetWidth(fib); int height = FreeImage_GetHeight(fib); char* pixels = (char*)FreeImage_GetBits(fib); glBindTexture(GL_TEXTURE_2D,textureId); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,width,height,0,GL_BGR_EXT,GL_UNSIGNED_BYTE,pixels); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); FreeImage_Unload(fib); [/CODE] Here is my code for loading model (I work with GLM library): [CODE] glm::vec3 *vertices = new glm::vec3[m_TotalFaces*3]; glm::vec3 *normals = new glm::vec3[m_TotalFaces*3]; glm::vec2 *texCoords = new glm::vec2[m_TotalFaces*3]; Lib3dsMesh * mesh; unsigned int FinishedFaces = 0; // Loop through all the meshes for (int i = 0; i < m_model->nmeshes; i++) { mesh = m_model->meshes[i]; lib3ds_mesh_calculate_face_normals(mesh, (float (*)[3])&normals[FinishedFaces*3][0]); // Loop through every face for(unsigned int cur_face = 0; cur_face < mesh->nfaces;cur_face++) { Lib3dsFace * face = &mesh->faces[cur_face]; for(unsigned int i = 0;i < 3;i++) { memcpy(&vertices[FinishedFaces*3 + i][0], mesh->vertices[face->index[ i ]], sizeof(float)*3); memcpy(&texCoords[FinishedFaces*2+i][0], mesh->texcos[face->index[ i ]], sizeof(float)*2); } FinishedFaces++; } } // Generate a Vertex Buffer Object and store it with our vertices glf_->glGenBuffers(1, &m_VertexVBO); glf_->glBindBuffer(GL_ARRAY_BUFFER, m_VertexVBO); glf_->glBufferData(GL_ARRAY_BUFFER, (sizeof(float)*3) * 3 * m_TotalFaces, &vertices[0], GL_STATIC_DRAW); // Generate another Vertex Buffer Object and store the normals in it glf_->glGenBuffers(1, &m_NormalVBO); glf_->glBindBuffer(GL_ARRAY_BUFFER, m_NormalVBO); glf_->glBufferData(GL_ARRAY_BUFFER, (sizeof(float)*3) * 3 * m_TotalFaces, &normals[0], GL_STATIC_DRAW); // Generate Vertex Buffer Object and store texture coordinates in it glf_->glGenBuffers(1, &m_TexcoorVBO); glf_->glBindBuffer(GL_ARRAY_BUFFER, m_TexcoorVBO); glf_->glBufferData(GL_ARRAY_BUFFER, (sizeof(float)*2) * 3 * m_TotalFaces, &texCoords[0], GL_STATIC_DRAW); // Clean up our allocated memory delete[] vertices; delete[] normals; delete[] texCoords; [/CODE] gDebugger shows that all texture coordinates in VBO belong to interval [0.0, 1.0] Here is my vertex shader: [CODE] #version 330 in vec3 position; in vec2 texcord; out vec2 o_texcord; uniform mat4 MVP; void main() { gl_Position = MVP * vec4(position,1.0); o_texcord = texcord; } [/CODE] Here is my fragment shader: [CODE] #version 330 in vec2 o_texcord; out vec4 fragmentColor; uniform sampler2D textureMy; void main() { fragmentColor = texture2D( textureMy, o_texcord); } [/CODE] In 3ds max model looks fine: [img][/img] What am I doing wrong?[img][/img]