先任意画出一个二维半图形, 然后在三个象限分别画出该图形的正视图、俯视图、侧视图,(提高:在第四象限画出这个二维半图形的轴测图。)
#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;
}