从本节开始,我们使用SharpGL带的VS2010扩展,来直接生成SharpGL工程。如果你新建项目时,没有看到下面的SharpGL项目,那么请事先在SharpGL源代码中找到一个叫 ”SharpGL 2.0 Visual Studio Extension&a ...
从本节开始,我们使用SharpGL带的VS2010扩展,来直接生成SharpGL工程。
如果你新建项目时,没有看到下面的SharpGL项目,那么请事先在SharpGL源代码中找到一个叫 ”SharpGL 2.0 Visual Studio Extension“目录 ,安装名为 SharpGL.vsix的vs2010扩展, 然后重启你的vs2010.
利用上面的SharpGL项目,直接生成一个完整的SharpGL工程,它带有Opengl窗体控件,基本代码已经都完成了, 你只需要修改3D绘图部分的代码就可以了。
生成的工程是还可以直接跑起来看到效果, 如下图所示。
我们会看到了有个三棱体已经画好了,并且还正在旋转,下面还动态显示了渲染的帧数。
我们在前二篇写的代码生成的三角形像是2D的,现在如上图这样的效果,就感觉很有立体感觉了。其实,两者不一样的只是因为这个工程默认已经进行了投影变换和视点变换。
当三维体放在世界坐标系中后,由于显示器只能用二维图像显示三维休,因此必须要依赖投影来把三维体降低维数。
投影变换的目的就是定义了一个视景体,使得视景体外多余的部分不会显示。
投影包括透视投影(perspective projection)和正视投影(orthographic projection)两种。
上图就是透视投影的效果,它符合人的观察经验,即离视点近的物体大,离视点远的物体小,远到极点就消失,成为灭点。就像笔直马路的尽头看上去就成为一个点。
我们看一下代码中有关投影部分的代码, 解释一下相关功能函数的参数意义。
1 private void openGLControl_Resized(object sender, EventArgs e) 2 { 3 // TODO: Set the projection matrix here. 4 OpenGL gl = openGLControl.OpenGL; 5 gl.MatrixMode(OpenGL.GL_PROJECTION); 6 gl.LoadIdentity(); 7 8 gl.Perspective(20.0f, (double)Width / (double)Height, 0.01, 100.0); 9 gl.LookAt(-5, 5, -5, 0, 0, 0, 0, 1, 0);10 11 gl.MatrixMode(OpenGL.GL_MODELVIEW);12 }
原标题:SharpGL学习笔记(三) 投影变换和视点变换
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。