C语言 3D立方体板,openGL中的列x行大小

xt0899hw  于 2023-01-16  发布在  其他
关注(0)|答案(1)|浏览(168)

我声明了GLfloat vertices [][3],GLfloat normals [][3]和GLfloat colors [][3],然后根据下面的代码声明了立方体和棋盘的结构体。我希望立方体有一个间隙或立方体大小的0.1%,所以将它们缩放0.99倍。失败的是看不到间隙。

typedef struct cube * Cube;
struct cube {
    float x, y, z;
    float scale;
};

Cube cube;     // cube
Cube *board;
void drawBoard()
{
    // Initialize cube and board
    cube = (Cube)malloc(sizeof(struct cube));
    cube->x = 0.0;
    cube->y = 0.0;
    cube->z = 0.0;
    cube->scale = 1;

    board = (Cube*)malloc(sizeof(Cube)*64);
    for(int i=0; i<64; i++) {
        board[i] = (Cube)malloc(sizeof(struct cube));
        board[i]->x = 0.0 + 0.1*(i%8);
        board[i]->y = 0.0 - 0.1*(i/8);
        board[i]->z = 0.0;
        board[i]->scale = 0.99;
    }
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
    glTranslatef(cube->x, cube->y, cube->z);
    //glScalef(cube->scale, cube->scale, cube->scale);

    // Draw board of cubes
    for(int i=0; i<64; i++) {
        glPushMatrix();
        glTranslatef(board[i]->x, board[i]->y, board[i]->z);
        glScalef(board[i]->scale, board[i]->scale, board[i]->scale);

        drawCube();
        glEnd();
        glPopMatrix();
    }
    glPopMatrix();
    glFlush();
}

我期待看到一个板大小列X行的三维立方体考虑立方体有一个大小= 1,与他们之间的差距为0.1%的大小。板是画,但立方体似乎都并排放置没有差距。

sxpgvts3

sxpgvts31#

你在一个网格上画了一堆立方体,立方体的大小(如果你想象用尺子从一边到另一边测量)是0.99(立方体的实际大小是1.0,你把它缩放了0.99),第一个立方体的中心和第二个立方体的中心之间的距离只有0.1。
这意味着立方体彼此重叠了很多。所以它们之间当然没有间隔。如果你想把立方体放在一个0. 1的网格上,它们之间有间隔,显然每个立方体都必须小于0. 1。
请原谅我画得太懒了,你认为你的立方体是这样的:

但它们实际上更像这样:

因为立方体之间差距远小于每个立方体的大小。

相关问题