罗马花椰菜与螺纹点阵, 费氏数列与黄金分割

Computer Graphics, Animaition, OpenGL, DirectX, OpenCL
回复
头像
paktc
出类拔萃
出类拔萃
帖子: 65
注册时间: 2016年07月21日 20:34
联系:

Re: 罗马花椰菜与螺纹点阵, 费氏数列与黄金分割

帖子 paktc »

基于GL固定渲染管线的C代码
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
#include <time.h>
#include <math.h>

int winid;
const double PI = M_PI;
const double PI2 = M_PI * 2;

void display(void)
{
float i,x,y;
float points = 300.0;
const double turn = PI2 * (137.5/360.0);


glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.3, 0.7, 0.6);

glBegin(GL_POINTS);
for (i = 0.0; i < points; i += 1.0)
{
x=sqrt(points-i)*cos(i*turn);
y=sqrt(points-i)*sin(i*turn);
glVertex3f(x,y,0.0);
}
glEnd();
glutSwapBuffers();
}

void idle(void)
{
usleep(10000);
glutPostRedisplay();
}

void reshape(int Width,int Height)
{
float fa = 100.0;
glViewport(0,0,500,500);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-20.0,20.0,-20.0,20.0,0.0,200.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,fa, 0.0,0.0,0.0, 0.0,1.0,fa);
}

void init(void)
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glLineWidth(3.0);
glPointSize(16.0);
}

void keypress(unsigned char key,int mousex,int mousey)
{
switch (key) {
case 'q':
glutDestroyWindow(winid);
exit(0);
break;
}
}

int main(int argc,char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_MULTISAMPLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
winid=glutCreateWindow("Fib");
init();
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutIdleFunc(idle);
glutKeyboardFunc(keypress);
glutMainLoop();
return 0;
}
Program.png
(44.95 KiB) 已下载 974 次
头像
paktc
出类拔萃
出类拔萃
帖子: 65
注册时间: 2016年07月21日 20:34
联系:

扩展

帖子 paktc »

如果在这个基础修改,所有点的Z坐标也逐步偏移(使用sin函数,而非线性递增),形成半球体,且角度值设为137.5,会是什么效果?
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 0 访客