OpenGL三视图

先任意画出一个二维半图形, 然后在三个象限分别画出该图形的正视图、俯视图、侧视图,(提高:在第四象限画出这个二维半图形的轴测图。)

#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<math.h>
#include<Windows.h>
#include <iostream>
#include <cmath>
#include<stdio.h> //X86
#include<GL/glut.h>
#define PI 3.1415926
void Init() {
		//glClearColor(0.3f, 0.3f, 0.3f, 0.0f);  //灰色
		glClearColor(1.0f, 0.97f, 0.86f, 0.0f);
	}
	void Reshape(int w, int h) {     /
		glViewport(0, 0, w, h);
		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
	
		glOrtho(-w / 2, w / 2, -h / 2, h / 2, -800, 800);
		glMatrixMode(GL_MODELVIEW);
		glLoadIdentity();
	}
void XY() {
			glLineWidth(1);
			//glColor3f(0.0, 0.0, 0.0);//坐标轴
			glColor3f(0.0, .0, 0.0);
			glBegin(GL_LINES);
			glVertex2i(-800, 0);
			glVertex2i(800, 0);

			glVertex2i(0, -600);
			glVertex2i(0, 600);
			glEnd();
			glFlush();
}
void XYZ() {
	gluLookAt(1, 1, 1, 0, 0, 0, 0, 1, 0);
	glLineWidth(1);
	//glColor3f(0.0, 0.0, 0.0);//坐标轴
	glColor3f(1.0, 0.97, 0.86);
	glBegin(GL_LINES);
	glVertex3i(-1000, 0, 0);
	glVertex3i(1000, 0, 0);
	glVertex3i(0, -1000, 0);
	glVertex3i(0, 1000, 0);
	glVertex3i(0, 0, -1000);
	glVertex3i(0, 0, 1000);
	glEnd();
	glFlush();
}

	//int x[12] = { 0, 0, 2, 2, 4, 4, 4, 4, 2, 2, 0, 0 };
	//int y[12] = { 0,-1, 0,-1, 0,-1, 0,-1 ,0,-1, 0,-1 };
	//int z[16] = { 0, 0, 0, 0,  2, 2, 3, 3, 5, 5, 5, 5 };
	//int ID[51] =   { 0,1,2,3,4,5,0,6,7,8,9,10,11,6,0,6,1,7,2,8,3,9,4,10,5,11};
	//int flog[51] = { 0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1, 0, 1};

	int x[12] = { 0, 2, 4, 4, 2,  0, 0, 2, 4, 4, 2, 0 };
	int y[12] = { 0, 0, 0, 0, 0,  0,-1,-1,-1,-1,-1,-1 };
	int z[12] = { 0, 0, 2, 3, 5,  5, 0, 0, 2, 3, 5, 5 };
	int ID[26] = {0,1,2,3,4,5,0,6,7,8,9,10,11,6,0,6,1,7,2,8,3,9,4,10,5,11 };
	int flog[26]={0,1,1,1,1,1,1,0,1,1,1, 1,1, 1,0,1,0,1,0,1,0,1,0,1, 0, 1 };

	/*int x[10] = { 0, 100, 100, 40, 0, 0, 100, 100, 40, 0 };
	int y[10] = { 80, 80, 80, 80, 80, 0, 0,0, 0, 0 };
	int z[10] = { 0, 0, 40, 40, 60, 0, 0, 40, 40, 60 };
	int ID[22] = { 0, 1, 2, 3, 4, 0, 5, 6, 7, 8, 9, 5, 0, 5, 1, 6, 2, 7, 3, 8, 4, 9 };
	int flog[22] = {0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1};*/

	void Frontview(int tx, int ty) {
		int j, k;
		glBegin(GL_LINES);

		for (int i = 0; i < 51; i++) {
			j = ID[i];
			k = ID[i + 1];
			if (flog[i + 1] == 1) {
				glVertex3i(-x[j] * 50-tx, z[j] * 50+ty, 0);
				glVertex3i(-x[k] * 50-ty, z[k] * 50+ty, 0);
			}
		}
		glEnd();
		glFlush();

	}
	void Leftview(int tx, int ty) {
		int j, k;
		glBegin(GL_LINES);

		for (int i = 0; i < 51; i++) {
			j = ID[i];
			k = ID[i + 1];
			if (flog[i + 1] == 1) {
				glVertex3i(y[j] * 50 +tx, z[j] * 50 + ty, 0);
				glVertex3i(y[k] * 50+ ty, z[k] * 50 + ty, 0);
			}
		}
		glEnd();
		glFlush();

	}
	void Toptview(int tx, int ty) {
		int j, k;
		glBegin(GL_LINES);

		for (int i = 0; i < 51; i++) {
			j = ID[i];
			k = ID[i + 1];
			if (flog[i + 1] == 1) {
				glVertex3i(-x[j] * 50 - tx,- y[j] * 50 -ty, 0);
				glVertex3i(-x[k] * 50 - ty, -y[k] * 50 - ty, 0);
			}
		}

		glEnd();
		glFlush();
	}

	void allview(int tx, int ty) {
		int j, k;
		glColor3f(1.0, 0.0, 0.0);
		gluLookAt(1, 1, 1, 0, 0, 0, 0, 1, 0);
		glTranslatef(tx, ty, 0);
		glBegin(GL_LINES);
		for (int i = 0; i < 51; i++) {
			j = ID[i];
			k = ID[i + 1];
			if (flog[i + 1] == 1) {
				glVertex3i(x[j]*50, y[j]*50, z[j]*50);
				glVertex3i(x[k]*50, y[k]*50, z[k]*50);

			}
		}
		
		glEnd();
		glFlush();
	}
	void myDisplay() {
		glClear(GL_COLOR_BUFFER_BIT);
			glLoadIdentity();
			//int j, k;
			//glBegin(GL_LINES);
			//for (int i = 0; i < 51; i++) {
			//	j = ID[i];
			//	k = ID[i + 1];
			//	if (flog[i + 1] == 1) {
			//		/*glVertex3i(x[j], y[j], z[j]);
			//		glVertex3i(x[k], y[k], z[k]);*/
			//		glVertex3i(x[j]*50, y[j]*50, z[j]*50);
			//		glVertex3i(x[k]*50, y[k]*50, z[k]*50);

			//	}
			//}
			//glEnd();
			//glFlush();
			Sleep(100);
			allview(300, -100);
			glLoadIdentity();

			XY();
			glLineWidth(2);
			glColor3f(1.0, 0.0, 0.0);

			Frontview(100,100);
			Leftview(100, 100);
			Toptview(100, 100);
			

	}
	int main(int argc, char* argv[])
			{
				glutInit(&argc, argv);
				glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
				glutInitWindowPosition(100, 100);
				glutInitWindowSize(800, 800);
				glutCreateWindow("the forth plus menu");
		
				Init();
				glutReshapeFunc(Reshape);
				glutDisplayFunc(myDisplay);
				//glutMouseFunc(mouse_hit);
				glutMainLoop();
				return 0;
			}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值