OpenGL精灵旋转到相机

问题描述

我使用的是 OpenGL 3.3。有必要让精灵一直看着相机。

在大多数情况下,代码来自 learnopenGL 课程,我对其进行了修改以满足我的需要。我尝试了不同的方法,但到目前为止我还没有设法做一些有效的事情。

投影是透视的。

glm::mat4 projection = glm::perspective(glm::radians(fov),(float)width_ / (float)height_,0.1f,30.0f);

我是这样画精灵的。

void SpriteRenderer3D::DrawSprite(const Texture2D& texture,glm::vec3 position,glm::vec3 camera_pos,glm::vec3 size,float rotate,glm::vec3 color) {
    // activate shader
    shader.Use();   
    // create transformations
    glm::mat4 model = glm::mat4(1.0f); // make sure to initialize matrix to identity matrix first
    model = glm::translate(model,glm::vec3(position));  // first translate (transformations are: scale happens first,then rotation,and then final translation happens; reversed order)
    model = glm::translate(model,glm::vec3(0.5f * size.x,0.5f * size.y,0.5f * size.z)); // move origin of rotation to center of quad

    model = glm::rotate(model,glm::radians(rotate),glm::vec3(0.0f,1.0f,0.0f));
    model = glm::translate(model,glm::vec3(-0.5f * size.x,-0.5f * size.y,-0.5f * size.z)); // move origin back
    model = glm::scale(model,glm::vec3(size)); // last scale

    this->shader.SetMatrix4("model",model);
    // render textured quad
    this->shader.SetVector3f("spriteColor",color);     
    glActiveTexture(GL_TEXTURE0);
    texture.Bind(); 
}

我使用这个 Vshader。

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

out vec2 TexCoords;

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

void main()
{
    gl_Position = projection * view * model * vec4(aPos,1.0);
    TexCoords = vec2(aTexCoord.x,aTexCoord.y);
}

移动相机时,视图矩阵是这样考虑的。

glm::mat4 view = glm::lookAt(cameraPos,cameraPos + cameraFront,cameraUp);
ResourceManager::GetShader("sprite3d").SetMatrix4("view",view);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)