3wei.zip

  • riley_twt
    了解作者
  • C/C++
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2019-04-17 21:26
    上传日期
用OpenGL画的栅栏化地面,将就着看吧,初学者还有很多不足
3wei.zip
  • 3wei.cpp
    3.4KB
内容介绍
#include <gl/glut.h> #include<math.h> bool mouseLeftDown; bool mouseRightDown; bool mouseMiddleDown; float mouseX, mouseY; float cameraDistanceX; float cameraDistanceY; float cameraAngleX; float cameraAngleY; float times=1; float AngleX,AngleY; float cameraAngleX,cameraAngleY; float moveStep = 10.0f; //移动步长 float cameralook_x=0,cameralook_y =0,cameralook_z =-1 ; float g_eye[3]; float g_look[3]; void init(){ g_eye[0] = 0.0f; g_eye[1] = 100.0f; g_eye[2] = 100.0f; g_look [0] = g_eye[0] + cameralook_x*sin(cameraAngleY); g_look [1] = g_eye[1] + cameralook_y; g_look [2] = g_eye[2] + cameralook_z*cos(cameraAngleY); cameraAngleX=0; cameraAngleY=0; } void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glRotatef(cameraAngleX,1,0,0); glRotatef(cameraAngleY,0,1,0); //地面间隔距离为50,大小为600*600 glColor3f(0.9f, 0.9f, 0.9f); //地面线条颜色 //1.纵向竖线按X轴方向横向绘制 for (float i = -600.0; i < 600.0f; i += 50.0f) { glBegin(GL_LINES); glVertex3f(i, 0.0f, -600.0f); glVertex3f(i, 0.0f, 600.0f); glEnd(); } //2.横向竖线按Z轴方向纵向绘制 for (float j = -600.0; j < 600.0f; j += 50.0f) { glBegin(GL_LINES); glVertex3f(-600.0f, 0.0f,j ); glVertex3f(600.0f, 0.0f ,j); glEnd(); } glPushMatrix(); glColor3f(1,0.5,0.5); glScalef(40, 20, 80); glutSolidCube(5); glutWireCube(5); glColor3f(0,0,0); glPopMatrix(); glutSwapBuffers(); } void MoveFlat(int direction_x,int direction_y,int direction_z) { g_eye[0] = g_eye[0] + direction_x * moveStep; g_eye[1] = g_eye[1] + direction_y * moveStep; g_eye[2] = g_eye[2] + direction_z * moveStep; g_look [0] = g_eye[0] + cameralook_x*sin(cameraAngleY); g_look [1] = g_eye[1] + cameralook_y; g_look [2] = g_eye[2] + cameralook_z*cos(cameraAngleY); glLoadIdentity(); gluLookAt(g_eye[0], g_eye[1], g_eye[2], g_look[0],g_look[1],g_look[2], 0.0f, 0.1f, 0.0f); glutPostRedisplay(); } //鼠标控制视角转换 void mouseMove( int button, int state,int x,int y){ cameraAngleY=cameraAngleX=0; if(mouseLeftDown){ cameraAngleY+=(x-mouseX)*0.1f; cameraAngleX+=(y-mouseY)*0.1f; mouseX = x; mouseY = y; } gluPostRedisplay(); } void ReSizeScene(int w, int h) { GLfloat aspect = (GLfloat)w / (GLfloat)h; glViewport(1,0,w,h); glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影模式 glLoadIdentity(); gluPerspective(45,aspect,1,1000); gluLookAt(g_eye[0], g_eye[1], g_eye[2], g_look[0],g_look[1],g_look[2], 0.0f, 0.1f, 0.0f); } /*void init() { AngleX = 45.0f; AngleY = 315.0f; glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnable(GL_DEPTH_TEST);//开启深度测试 glDepthFunc (GL_LESS); //深度比较模式设置 // glPolygonMode(GL_FRONT, GL_FILL); //填充模式绘制多边形 glPolygonMode(GL_FRONT, GL_LINE); //线框模式绘制多边形 glEnable(GL_CULL_FACE); //启动剔除功能 glCullFace(GL_BACK);//剔除背面 } */ void main(int argc,char* argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(480,480); glutCreateWindow("网格地面加立方体"); glutInitWindowPosition(100, 100); glutReshapeFunc(&ReSizeScene); glutDisplayFunc(&myDisplay); glutMouseFunc(&mouseMove); glutKeyboardFunc(&Proce); init(); glutMainLoop(); }
评论
    相关推荐
    • OpenGL开发库
      OpenGL开发库,包括dll、lib和头文件
    • OpenGL绘制雪人
      使用标准OpenGL,通过C++编程绘制雪人,可以进行旋转等操作。
    • opengl着色器
      资源基于linux下opengl开发,着色器的使用。
    • opengl 绘制三角形
      资源基于Linux下的opengl开发,在窗口中绘制三角形。
    • opengl 输出点测试
      资源基于Linux下的opengl开发,在窗口中绘制简单的点。
    • opengl Manual
      OpenGL 实用库(OpenGL Utility Library,GLU)和对X窗口系统的OpenGL扩展(OpenGL Extension to the X Window System,GLX)为OpenGL提供了有用的支持特性和完整的OpenGL核心函数集。本书详细介绍了这些函数的功能...
    • opengl-test.rar
      opengl-test.rar、opengl-test.rar、opengl-test.rar、
    • OpenGL教程
      OpenGL基础图形编程    目 录  1.1 OpenGL使人们进入三维图形世界  1.2 OpenGL提供直观的三维图形开发环境  1.3 OpenGL成为目前三维图形开发标准 -------------------------------------------------------...
    • OpenGL ES
      OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和...
    • opengl.zip
      计算机图形学画三角形和对三角形按照要求进行裁剪