OpenGL/SharpGL 中的简单转换代码(没有矩阵理论课程)
Simple code for transformation in OpenGL/SharpGL (without matrix theory lessons)
我有一个 OpenGL .NET WPF (SharpGL) 应用程序,它在即时模式下绘制小方块,它们是真正的 3D:
float z = -200f;
float farz = 400f;
...
// init
gl.ShadeModel(OpenGL.GL_SMOOTH);
gl.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.ClearDepth(1.0f);
gl.Disable(OpenGL.GL_DEPTH_TEST);
gl.Enable(OpenGL.GL_BLEND);
gl.BlendFunc(OpenGL.GL_SRC_ALPHA, OpenGL.GL_ONE);
gl.Hint(OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, OpenGL.GL_NICEST);
gl.Hint(OpenGL.GL_POINT_SMOOTH_HINT, OpenGL.GL_NICEST);
// resize
gl.MatrixMode(OpenGL.GL_PROJECTION);
gl.LoadIdentity();
gl.Perspective(45.0, ratio, 0.1, farz);
gl.MatrixMode(OpenGL.GL_MODELVIEW);
gl.LoadIdentity();
// draw
gl.Begin(OpenGL.GL_TRIANGLE_STRIP);
gl.TexCoord(1, 1); gl.Vertex(x + 0.5f, y + 0.5f, z);
gl.TexCoord(0, 1); gl.Vertex(x - 0.5f, y + 0.5f, z);
gl.TexCoord(1, 0); gl.Vertex(x + 0.5f, y - 0.5f, z);
gl.TexCoord(0, 0); gl.Vertex(x - 0.5f, y - 0.5f, z);
gl.End();
我有“缩放”和平移按钮。
缩放目前在 0 到 -400 之间改变 z
+/- 10,这已经足够了。
我尝试使用 LookAt 实现平移,但我无法使其工作。我确实把它放在 resize
方法中 - 这是它的正确位置吗?
是否可以使用 单行代码将 eye
移动 +/- 5 left/right/up/down 而无需忍受矩阵理论课程?非常感谢。
使用gl.Translate
平移模型视图矩阵。例如:
gl.MatrixMode(OpenGL.GL_MODELVIEW);
gl.LoadIdentity();
gl.Translate(-5, 0, 0)
我有一个 OpenGL .NET WPF (SharpGL) 应用程序,它在即时模式下绘制小方块,它们是真正的 3D:
float z = -200f;
float farz = 400f;
...
// init
gl.ShadeModel(OpenGL.GL_SMOOTH);
gl.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.ClearDepth(1.0f);
gl.Disable(OpenGL.GL_DEPTH_TEST);
gl.Enable(OpenGL.GL_BLEND);
gl.BlendFunc(OpenGL.GL_SRC_ALPHA, OpenGL.GL_ONE);
gl.Hint(OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, OpenGL.GL_NICEST);
gl.Hint(OpenGL.GL_POINT_SMOOTH_HINT, OpenGL.GL_NICEST);
// resize
gl.MatrixMode(OpenGL.GL_PROJECTION);
gl.LoadIdentity();
gl.Perspective(45.0, ratio, 0.1, farz);
gl.MatrixMode(OpenGL.GL_MODELVIEW);
gl.LoadIdentity();
// draw
gl.Begin(OpenGL.GL_TRIANGLE_STRIP);
gl.TexCoord(1, 1); gl.Vertex(x + 0.5f, y + 0.5f, z);
gl.TexCoord(0, 1); gl.Vertex(x - 0.5f, y + 0.5f, z);
gl.TexCoord(1, 0); gl.Vertex(x + 0.5f, y - 0.5f, z);
gl.TexCoord(0, 0); gl.Vertex(x - 0.5f, y - 0.5f, z);
gl.End();
我有“缩放”和平移按钮。
缩放目前在 0 到 -400 之间改变 z
+/- 10,这已经足够了。
我尝试使用 LookAt 实现平移,但我无法使其工作。我确实把它放在 resize
方法中 - 这是它的正确位置吗?
是否可以使用 单行代码将 eye
移动 +/- 5 left/right/up/down 而无需忍受矩阵理论课程?非常感谢。
使用gl.Translate
平移模型视图矩阵。例如:
gl.MatrixMode(OpenGL.GL_MODELVIEW);
gl.LoadIdentity();
gl.Translate(-5, 0, 0)