[TOC]
线框球体
主要计算圆的半径的变化。
1 |
|
线框锥体
void Draw_Line_Cylinder(int n=5, double r=0.5, double h=1, int layer = 10){
glPushMatrix();
for(int i=0; i<n; i++){ // 棱
glBegin(GL_LINES);
glVertex3f(0, 0, h);
glVertex3f(r*cos(2*i*PI/n), r*sin(2*i*PI/n), 0);
glEnd();
}
for(double i=0; i<h; i+=h/layer){ // 多边形框
double new_r = r*(h-i)/h;
Draw_Circle(n, new_r, i);
}
glPopMatrix();
}
扇形
计算出弧线的各点后,用 GL_Triang_FAN 画即可,用三角形逼近,也可以画凹的。
1 |
|
实现鼠标控制旋转
1 |
|
画半圆柱面
类似画圆,在画圆的基础上增加了z轴坐标的变化。圆由直线段逼近,圆柱面自然由矩形逼近。
1 |
|
画坐标轴做参考系
1 |
|
文字
1 |
|
球面
以下是半圆面的绘制,绘制整个球面可以做一个对称变换即可。绘制出来的效果可能不理想,可能需要设置参数每次的变化量。而且每个小四边形的法向量并没有精确计算,粗略的取了四边形顶点中的某个点到原点方向作为法向量。
具体思想:
- 和绘制圆形类似,圆形是每次将本次旋转角度得到的点和上一旋转角度得到的点相连,而绘制球面不仅要考虑相邻旋转角度,还要算出高度不同的相邻圆弧的半径和对应的旋转角度,这样就可以得到四个点,构成一个四面形,不断用四边形逼近球面。
- 和绘制线框球体类似,先计算各个高度的圆弧对应的半径,也就是对应剖面上的一条弦,用勾股定理就行。
- 确定好两个相邻高度的圆弧半径后,再考虑相邻的两个旋转角度,确定四个点,画四边形。
1 |
|