gpt4 book ai didi

c++ - OpenGL - 将变换应用于 3D 空间中的多边形

转载 作者:行者123 更新时间:2023-11-30 05:01:33 26 4
gpt4 key购买 nike

我正在尝试在 3D 空间中旋转四边形。以下代码显示了用于绘制四边形的顶点着色器:

#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;

out vec3 ourColor;

uniform mat4 transform;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

void main()
{
gl_Position = transform*(projection*view*model*vec4(aPos, 1.0f));
ourColor = aColor;
}



transform 未乘以 projection*view*model*vec4(aPos,1.0f) 时显示四边形,但如上乘时不显示。

转换代码:

trans=glm::rotate(trans,(float)(glfwGetTime()),glm::vec3(0.0,0.0,1.0));
float scaleAmount = sin(j*0.3);j=j+0.035;
trans=glm::scale(trans,glm::vec3(scaleAmount,scaleAmount,scaleAmount));
unsigned int transformLoc = glGetUniformLocation(shaderProgram, "transform");
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(trans));
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);


我在vertex shader中也设置了uniform present。
为什么它不旋转和缩放,甚至在我乘以transform时出现(投影* View *模型*vec4(aPos,1.0f)) ?
编辑: 我发现问题出在缩放上,因为代码只适用于旋转。该代码不适用于仅缩放。

最佳答案

让我们只考虑二维。

四边形是在“世界”坐标中定义的。要围绕某个点旋转它,请将四边形移动到该点,然后旋转并缩放它,然后将其移回。

对矩阵执行此操作与 transform * model 相同,其中 transform 类似于

transform = moveback * scale * rotate * movetopoint

关于c++ - OpenGL - 将变换应用于 3D 空间中的多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com