opengl学习(三):从3维到2维

本文档介绍了OpenGL中如何进行视点和模型变换,通过模型视点矩阵实现3D到2D的转换。代码示例展示了如何设置视点、模型变换、投影变换和视口变换,以及在窗口大小改变时如何调整视口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/************************************************************************/
/* 在OpenGL中,视点变换和模型变换被当做一种变换来看待。改变视点的位置和改变模型的位置是一个相对的过程,
例如将物体从(0.0, 0.0, 0.0)移至(0.0, 0.0, -1.0)相当于将相机从(0.0, 0.0, 0.0)移至(0.0, 0.0, 1.0)。
视点变换、模型变换将被合并,形成模型视点矩阵。
可以使用函数glMatrixMode(GL_MODELVIEW)来指定当前矩阵模式为模型视点变换。
****************在代码中,视点变换在模型变换之前指定,但投影变换和视口变换可以在绘图之前的任意时候指定。**********************

                                                                     */
/************************************************************************/

 


#include <windows.h>
#include <gl/gl.h>
#include <gl/glaux.h>
#include <gl/glu.h>

#pragma   comment(lib, "openGL32.lib ")
#pragma   comment(lib, "glu32.lib ")
#pragma   comment(lib, "glaux.lib ")

GLvoid MyInit(GLvoid);
GLvoid CALLBACK MyReshape(GLsizei w,GLsizei h);
GLvoid CALLBACK display();

GLvoid MyInit(GLvoid)
{
 glClearColor(0.0,0.0,0.0,0.0);
 glClear(GL_COLOR_BUFFER_BIT);
 glShadeModel(GL_FLAT);
}
/************************************************************************/
/* 显示立方体的回调函数                                                                     */
/************************************************************************/

GLvoid CALLBACK display()
{
 glColor3f(0.0,0.0,1.0);
 glClear(GL_COLOR_BUFFER_BIT);
 glLoadIdentity();//重置矩阵
 glTranslatef(0.0,0.0,-5.0);//设置合适视点
 glScalef(1.0,2.0,1.0);//y轴放大为原来两倍大小
 auxWireCube(1.0);//半径为1的立方体
 glFlush();
}
/************************************************************************/
/* 在窗口大小改变时的回调函数                                                                     */
/************************************************************************/


GLvoid CALLBACK MyReshape(GLsizei w,GLsizei h)
{
 glViewport(0,0,w,h);//设置合适视口
 
 
 glMatrixMode(GL_PROJECTION);//将当前矩阵设置为投影矩阵
 
 glLoadIdentity();

 glFrustum(-1.0,1.0,-1.0,1.0,1.5,20.0);//投影方式为透视投影
 
 glMatrixMode(GL_MODELVIEW);//恢复为模型模式
 

}

 

void main()
{
 auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
 auxInitPosition(0,0,500,500);
 auxInitWindow("test");
 MyInit();
 auxReshapeFunc(MyReshape);
 auxMainLoop(display);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值