为什么我的广告牌四边形会这样渲染?

问题描述 投票:0回答:1

所以我在 love2d 的一个区域中多次实例化一个四边形,这似乎进展顺利,但是当我向广告牌中添加一些着色器代码时,它们渲染在一个奇怪的位置,看起来它们都在围绕 (0 , 0, 0)(我多次实例化的网格的位置)。我是否必须为每个实例创建一个新矩阵才能让它们全部从各自的位置面向相机, 或者我做错了什么?

这是常规非广告牌版本的顶点着色器代码:

mat4 ModelView = viewMatrix*modelMatrix;
            
relativeWorldPosition = projectionMatrix * ModelView * (vertexPosition + vec4(instancePositions[love_InstanceID].xyz, 0));          
            
return relativeWorldPosition;

这是广告牌版本的顶点着色器代码:

mat4 ModelView = viewMatrix*modelMatrix;
            
ModelView[0][0] = 1;
ModelView[0][1] = 0;
ModelView[0][2] = 0;

            // Column 1:
ModelView[1][0] = 0;
ModelView[1][1] = 1;
ModelView[1][2] = 0;

            // Column 2:
ModelView[2][0] = 0;
ModelView[2][1] = 0;
ModelView[2][2] = 1;

relativeWorldPosition = projectionMatrix * ModelView * (vertexPosition + vec4(instancePositions[love_InstanceID].xyz, 0));
            
            
return relativeWorldPosition;

我尝试向网格(四边形)的每个实例添加广告牌。 我希望他们从当前位置像广告牌一样面对镜头。 我的尝试导致实例渲染在一个奇怪的位置,该位置根据相机旋转而变化。

lua glsl shader love2d gpu-instancing
1个回答
0
投票

所以基本上我只是从现有的模型矩阵中添加了一个新的模型矩阵并手动设置它的位置,如下所示:

        mat4 TransModelMatrix = modelMatrix; 
        TransModelMatrix[3][0] = InstData.x;
        TransModelMatrix[3][1] = InstData.y;
        TransModelMatrix[3][2] = InstData.z;
        
        
        mat4 ModelView = viewMatrix*-TransModelMatrix;
        
        ModelView[0][0] = 1;
        ModelView[0][1] = 0;
        ModelView[0][2] = 0;

        // Column 1:
        //ModelView[1][0] = 0;
        //ModelView[1][1] = 1;
        //ModelView[1][2] = 0;

        // Column 2:
        ModelView[2][0] = 0;
        ModelView[2][1] = 0;
        ModelView[2][2] = 1;

        relativeWorldPosition = projectionMatrix * -ModelView * (vertexPosition);
© www.soinside.com 2019 - 2024. All rights reserved.