看openGl写代码(11) 第一个 三维物体

1.在 写这段 程序 的 一开始 ,图形 没有 出来,因为 在 reShape函数 没写 投影矩阵的 函数;

2.还有 这段程序 我跟踪了 一下,首先  执行 reShape ,然后 才是 disPlay 函数,挺奇怪的。

等待 以后自己解答!如果 有好心的 博友 解答就是 极好的了。


学习了 新的 几个 OPENGL 函数。但是 对于 为什么 图形 会这样, 不明白!!!

void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);
该函数定义一个视图 矩阵,并与当前矩阵相乘。
第一组eyex, eyey,eyez 相机在世界坐标的位置
第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置
第三组upx,upy,upz 相机向上的方向在世界坐标中的方向
你把相机想象成为你自己的脑袋:
第一组数据就是脑袋的位置
第二组数据就是眼睛看的物体的位置
第三组就是头顶朝向的方向(因为你可以歪着头看同一个物体)


void gluPerspective(
GLdouble fovy, //角度
GLdouble aspect,//视景体的宽高比
GLdouble zNear,//沿z轴方向的两裁面之间的距离的近处
GLdouble zFar //沿z轴方向的两裁面之间的距离的远处
)


glFrustum : 设置透视矩阵,并与当前矩阵相乘;

left,right指明相对于垂直平面的左右坐标位置
bottom,top指明相对于水平剪切面的下上位置
nearVal,farVal指明相对于深度剪切面的远近的距离,两个必须为正数

// cube.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <gl/glut.h>

void init(){
	glClearColor(0,0,0,0);
	//glEnable(GL_DEPTH_TEST);
}

void display(){
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1,1,1);
	glLoadIdentity();
	gluLookAt(0.0,0.0,10,  0.0,0.0,0.0,  0.0,-1.0,0.0);
	//glTranslatef(0,0,-5);
	//glScalef(1,2,1);
	glutWireCube(4.0);
	//glutSwapBuffers();
	glFlush();
}

void reShape(int width,int height){
	glViewport(0,0,width,height);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glFrustum(-1,1,-1, 1,1.5,20);
	//gluPerspective(50,1,10,20);
	glMatrixMode(GL_MODELVIEW);
}


int _tmain(int argc, _TCHAR* argv[])
{
	glutInit(&argc,(char**)argv);
	glutInitDisplayMode(GLUT_SINGLE); 
	glutInitWindowSize(500,500);
	glutInitWindowPosition(100,100);
	glutCreateWindow("我的第一个三维物体!");
	init();
	glutDisplayFunc(display);
	glutReshapeFunc(reShape);
	glutMainLoop();
	return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值