Я пытаюсь создать матрицу проекции модели для своего шейдера следующим образом:
Я получаю матрицу для перевода камеры:
public Matrix4 GetMatrix()
{
return Matrix4.LookAt(Position, LookingAt, Vector3.UnitY);
}
Postition — текущая позиция камеры, LookingAt — цель камеры.
Теперь я собираю финальную матрицу для шейдера и передаю ее:
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] исходит из вершинного шейдера...
Каким-то образом, если камера перемещается, вещи быстро покидают область видимости, но сам вид не перемещается. Поэтому я предполагаю, что матрица просмотра модели неверна (не переводится из камеры в мировое пространство). Но я не уверен, как создать правильную матрицу.
Какие-нибудь советы ? Спасибо.
cameraView
иprojection
. ГдеcameraView
никогда не используется. Вы уверены, что это последовательный набор кода? - person Reto Koradi   schedule 02.07.2014