Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL中立方体的定位_C++_Opengl_Glm Math - Fatal编程技术网

C++ OpenGL中立方体的定位

C++ OpenGL中立方体的定位,c++,opengl,glm-math,C++,Opengl,Glm Math,这个代码的输出是25立方旋转。 我面临的问题是每个立方体的位置,我不知道如何使它们在一行中,例如每5个立方体在一行中,等等 注意:我已经添加了立方体的位置 glm::vec3立方位置[]={ glm::vec3(0.0f,0.0f,0.0f), glm::vec3(2.0f,5.0f,-15.0f), glm::vec3(-1.5f,-2.2f,-2.5f), glm::vec3(-3.8f,-2.0f,-12.3f), glm::vec3(2.4f,-0.4f,-3.5f), glm::vec

这个代码的输出是25立方旋转。 我面临的问题是每个立方体的位置,我不知道如何使它们在一行中,例如每5个立方体在一行中,等等

注意:我已经添加了立方体的位置

glm::vec3立方位置[]={
glm::vec3(0.0f,0.0f,0.0f),
glm::vec3(2.0f,5.0f,-15.0f),
glm::vec3(-1.5f,-2.2f,-2.5f),
glm::vec3(-3.8f,-2.0f,-12.3f),
glm::vec3(2.4f,-0.4f,-3.5f),
glm::vec3(-1.7f,3.0f,-7.5f),
glm::vec3(1.3f,-2.0f,-2.5f),
glm::vec3(1.5f,2.0f,-2.5f),
glm::vec3(1.5f,0.2f,-1.5f),
glm::vec3(-1.3f,1.0f,-1.5f)
};
while(!glfwWindowShouldClose(主窗口))
{
glfwPollEvents();
glClearColor(0.0f、0.1f、0.2f、1.0f);
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
//摄像机变换
glm::mat4投影=glm::mat4(1.0f);
glm::mat4视图=glm::mat4(1.0f);
投影=glm::透视(glm::弧度(45.0f),(浮动)宽度/(浮动)高度,0.1f,100.0f);
view=glm::translate(视图,glm::vec3(0.0f,0.0f,-3.0f));
//获得统一的位置
GLint viewloc=glGetUniformLocation(ourShader.Program,“视图”);
glUniformMatrix4fv(viewloc,1,GL_FALSE,glm::value_ptr(视图));
GLint projlLoc=glGetUniformLocation(ourShader.Program,“投影”);
glUniformMatrix4fv(projlLoc,1,GL_FALSE,glm::value_ptr(投影));
//调用着色器程序
ourShader.Use();
glBindVertexArray(VAO);
for(无符号整数i=0;i<25;i++)
{
glm::mat4模型=glm::mat4(1.0f);
model=glm::translate(model,cubePositions[i]);
浮动角度=20.0f*i;
角度=glfwGetTime()*25.0f;
模型=glm::旋转(模型,glm::弧度(角度),glm::vec3(1.0f,0.3f,0.5f));
GLint modelLoc=glGetUniformLocation(ourShader.Program,“model”);
glUniformMatrix4fv(modelLoc,1,GL_FALSE,glm::value_ptr(model));
gldrawArray(GL_三角形,0,36);
}
glBindVertexArray(0);
glfwSwapBuffers(主窗口);
glfwPollEvents();
}
用于根据多维数据集的索引向每个多维数据集的模型矩阵添加转换。e、 g:

for(无符号整数i=0;i<25;i++)
{
float dist=;//立方体之间的距离
浮动x=(i%5)*距离;
浮动y=(i/5)*距离;
浮动角度=20.0f*i;
角度=glfwGetTime()*25.0f;
glm::mat4模型=glm::mat4(1.0f);
model=glm::translate(model,glm::vector3(x,y,0.0f));
模型=glm::旋转(模型,glm::弧度(角度),glm::vec3(1.0f,0.3f,0.5f));
GLint modelLoc=glGetUniformLocation(ourShader.Program,“model”);
glUniformMatrix4fv(modelLoc,1,GL_FALSE,glm::value_ptr(model));
gldrawArray(GL_三角形,0,36);
}
注意,您必须定义多维数据集之间的距离(
dist


请注意,矩阵的串联(乘法
*
)不正确。
如果要旋转整个立方体块,则必须在旋转之前进行平移:

model=旋转*平移
由于分别定义一个矩阵并将输入矩阵乘以新矩阵,
glm::rotate
必须在
glm::translate
之前完成:

glm::mat4 model=glm::mat4(1.0f);
模型=glm::旋转(模型,glm::弧度(角度),glm::vec3(1.0f,0.3f,0.5f));
model=glm::translate(model,glm::vector3(x,y,0.0f));

您可以使用该算法计算
立方体位置

#包括
std::向量立方位置;
for(无符号整数i=0;i<25;i++)
{
float dist=5.0f;//立方体之间的距离
浮动x=(i%5)*距离;
浮动y=(i/5)*距离;
立方位置。向后推(glm::vec3(x,y,0.0f));
}

translate矩阵的计算行中的
cubePositions[i]
是什么
model=glm::translate(model,cubePositions[i])?我添加了立方体位置[I]以使其更清晰。@Noura请阅读答案。你必须根据立方体的索引来计算立方体的位置。不要使用混乱的
cubePositions
。但是你可以计算立方体的位置。请参阅答案的最后一部分,我现在已经添加了这一部分。