终于能在OpenGL中,用vao,vbo同时加载obj文件和单独绘制的3D物体了。包括一个坐标系,2个圆环,1个恐龙obj模型。特地发帖自己庆祝一下,没有别的意思。后面会自己进行整理。
初始化代码
void InitOpenGL(void)
{
//1.0 初始化数据
camera.camerax=2.0f;camera.cameray=1.0f;camera.cameraz=38.5f;
camera.rotateangle=0.1f;
mytorus.locx=0.0f;mytorus.locy=0.0f;mytorus.locz=30.0f;
mytorus.rotateangle=0.1f;
//1.1B 编译并使用纹理可编程管线
renderingProgram =mycorelib.createShaderProgram("vert.glsl", "frag.glsl");
//1.2B 选择指定的管线
glUseProgram(renderingProgram);
//1.3B 透视矩阵设置
scene.projLoc=glGetUniformLocation(renderingProgram,"proj_matrix");
scene.aspect=(float)scene.screenWidth/(float)scene.screenHeight;
scene.pMat=glm::perspective(1.0472f,scene.aspect,0.1f,1000.0f); //1.0472radians=60degree
glUniformMatrix4fv(scene.projLoc,1,GL_FALSE,glm::value_ptr(scene.pMat));
glGenVertexArrays(2,vao);
glGenBuffers(6,vbo);
glGenBuffers(1, &ebo);
//vbo 0,1
LoadCoor();
//vbo 2,3,4,5
LoadTorus();
//vbo
LoadObj();
//加载图片,制作纹理,贴图;除了这里加载图片外,还要在下面计算出贴图坐标,将其传到着色器里
int width,height,nrChannels;
glGenTextures(1, &texture);
unsigned char *data1=stbi_load("brick.jpg",&width,&height,&nrChannels,0);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data1);
glGenerateMipmap(GL_TEXTURE_2D);
stbi_image_free(data1);
}