minecraft吧 关注:2,553,723贴子:31,914,354

挖个坑 准备写一个MC 重走前辈革命之路

只看楼主收藏回复

最近学习OpenGL 打算用C++ OpenGL GLFW写吧


IP属地:新西兰1楼2018-06-13 20:32回复
    这个介绍GLFW的基本结构还挺详细的:
    https://www.jianshu.com/p/0ebe2b38d81c
    有兴趣的可以看一下


    IP属地:新西兰3楼2018-06-13 21:31
    收起回复
      2025-06-26 19:03:22
      广告
      先写一个练习小程序 画一下地面 圆柱 球体 和正弦波动的旗面


      IP属地:新西兰4楼2018-06-13 22:20
      回复
        。。。。。乔大佬的后代


        IP属地:辽宁来自Android客户端5楼2018-06-14 06:18
        收起回复
          圆柱的:
          for(int n = 0; n < 12; n++){
          // Calculate sin(theta) and cos(theta)
          float theta = M_PI/6*n;
          float sinTheta = sin(theta);
          float cosTheta = cos(theta);
          buffer[i++]= radius*cosTheta;buffer[i++] =-2.f;buffer[i++]=radius*sinTheta;
          buffer[i++]= 0.8f;buffer[i++] =0.8f;buffer[i++]=0.8f;
          buffer[i++]= radius*cosTheta;buffer[i++] =0.0f;buffer[i++]=radius*sinTheta;
          buffer[i++]= 0.8f;buffer[i++] =0.8f;buffer[i++]=0.8f;
          }


          IP属地:新西兰6楼2018-06-14 13:00
          回复
            做出来让我测试下


            7楼2018-06-14 13:58
            收起回复
              球体:
              for(int i1 = 0; i1 < 13; i1++) {
              float theta = i1 * M_PI / 12;
              for(int i2 = 0; i2 < 13; i2++) {
              float phi = i2 * M_PI * 2.0 / 12;
              buffer_b[i++] = r*sin(theta)*cos(phi); buffer_b[i++] = r*cos(theta); buffer_b[i++] = r*sin(theta)*sin(phi);
              // color
              buffer_b[i++] = 1.0f; buffer_b[i++] = 1.0f; buffer_b[i++] = 0.0f;
              }
              }


              IP属地:新西兰8楼2018-06-15 12:08
              回复(1)
                正弦:wave = 0.15f*sin(4*glfwGetTime()+M_PI*loop_counter);


                IP属地:新西兰9楼2018-06-15 12:11
                回复
                  2025-06-26 18:57:22
                  广告


                  IP属地:新西兰10楼2018-06-15 12:13
                  回复
                    效果大概就这样吧 233333 camera的相对于y轴的rotate, theta用glfwGetTime()取:
                    void rotate_Y(float theta, float Ry[16]) {
                    // Calculate sin(theta) and cos(theta)
                    float sinTheta = sin(theta/2);
                    float cosTheta = cos(theta/2);
                    Ry[0] = cosTheta; Ry[4] = 0.0f; Ry[8] = sinTheta; Ry[12] = 0.0f;
                    Ry[1] = 0.0f; Ry[5] = 1.0f; Ry[9] = 0.0f; Ry[13] = 0.0f;
                    Ry[2] = -sinTheta; Ry[6] = 0.0f; Ry[10] = cosTheta; Ry[14] = 0.0f;
                    Ry[3] = 0.0f; Ry[7] = 0.0f; Ry[11] = 0.0f; Ry[15] = 1.0f;
                    }


                    IP属地:新西兰11楼2018-06-15 12:16
                    回复
                      接下来弄一个obj loader 主要就是要学习下如何加载 贴图 和渲染模型


                      IP属地:新西兰12楼2018-06-15 12:19
                      回复(1)
                        养到100楼的时候再看


                        IP属地:云南来自Android客户端13楼2018-06-15 14:32
                        收起回复
                          @qiaozhanrong


                          来自手机贴吧14楼2018-06-17 07:33
                          回复
                            obj loader... 是参考了github上面的一些代码 也挺有限的 loader只能支持 Ka, Kd, Ks, Ns, map_Kd, map_Ks
                            .obj file包含的vertex position, vertex normal, vertex uv均有值 且face仅由3或4个点构成的时候 才能成功运行
                            camera用的是glfwGetKey() rotate或者move一下


                            IP属地:新西兰16楼2018-06-17 16:50
                            回复
                              2025-06-26 18:51:22
                              广告
                              shader部分没有很好理解phong的代码 看opengl point light的源码感觉更清晰一些 接下来做一下skybox


                              IP属地:新西兰17楼2018-06-17 16:53
                              回复