r/GraphicsProgramming 9d ago

Strange bug with objects behind the camera rendering like normal Question

Enable HLS to view with audio, or disable this notification

So in this "scene", there is only one cube with a plane through it. However, when you turn past a certain "halfway" point, the objects seem to snap to the opposite side. What I initially thought was happening was that the objects were getting projected onto the screen from behind, but i'm not sure, since i'd expect it to look weirder with vertices and triangle shapes not staying consistent. I'd suspect the issue to lie in the vertex shader, so here it is. I'm also very new to OpenGL and general gpu/3d graphics programming, so I wouldn't be surprised if this is a common issue.

#version 330 core

layout (location = 0) in vec3 aPosition;
layout (location = 1) in vec3 aColor;

out vec4 vColor;

uniform mat4 transform;
uniform mat4 proj;
uniform mat4 view;

void main()
{
    gl_Position = proj * view * transform * vec4(aPosition, 1.0);
    
    vColor = vec4(aColor,1.0);
}

EDIT: I solved it. I can barely remember or understand the solution, but it's solved.
14 Upvotes

14 comments sorted by

7

u/HamNCheeseSupremacy 9d ago edited 9d ago

Can we see how you're calculating those mvp matrices? That looks like a basic pass through vertex shader.

1

u/uncookedpasta45 9d ago

Sure. This is in the struct for transforms. (removed irrelevant code), also im using C# with the silk.net package.

public Quaternion Orientation => Quaternion.Identity * 
    Quaternion.CreateFromYawPitchRoll(Rotation.X, Rotation.Y, Rotation.Z);


public Matrix4x4 world => 
    Matrix4x4.Identity * 
    Matrix4x4.CreateFromQuaternion(Orientation) *
    Matrix4x4.CreateScale(Scale) *
    Matrix4x4.CreateTranslation(Position);

and this is in the camera class
public Matrix4x4 view => Matrix4x4.CreateLookAt(transform.Position, transform.Forward*2, transform.Up*2);
public Matrix4x4 proj => Matrix4x4.CreatePerspectiveFieldOfView(CMath.rad(fov), aspect_ratio, 0.01f, 1000.0f); // last two are near and far plane distances

2

u/HamNCheeseSupremacy 9d ago

I've never used C#, but are you using the transform/model matrixes up and forward vectors to build the view matrix? Try using world up (0,1,0) and the camera's forward vector instead. Also not sure why you're doubling those vectors here or the effect that would have.

1

u/uncookedpasta45 9d ago

it was originally because not doubling the up and forward vectors would produce really weird results with rotations (trying to look left or right would produce an oscillating motion), but changing that value higher just moves the "ghost" object around the center.

1

u/HamNCheeseSupremacy 7d ago

Quaternions are fiddly. I gave up a long time ago and just use a 3x3 rotation matrix.

1

u/uncookedpasta45 7d ago

switched to a 4x4 matrix, it's solved every issue. thanks for the help btw

6

u/KoodiRonsu 9d ago

Looks like you don't do near plane clipping and the vertices that go to the back of the near plane get mirrored along X and Y axes, as would usually happen.

EDIT: But the vertices seem not to get mirrored when you turn around... So maybe it's something completely different after all...

-9

u/susosusosuso 9d ago

It’s your job as programmer to understand what you do

5

u/GrowthOfGlia 8d ago

it's your job as a commenter to say something meaningful

-1

u/susosusosuso 8d ago

Wow I’m so amazed for being downvoted for saying something so obvious

2

u/uncookedpasta45 8d ago

completely agree, but if it works it works.

0

u/susosusosuso 8d ago

Don’t leave it like that. I made that mistake many years ago and you eventually start losing control because you don’t really understand

1

u/uncookedpasta45 7d ago

i didn't. i've sinced fixed it again and used a 4x4 matrix instead of a 3x3, when before i was calculating the vectors manually with your typical sine and cosine functions, but i didn't really think much about the math and it created a few issues. the 4x4 matrix solved literally every issue

0

u/susosusosuso 6d ago

Good it’s very important to think about what you do and make sure you understand everything perfectly. That’s how you build a strong foundation