标签: glm-math

理解glm :: lookAt()

我正在学习OpenGL来学习OpenGL,在这个教程中他们使用glm::lookAt()函数来构建视图,但是我无法理解它的工作情况glm::lookAt(),显然,没有详细的GLM文档.谁能帮我理解参数和工作glm::lookAt()吗?

GLM文档说:

detail::tmat4x4<T> glm::gtc::matrix_transform::lookAt   
(   
    detail::tvec3< T > const &  eye,
    detail::tvec3< T > const &  center,
    detail::tvec3< T > const &  up 
)
Run Code Online (Sandbox Code Playgroud)

我目前的理解是相机位于eye并面向center.(我不知道是什么up)

c++ opengl glm-math

50
推荐指数
3
解决办法
8万
查看次数

如何打印已通过引用传递的glm :: vec3类型的向量值?

我有一个小的obj加载器,它需要两个参数并将它们传递回输入变量..但这是我第一次这样做,我不知道如何打印所述值现在.这是我测试加载器是否正常工作的主要功能.我有两个类型的向量glm::vec3来保存顶点和普通数据.

std::vector<glm::vec3> vertices;
std::vector<glm::vec3> normals;    

int main() {
    bool test = loadOBJ("cube.obj", vertices, normals);
    for (int i = 0; i < vertices.size(); i++) {
       std::cout << vertices[i] << std::endl;   // problem line
    }

    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

上面评论的那条线是产生无用信息的原因.如果我这样离开并运行该程序,我会收到一堆错误(对于我来说太未格式化并且很长时间粘贴),如果我添加引用运算符,我会得到如下输出:

0x711ea0
0x711eac
0x711eb8
0x711ec4    // etc
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

c++ glm-math

41
推荐指数
4
解决办法
5万
查看次数

如何使用数组初始化glm :: mat4?

我正在使用OpenGL数学库(glm.g-truc.net),并希望glm::mat4使用float-array 初始化a .

float aaa[16];
glm::mat4 bbb(aaa);
Run Code Online (Sandbox Code Playgroud)

这不起作用.

我想这个解决方案很简单,但我不知道怎么做.我找不到关于glm的好文档.我会很感激一些有用的链接.

c++ opengl math glm-math

36
推荐指数
3
解决办法
4万
查看次数

glm ::透视解释

我试图了解以下代码的作用:

glm::mat4 Projection = glm::perspective(35.0f, 1.0f, 0.1f, 100.0f);
Run Code Online (Sandbox Code Playgroud)

它是否创建了投影矩阵?剪掉不在用户视图中的任何内容?我无法在API页面上找到任何内容,我在他们网站上的pdf中唯一能找到的是:

gluPerspective:

glm::mat4 perspective(float fovy, float aspect, float zNear,
float zFar);
glm::dmat4 perspective(
double fovy, double aspect, double zNear,
double zFar);
From GLM_GTC_matrix_transform extension: <glm/gtc/matrix_transform.hpp>
Run Code Online (Sandbox Code Playgroud)

但它没有解释参数.也许我错过了什么.

opengl glm-math

27
推荐指数
2
解决办法
4万
查看次数

从左到右的结合意味着什么?

我对从左到右和从右到左的相关性的定义感到困惑.我也看到他们被称为左关联和右关联,并想知道哪个对应哪个.

我知道它与执行具有相同优先级的操作的顺序有关,如a = x*y*z是指a = x*(y*z)还是a =(x*y)*z.我不知道哪一个是从左到右的关联,哪个是从右到左的关联.

我已经尝试了谷歌它,但我能找到的是不同运算符在c ++中的相关性的表格.看看所有的例子让我更加困惑.

让我更进一步困惑的是:

glm::vec4 transformedVector = translationMatrix * rotationMatrix * scaleMatrix * originalVector;
Run Code Online (Sandbox Code Playgroud)

首先预先形成缩放矩阵乘法,然后是旋转矩阵,然后是平移.在这个例子中,矩阵都是glm :: mat4类型,向量是glm :: vec4类型.这是从左到右还是从右到左的关联性?这与正常乘法相同还是glm类型的乘法不同?

c++ glm-math

24
推荐指数
3
解决办法
2万
查看次数

在GLM(OpenGL)中乘以矩阵和向量

我有一个变换矩阵m,和一个向量,v.我想使用矩阵对矢量进行线性变换.我希望我能做到这样的事情:

glm::mat4 m(1.0);
glm::vec4 v(1.0);

glm::vec4 result = v * m;
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.在GLM中进行此类操作的正确方法是什么?

编辑:

只是给遇到类似问题的人留言.GLM要求所有操作数使用相同的类型.不要试图乘以dvec4mat4和期望它的工作,你需要一个vec4.

c++ glm-math

20
推荐指数
2
解决办法
3万
查看次数

带有__declspec(align('16'))的形式参数将不对齐

我正在尝试设置着色器制服的功能,但是当我尝试编译它时,我收到此错误:

错误2错误C2719:'value':带__declspec的形式参数(align('16'))将不对齐

这是功能代码:

void Shader::setUniform(std::string name, const glm::mat4 value){
    GLint uniform = glGetUniformLocation(m_program, name.c_str());
    glUniformMatrix4fv(uniform, 1, GL_FALSE, (GLfloat*)&value);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Visual Studio 2013.

c++ opengl glm-math

17
推荐指数
1
解决办法
1万
查看次数

将glm :: vec4转换为glm :: vec3

如何将a转换glm::vec4glm::vec3

只有x,y,z须─该w组件可以被丢弃.

在GLSL中,可以使用.xyz[1] 来完成,但在glm中,这会导致编译错误:

error: 'glm::vec4' has no member named 'xyz'
Run Code Online (Sandbox Code Playgroud)

[1] http://en.wikibooks.org/wiki/GLSL_Programming/Vector_and_Matrix_Operations#Components

glm-math

16
推荐指数
2
解决办法
3万
查看次数

glm :: ortho()实际上是错的吗?

我最近认为从OpenGL提供的旧(已弃用)功能切换是一个好主意,例如矩阵运算和固定功能管道.

我使用GLM作为我的矩阵库来简化一些事情.问题是它可能导致了比简化更多的问题......

透视投影与我的着色器和设置工作正常,但当我尝试切换到正交时,一切都崩溃了.我的观点和简单的四边形不会显示.当我使用旧的OpenGL矩阵时,事情又开始了.

我把它缩小到投影矩阵.以下是我的称呼方式:

glm::mat4 projMat = glm::ortho( 0, 400, 0, 400, -1, 1 );
Run Code Online (Sandbox Code Playgroud)

我把它与opengl提供的那个进行比较一旦被称为"

glOrtho( 0, 400, 0, 400, -1, 1 );
Run Code Online (Sandbox Code Playgroud)

唯一的区别是[0] [0]元素和[1] [1]元素(据我所知,它们分别等于"2 /宽度"和"2 /高度").从OpenGL矩阵中,值就是这样!但是在glm矩阵上,值为0.

在我调用glm :: ortho后,我手动切换了glm矩阵中的值,一切都恢复了!

所以我的问题是:glm :: ortho()函数真的坏了,还是我只是用错了?

c++ opengl orthogonal glm-math

15
推荐指数
1
解决办法
2万
查看次数

为什么glm :: vec将vec值表示为联合?

我在看vec4glm的源代码实现,我想知道为什么它们用union表示向量值,而不是像float或等原始数据类型int

这是我在vec4实现中找到的代码:

union { T x, r, s; };
union { T y, g, t; };
union { T z, b, p; };
union { T w, a, q; };
Run Code Online (Sandbox Code Playgroud)

是什么,如果我们只是写的区别T x,T y,T z,T w

c++ glm-math

14
推荐指数
2
解决办法
1116
查看次数

标签 统计

glm-math ×10

c++ ×8

opengl ×5

math ×1

orthogonal ×1