Faculty of Computer Science and Engineering
Department of Computer Science
Bài tập 2
1/
a)
// left top
setViewport(0, 320, 320, 640);
setCamera(0, 1, 0, 1);
drawFigure();
// left bottom
setViewport(0, 320, 0, 320);
setCamera(1, 0, 0, 1);
drawFigure();
// right bottom
setViewport(320, 640, 0, 320);
setCamera(0, 1, 0, 1);
drawFigure();
// right top
setViewport(320, 640, 320, 640);
setCamera(1, 0, 0, 1);
drawFigure();
b)
// left top
setViewport(0, 320, 320, 640);
setCamera(0, 1, 0, 1);
drawFigure();
// left bottom
setViewport(0, 320, 0, 320);
setCamera(1, 0, 0, 1);
drawFigure();
// right bottom
setViewport(320, 640, 0, 320);
setCamera(0, 1, 0, 1);
drawFigure();
Faculty of Computer Science and Engineering
Department of Computer Science
// right top
setViewport(320, 640, 320, 640);
setCamera(1, 0, 0, 1);
drawFigure();
// left top
setViewport(160, 320, 320, 480);
setCamera(0, 1, 0, 1);
drawFigure();
// left bottom
setViewport(160, 320, 160, 320);
setCamera(1, 0, 0, 1);
drawFigure();
// right bottom
setViewport(320, 480, 160, 320);
setCamera(0, 1, 0, 1);
drawFigure();
// right top
setViewport(320, 480, 320, 480);
setCamera(1, 0, 0, 1);
drawFigure();
c)
// left top
setViewport(0, 320, 320, 640);
setCamera(0, 1, 0, 1);
drawFigure();
setViewport(0, 320, 320, 640);
setCamera(1, 0, 0, 1);
drawFigure();
// left bottom
setViewport(0, 320, 0, 320);
setCamera(1, 0, 0, 1);
Faculty of Computer Science and Engineering
Department of Computer Science
drawFigure();
setViewport(0, 320, 0, 320);
setCamera(0, 1, 0, 1);
drawFigure();
// right bottom
setViewport(320, 640, 0, 320);
setCamera(0, 1, 0, 1);
drawFigure();
setViewport(320, 640, 0, 320);
setCamera(1, 0, 0, 1);
drawFigure();
// right top
setViewport(320, 640, 320, 640);
setCamera(1, 0, 0, 1);
drawFigure();
setViewport(320, 640, 320, 640);
setCamera(0, 1, 0, 1);
drawFigure();
// left top
setViewport(160, 320, 320, 480);
setCamera(0, 1, 0, 1);
drawFigure();
// left bottom
setViewport(160, 320, 160, 320);
setCamera(1, 0, 0, 1);
drawFigure();
// right bottom
setViewport(320, 480, 160, 320);
setCamera(0, 1, 0, 1);
drawFigure();
// right top
setViewport(320, 480, 320, 480);
Faculty of Computer Science and Engineering
Department of Computer Science
setCamera(1, 0, 0, 1);
drawFigure();
2/
void drawPlatonic( ){
GLfloat t = 0.618;
GLfloat v0[3] = {0,1,t};
GLfloat v1[3] = {0,1,-t};
GLfloat v2[3] = {1,t,0};
GLfloat v3[3] = {1,-t,0};
GLfloat v4[3] = {0,-1,-t};
GLfloat v5[3] = {0,-1,t};
GLfloat v6[3] = {t,0,1};
GLfloat v7[3] = {-t,0,1};
GLfloat v8[3] = {t,0,-1};
GLfloat v9[3] = {-t,0,-1};
GLfloat v10[3] = {-1,t,0};
GLfloat v11[3] = {-1,-t,0};
glBegin(GL_TRIANGLE_FAN);
glVertex3fv(v0);
glVertex3fv(v1);
glVertex3fv(v2);
glVertex3fv(v6);
glVertex3fv(v7);
glVertex3fv(v10);
glVertex3fv(v1);
glEnd( );
glBegin(GL_TRIANGLE_FAN);
glVertex3fv(v4);
glVertex3fv(v8);
glVertex3fv(v3);
glVertex3fv(v5);
glVertex3fv(v11);
glVertex3fv(v9);
glVertex3fv(v8);
glEnd( );
glBegin(GL_TRIANGLE_STRIP);
glVertex3fv(v1);
Faculty of Computer Science and Engineering
Department of Computer Science
glVertex3fv(v8);
glVertex3fv(v2);
glVertex3fv(v3);
glVertex3fv(v6);
glVertex3fv(v5);
glVertex3fv(v7);
glVertex3fv(v11);
glVertex3fv(v10);
glVertex3fv(v9);
glVertex3fv(v1);
glVertex3fv(v8);
glEnd( );
}
3/
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#include <GL/glut.h>
#define M_PI 3.1415926
int nSlice, nStack;
float deltaPhi, deltaTheta;
void display(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
float c = M_PI/180.0;
float phir, phir20, thetar;
float x, y, z;
for(float phi = -90+deltaPhi; phi<90 - deltaPhi; phi+=deltaPhi){
phir = c*phi;
phir20 = c*(phi+deltaPhi);
glBegin(GL_QUAD_STRIP);
for(float theta = -180; theta<=180; theta+=deltaTheta){
thetar = c*theta;
x = sin(thetar)*cos(phir);
z = cos(thetar)*cos(phir);
y = sin(phir);
glVertex3d(x, y, z);
Faculty of Computer Science and Engineering
Department of Computer Science
x = sin(thetar)*cos(phir20);
z = cos(thetar)*cos(phir20);
y = sin(phir20);
glVertex3d(x, y, z);
}
glEnd();
}
float c80;
glBegin(GL_TRIANGLE_FAN);
glVertex3d(0, 1, 0);
c80 = c*(90-deltaPhi);
y = sin(c80);
for(float theta = 180; theta>=-180; theta-=deltaTheta){
thetar = c*theta;
x = sin(thetar)*cos(c80);
z = cos(thetar)*cos(c80);
glVertex3d(x, y, z);
}
glEnd();
glBegin(GL_TRIANGLE_FAN);
glVertex3d(0, -1, 0);
c80 = c*(90-deltaPhi);
y = -sin(c80);
for(theta = -180; theta<=180; theta+=deltaTheta){
thetar = c*theta;
x = sin(thetar)*cos(c80);
z = cos(thetar)*cos(c80);
glVertex3d(x, y, z);
}
glEnd();
glFlush();
}
void myinit(){
glClearColor (1.0, 1.0, 1.0, 1.0);
glColor3f (0.0, 0.0, 0.0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glFrontFace(GL_CW);
glEnable(GL_CULL_FACE);
}
void main(int argc, char **argv){
Faculty of Computer Science and Engineering
Department of Computer Science
cout << "Input number of Stack: ";
cin >> nStack;
cout << "Input number of Slice: ";
cin >> nSlice;
deltaPhi = 180.0/nStack;
deltaTheta = 360.0/nSlice;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutCreateWindow("sphere");
myinit();
glutDisplayFunc(display);
glutMainLoop();
}
4/
/*
* nSlice: số lượng các tam giác tạo ra 2 mặt đáy hình tròn
* r : bán kính hình tròn đáy
* height: chiều cao hình trụ
* */
void DrawCylinder(int nSlice,GLfloat r,GLfloat height){
GLfloat a = PI*2/nSlice;
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0,0,0);
for(int i = 0;i < nSlice;i++){
glVertex3f(r*cos(i*a),0,r*sin(i*a));
glVertex3f(r*cos((i+1)*a),0,r*sin((i+1)*a));
}
glEnd( );
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0,height,0);
for(int i = 0;i < nSlice;i++){
glVertex3f(r*cos(i*a),height,r*sin(i*a));
glVertex3f(r*cos((i+1)*a),height,r*sin((i+1)*a));
}
glEnd( );
Faculty of Computer Science and Engineering
Department of Computer Science
glBegin(GL_QUAD_STRIP);
for(int i = 0;i < nSlice;i++){
glVertex3f(r*cos(i*a),0,r*sin(i*a));
glVertex3f(r*cos(i*a),height,r*sin(i*a));
}
glEnd( );
}