#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "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( )
glRotatef( spin, 0.0, 0.0, 1.0 )
glColor3f( 1.0, 1.0, 1.0 )
glRectf( -25.0, -25.0, 25.0, 25.0 )
glPopMatrix( )
glutSwapBuffers( )
}
void spinDisplay( void )
{
spin = spin + 2.0
if ( spin >360.0 )
spin = spin - 360.0
glutPostRedisplay( )
}
void reshape( int w, int h )
{
glViewport( 0, 0, (GLsizei)w, (GLsizei)h )
glMatrixMode( GL_PROJECTION )
glLoadIdentity( )
//void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far)
glOrtho( -50.0, 50.0, -50.0, 50.0, -1.0, 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_MIDDLE_BUTTON:
if ( state == GLUT_DOWN )
glutIdleFunc( 0 )
break
default:
break
}
}
void keyboard( unsigned char key, int x, int y )
{
switch (key)
{
case 'a':
glutIdleFunc( spinDisplay )
break
case 's':
glutIdleFunc( 0 )
break
}
}
int main( int argc, char** argv )
{
glutInit( &argc, argv )
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB )
glutInitWindowSize( 250, 250 )
glutInitWindowPosition( 100, 100 )
glutCreateWindow( argv [0] )
init( )
glutDisplayFunc( display )
glutReshapeFunc( reshape )
glutMouseFunc( mouse )
glutKeyboardFunc( keyboard )
glutMainLoop( )
return 0
}
跟开发小哥哥要了张层次图,两者的最大区别一目了然!
相比Unity,OpenGL是更为底层的一项技术,这个如何解释呢?OpenGL其实就是webGL的前身,它提供的是几何概念,比如点、线、面,相当于画家脑海中的各种素材,只有经过一双妙手,才能画出一张图像,所以相比较而言,用Unity 3D渲染器的人更多一些,因为Unity提供了更为顶层的3D概念,包括空间变换、材质、环境球等,更容易运用理解。
我们都知道纯辩,Unity 3D主要专注于游戏开发、影视动画,底层是c++语言,主要做慎缺需要安装客户端孝高才能使用,openGL采用前端语言(Unity也有一部分JS代码),所以可以直接在浏览器页面进行可视化开发!
更为顶层的three.js和ThingJS都是基于webGL的3D框架,所以可视化开发成为一种巨大的优势(不过Unity的客户端渲染性能一样好),尤其是ThingJS支持在线开发,扩展了开发自由度。
总而言之,一张图说明一切,Unity是一种渲染引擎,可以提供一系列3D开发概念帮助你快速制作影视项目,OpenGL属于渲染接口层,并不具备任何概念,需要自己组建图形,对于初学者不是特别友好,也没有特定的领域覆盖,更适合技术探索者,而不是项目开发者!
如果你是在使用Win32编程,去查一下Win32获取用户键拆首盘
鼠标
事件的耐轿
函数
,就能获取用户输入了什么了。如果是QT下,QT也有
鼠标键盘
事件获取函数。有了这些,就能交互了,你根据用户的旅亩数 *** 作,如点击左、
右键
,做出响应即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)