0
我試圖創建一個模型視圖投影矩陣爲我着色器像這樣創建ModelViewProjection矩陣:我掙扎在OpenTK
我得到的矩陣相機翻譯:
public Matrix4 GetMatrix()
{
return Matrix4.LookAt(Position, LookingAt, Vector3.UnitY);
}
Postition是相機的當前位置,LookingAt是相機的目標。
現在我assmbling爲着色器中的最終矩陣和傳遞:
Matrix4 cameraMatrix = camera.GetMatrix();
Matrix4 mvprojectionMatrix = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI/4, 16f/9f, 1f, 30f) * cameraMatrix;
GL.UniformMatrix4(mvprojectionMatrixAttribute, false, ref mvprojectionMatrix);
這是頂點着色器(穿過)
[着色頂點]
#version 150 core
in vec3 pos;
in vec3 color;
uniform float time;
uniform vec3 offset;
uniform mat4 cameraView;
uniform mat4 projection;
out float vTime;
out vec3 vColor;
out mat4 vProjection;
void main() {
gl_Position = vec4(pos, 1.0);
vColor = color;
vTime = time;
vProjection = projection;
}
我將它傳遞給幾何着色器,我使用它們來定位頂點:
void makeVertex(vec3 shift, mat4 rotation)
{
gl_Position = (gl_in[0].gl_Position + vec4(shift, 0.0) * rotation) * vProjection[0];
EmitVertex();
}
旋轉矩陣只是頂點的局部旋轉。 vProjection [0]來自頂點着色器...
不知何故,如果相機移動,東西會快速離開視錐體,但實際視圖不會移動。所以我假設模型視圖矩陣是錯誤的(不從照相機轉換到世界空間)。但我不確定如何創建正確的矩陣。
任何提示?謝謝。
這似乎並不合適。在你的C#代碼中,你建立了一個模型視圖投影矩陣,並用它來設置一個統一的值。但是,然後你的頂點着色器聲明單獨的'cameraView'和'projection'矩陣。哪裏'cameraView'從不使用。你確定這是一組一致的代碼嗎? –
是的,我以前都使用過,現在我只是用C#將它們相乘。所以是的,其中一個是未使用的。 – pixartist