我正在使用 opengl 学习 Rust。我专门使用 opengl 的“gl”板条箱。我正在使用“glam”板条箱进行 3d 数学计算。gl::UniformMatrix4fv() 查找的函数的最后一个参数的类型为 *const GLfloat。我试过了:
let mut transform = Mat4::IDENTITY;
transform = transform * Mat4::from_translation(Vec3::new(0.5, 0.5, 0.0));
transform = transform * Mat4::from_axis_angle(Vec3::new(0.0, 0.0, 1.0), window.get_time());
let transform_loc = gl::GetUniformLocation(shader.id, CString::new("transform").unwrap().as_ptr());
gl::UniformMatrix4fv(transform_loc, 1, gl::FALSE, transform as *const f32);
Run Code Online (Sandbox Code Playgroud)
然而 glam 将 Mat4 实现为结构体。上面的代码会出现“non-primitive cast: glam::Mat4 as *const f32”错误。
如果没有强制转换,错误是“类型不匹配。预期 *-ptr,找到 'glam::Mat4' 预期原始指针 *const f32 找到 struct glam::Mat4”
查看文档,我没有看到任何函数会返回指向矩阵数据的指针。任何帮助或转向正确的方向将不胜感激。如果不可能,我会尝试不同的箱子。
我想要的结果是在将音频文件上传到服务器之前创建音频文件的预览。但是输入文件后,什么也没有发生。文件不会动态添加到 aduio 标记中,我也不会收到任何错误。控制台显示文件已加载。任何帮助将不胜感激!
我的组件html有~
<audio controls #figAudio>
<source [src]="audSrc" type="audio/ogg">
<source [src]="audSrc" type="audio/mpeg">
<source [src]="audSrc" type="audio/wav">
</audio>
<input type="file" (change)="audFileSelected($event)">
Run Code Online (Sandbox Code Playgroud)
我的组件 ts 文件有 ~
audSrc: SafeUrl;
constructor (
private sanitize: DomSanitizer
) {}
sanitizeUrl(url: string) {
return this.sanitize.bypassSecurityTrustUrl(url);
}
audFileSelected(event: any) {
console.log(event.target.files[0]);
if (event.target.files && event.target.files[0]) {
const reader = new FileReader();
reader.readAsDataURL(event.target.files[0]);
reader.onload = (evt: any) => {
this.audSrc = evt.target.result;
};
}
}
Run Code Online (Sandbox Code Playgroud)