首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ glm Opengl转换和旋转glm::vec4 4与glm::mat4

C++ glm Opengl转换和旋转glm::vec4 4与glm::mat4
EN

Stack Overflow用户
提问于 2016-01-21 16:52:00
回答 2查看 1.7K关注 0票数 0

因此,我正试图为我的批处理渲染系统翻译CPU上的顶点。我试过复制glsl,但它根本不起作用。(模型没有出现)

代码语言:javascript
复制
glm::vec4 off = glm::vec4(0, 0, 0, 1);

off = Util::createTransform(offset, glm::vec3(0, 45, 0)) * off; //translated the vertex by the offset(supplied by the function) and rotates by 45 degrees on the Y axis

for (int i = 0; i < Tvertex.size(); i++) {
    Tvertex[i] *= glm::vec3(off.x, off.y, off.z); //I think its here I might have messed up?
}

下面是"Util::createTransform“函数:

代码语言:javascript
复制
glm::mat4 Util::createTransform(glm::vec3 pos, glm::vec3 rot) {
    glm::mat4 trans = glm::mat4(1.0);
    trans = glm::rotate(trans, glm::radians(rot.x), glm::vec3(1, 0, 0));
    trans = glm::rotate(trans, glm::radians(rot.y), glm::vec3(0, 1, 0));
    trans = glm::rotate(trans, glm::radians(rot.z), glm::vec3(0, 0, 1));
    trans = glm::translate(trans, pos);
    return trans;
}

我在哪里搞砸了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-21 20:12:07

Util::createTransform()返回一个glm::mat4,而您只需获取该矩阵的最右边列并将其存储在一个glm::vec4中。

您正在尝试创建一个转换矩阵,它表示旋转和平移的组合。此操作不能由单个vec4表示。您可以单独进行转换,然后简单地将相同的向量添加到所有顶点,以转换偏移量。但是,对于轮转--或者除了翻译之外的其他转换--您将需要完整的矩阵。

由于glm使用旧的“固定函数”GL所使用的相同约定,所以您必须使用矩阵*向量乘法命令将转换矩阵应用到顶点。所以您的代码应该如下所示:

代码语言:javascript
复制
glm::mat4 off = Util::createTransform(offset, glm::vec3(0, 45, 0)) * off; //translated the vertex by the offset(supplied by the function) and rotates by 45 degrees on the Y axis

for (int i = 0; i < Tvertex.size(); i++) {
    Tvertex[i] = off * Tvertex[i];
}
票数 0
EN

Stack Overflow用户

发布于 2016-01-21 20:01:59

这个怎么样:

代码语言:javascript
复制
// I think its here I might have messed up?
Tvertex[i] *= glm::vec3(off.x, off.y, off.z); 

// I think that might be what you wanted:
Tvertex[i] += glm::vec3(off.x, off.y, off.z);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34929620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档