c++ - 在 OpenGL 中使用 for 循环创建数组

标签 c++ arrays opengl for-loop vertex

我要做的是使用数组创建一个由 8 个大小相同的三角形组成的正方形。正方形四个角的坐标分别是,(-10, -10, 10), (-10, -10, -10), (10, -10, -10), (10, -10, 10) .那是从左上角开始逆时针方向。

我已经在将值输入数组之前创建了它,但现在我必须弄清楚如何在 C++ 中使用 for 循环来完成它。所以我知道对于每个数组(我需要创建一个顶点、索引和颜色数组)我需要创建一个 for 循环并且 for 循环内部必须有一个 for 循环。

最佳答案

我喜欢用Eigen::Vector2f对于 Vec 但任何具有类似接口(interface)的东西都应该可以工作:

template< typename Vec >
void glVec2d( const Vec& vec )
{
    glVertex2d( vec.x(), vec.y() );
}

template< typename Vec >
void glTex2d( const Vec& vec )
{
    glTexCoord2d( vec.x(), vec.y() );
}

template< typename Vec >
void glQuad2d
    (
    const Vec& A,  // lower left coord
    const Vec& B,  // lower right coord
    const Vec& C,  // upper right coord
    const Vec& D,  // upper left coord
    unsigned int divs = 2,
    const Vec& At = Vec(0,0),
    const Vec& Bt = Vec(1,0),
    const Vec& Ct = Vec(1,1),
    const Vec& Dt = Vec(0,1)
    )
{
    // base case
    if( divs == 0 )
        {
        glTex2d( At );
        glVec2d( A );

        glTex2d( Bt );
        glVec2d( B );

        glTex2d( Ct );
        glVec2d( C );

        glTex2d( Dt );
        glVec2d( D );

        return;
        }

    Vec AB = (A+B) * 0.5;
    Vec BC = (B+C) * 0.5;
    Vec CD = (C+D) * 0.5;
    Vec AD = (A+D) * 0.5;
    Vec ABCD = (AB+CD) * 0.5;

    Vec ABt = (At+Bt) * 0.5;
    Vec BCt = (Bt+Ct) * 0.5;
    Vec CDt = (Ct+Dt) * 0.5;
    Vec ADt = (At+Dt) * 0.5;
    Vec ABCDt = (ABt+CDt) * 0.5;

    // subdivided point layout
    // D   CD   C
    // 
    // AD ABCD BC 
    //
    // A   AB   B

    // subdivide
    glQuad2d( A, AB, ABCD, AD, divs - 1, At, ABt, ABCDt, ADt );
    glQuad2d( AB, B, BC, ABCD, divs - 1, ABt, Bt, BCt, ABCDt );
    glQuad2d( ABCD, BC, C, CD, divs - 1, ABCDt, BCt, Ct, CDt );
    glQuad2d( AD, ABCD, CD, D, divs - 1, ADt, ABCDt, CDt, Dt );
}

它目前是递归的,但您始终可以为某些 for 循环操作添加显式堆栈。

关于c++ - 在 OpenGL 中使用 for 循环创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7894220/

相关文章:

c++ - 文本转语音字符串或变量值 (PicoTTS)

javascript - 有没有办法获取调用函数的数组元素的键值?

arrays - for循环中的多个语句,在Powershell中具有用户定义的数组

arrays - bash ?当数组是从 readarray 创建但未手动声明时出现

java - 如何让相机沿着旋转方向移动?

c++ - 为什么我的 weak_ptr 出现段错误

c++ - 以下单例实现线程安全吗?

c++ - C++ 中的惰性日志记录

c++ - 如何使用 OpenGL Canvas 在另一个程序中创建子窗口?

image - 为什么 OpenGL 不能正确显示我加载的图像?