如何将glm :: vec4 <float>转换为GLfloat*?

 莫小北 发布于 2023-02-03 11:06

我想传递glm::vec4gl::ImmediateMode::glColor4fv(GLfloat*):

std::vector colors;
colors.push_back(vec4(1.0f, 0.0f, 0.0f, 1.0f));
glColor4fv(colors[0]);

我收到以下错误消息:

error: not matching function call to 'ImmediateMode::glColor4fv(const vec4&) const'
[...]
candidate is: [...] void gl::ImmediateMode::glColor4fv(GLfloat*) const

显然,我必须将我的glm :: vec4转换为GLfloat数组.我通读了GLSLanguage规范,但找不到任何直接访问数据的方法.以下尝试有效:

GLfloat *c = new GLfloat[4];
c[0] = colors[0].r;
c[1] = colors[0].g;
c[2] = colors[0].b;
c[3] = colors[0].a;
glColor4fv(c);

但我宁愿使用更优雅的东西.那么有没有办法访问glm :: vec4中的数据数组以允许访问如下所示?

glColor4fv(reinterpret_cast(colors[0].data())); 
// .data() would hand me a pointer to the float array of the vec4

yngccc.. 6

你可以使用glm :: value_ptr.它同时适用于glm::matglm::vec和类型安全.

2 个回答
  • 你可以使用glm :: value_ptr.它同时适用于glm::matglm::vec和类型安全.

    2023-02-03 11:08 回答
  • 你也可以这样做:

    std::vector< vec4 > colors;
    colors.push_back(vec4(1.0f, 0.0f, 0.0f, 1.0f));
    glColor4fv( &colors[0].r );
    // or this
    glColor4fv( &colors[0][0] );
    

    2023-02-03 11:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有