我声明了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%的大小。板是画,但立方体似乎都并排放置没有差距。
1条答案
按热度按时间sxpgvts31#
你在一个网格上画了一堆立方体,立方体的大小(如果你想象用尺子从一边到另一边测量)是0.99(立方体的实际大小是1.0,你把它缩放了0.99),第一个立方体的中心和第二个立方体的中心之间的距离只有0.1。
这意味着立方体彼此重叠了很多。所以它们之间当然没有间隔。如果你想把立方体放在一个0. 1的网格上,它们之间有间隔,显然每个立方体都必须小于0. 1。
请原谅我画得太懒了,你认为你的立方体是这样的:
但它们实际上更像这样:
因为立方体之间差距远小于每个立方体的大小。