opengl立方体

  • 立方体36个顶点
//立方体36个顶点
float vertices[] = {
    -0.5f, -0.5f, -0.5f,  0.0f, 0.0f,
     0.5f, -0.5f, -0.5f,  1.0f, 0.0f,
     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
    -0.5f,  0.5f, -0.5f,  0.0f, 1.0f,
    -0.5f, -0.5f, -0.5f,  0.0f, 0.0f,

    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
     0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
     0.5f,  0.5f,  0.5f,  1.0f, 1.0f,
     0.5f,  0.5f,  0.5f,  1.0f, 1.0f,
    -0.5f,  0.5f,  0.5f,  0.0f, 1.0f,
    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,

    -0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
    -0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
    -0.5f,  0.5f,  0.5f,  1.0f, 0.0f,

     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
     0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
     0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
     0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,

    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
     0.5f, -0.5f, -0.5f,  1.0f, 1.0f,
     0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
     0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,

    -0.5f,  0.5f, -0.5f,  0.0f, 1.0f,
     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
    -0.5f,  0.5f,  0.5f,  0.0f, 0.0f,
    -0.5f,  0.5f, -0.5f,  0.0f, 1.0f
};
  • 箱子个数
//多做几个箱子
glm::vec3 cubePositions[] = {
    glm::vec3(0.0f,0.0f,0.0f),  //正在用的点
    glm::vec3(2.0f,5.0f,-15.0f),   //根据深度值
    glm::vec3(-2.0f,3.0f,-7.5f),
};
  • main函数
int main() {
    
    //初始化
    init();
    //设置VAO顶点空间
    VAOset();
    //shaderSet()(已经可以不用了)
    //着色
    Shader myShader;    //使用封装shader类
    texture(&myShader);
    
     glm::mat4 trans = glm::mat4(1.0f);  //单位矩阵
     glm::mat4 model = glm::mat4(1.0f);  //模型矩阵:用于物体坐标转化为世界坐标
     glm::mat4 view = glm::mat4(1.0f);	//视图矩阵
    //渲染引擎

    glEnable(GL_DEPTH_TEST);    //打开深度缓存
    while (!glfwWindowShouldClose(window)) {    //当需要退出时候退出
        //设置颜色值和透明度,需要链接opengl32库才行
        glClearColor(0.2f, 0.3f, 0.3f, 0.1f);   //背景
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);   //清理颜色或者深度缓存
        
        //多个立方体,不同位置进行矩阵变换
        for (int i = 0; i < 3; i++) {
            trans = glm::mat4(1.0f);
            model = glm::translate(trans, cubePositions[i]);	//只变换位置用来区分不同的立方体
            model = glm::rotate(model, (float)glfwGetTime(), glm::vec3(1.5f, 3.0f, 0.0f));  //角度(逆向),绕

            view = glm::mat4(1.0f); //视图矩阵(位移,旋转):将世界坐标转化为视觉坐标
            view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));  // 将物体向后退3(z轴)

            glm::mat4 projection;   //投影
            projection = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f);  //透视投影:FOV,屏幕长宽比,近,远。
            trans = projection * view * model;  //P*View*M*Vlocal
            
            myShader.useShader();
            glUniformMatrix4fv(glGetUniformLocation(myShader.ID, "transform"), 1/*个矩阵*/, GL_FALSE,
                glm::value_ptr(trans));  //设置偏移矩阵

            //立方体,不用索引函数,画36个点
            glDrawArrays(GL_TRIANGLES, 0, 36);     //画三角形(从显存中取出三个点),下面是从索引中取得3个点
        }
        
        glfwSwapBuffers(window);
        glfwPollEvents();   //立即处理已经到位的事件,如果没有这个就会一直渲染而不触发事件       
    }
    //退出
    glfwTerminate();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值