opengl学习一
来源:互联网 发布:淘宝店铺购买的服务费 编辑:程序博客网 时间:2024/04/30 15:13
opengl红宝书买了一年了,一直想好好学学,总是感觉没时间,决定最近抽时间高下。
//// main.c// TestSwap//// Created by 磊 王 on 12-10-18.// Copyright (c) 2012年. All rights reserved.//#include <stdio.h>#include <stdlib.h>#include <GLUT/glut.h>static GLfloat spin = 0.0;void init(void){ // 设置清除窗口颜色为黑色 glClearColor(0.0, 0.0, 0.0, 0.0); // 恒定着色模式 glShadeModel(GL_FLAT);}void display(void){ // 清除窗口 glClear(GL_COLOR_BUFFER_BIT); // 保存当前矩阵 glPushMatrix(); // 旋转函数,spin是旋转角度,后面三位参数是旋转向量,右手法则确定方向 glRotatef(spin, 0.0, 0.0, 1.0); // 颜色 glColor3f(1.0, 0.0, 0.0); // 绘制矩形 glRectf(-25.0, -25.0, 25.0, 25.0); // 恢复矩阵 glPopMatrix(); // 交换缓冲区 glutSwapBuffers();}void spinDisplay(void){ spin = spin + .1; if (spin > 360.0) { spin -= 360.0; } // 通知glutMainLoop重绘 glutPostRedisplay();}void reshape(int w, int h){ // 设置视口 glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) { glOrtho(-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w, 50.0*(GLfloat)h/(GLfloat)w, 0.1, -1.0); }else { glOrtho(-50.0*(GLfloat)w/(GLfloat)h, 50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, 0.1, -1.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity();}void mouse(int button, int state, int x, int y){ switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) { glutIdleFunc(spinDisplay); } break; case GLUT_RIGHT_BUTTON: if (state == GLUT_DOWN) { glutIdleFunc(NULL); } break; default: break; }}int main(int argc, const char * argv[]){ // 初始化GLUT,处理命令行参数 glutInit(&argc, argv); // 显示模式 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); // 窗口大小 glutInitWindowSize(250, 250); // 创建名为animation的窗口 glutCreateWindow("animation"); init(); // 注册显示回调函数 glutDisplayFunc(display); // 注册重绘函数,当窗口大小内容发生变化时回调包括窗口刚创建时 glutReshapeFunc(reshape); // 注册鼠标事件处理函数 glutMouseFunc(mouse); glutMainLoop(); return 0;}
前面四个参数没什么说的,就是一个矩形大小,确定视景大小的,最后的near和far比较有意思。
我通过改动这两个参数发现,同为正和同为负都看不到图形,一正一负可以看见一个正方形。由于我画的是一个xy平面的正方形,Z坐标为0,在Z轴上没有深度。
一正一负的参数说明所画正方形在视景体内部,同为正和同位负时则在视景体外部,此时就看不到所画的物体。
我的理解是near和far就是确定视口位置和视口方向及视景体深度,比如near和far分别为 1,-1,那么视口在Z轴的1位置,向屏幕里面方向,视景体深度为2,所画物体在视景体内部则能被看到,否则看不到。
知之为知之,不知谷歌之
- OpenGL学习一:OpenGL简介
- 学习OpenGL总结一
- OpenGL学习笔记(一)
- OpenGL入门学习[一]
- Opengl 入门学习一
- OpenGL入门学习(一)
- OpenGL学习(一)
- opengl学习(一)
- opengl学习一
- OpenGL学习笔记(一)
- OpenGL 学习笔记一
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- OpenGL 学习笔记一
- OpenGL入门学习[一]
- Opengl学习笔记一
- OpenGL学习一
- OpenGL学习笔记(一)
- Android消息推送机制
- linux嵌入式相关网站
- Failed to create virtual machine
- glPolygonStipple 点画多边形——画自己的姓
- iOS 6版本与之前版本差异总结
- opengl学习一
- 为什么strcpy的返回值是char* ?
- hdu 2059 龟兔赛跑
- keil优化等级设置
- Linux core 文件介绍
- windows USB读卡器驱动详解
- mov指令的操作数的取值范围到底是多少
- NSNotificationCenter
- Codeforces Round #145 (Div. 2, ACM-ICPC Rules) Fence