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

Computer Graphics, Animaition, OpenGL, DirectX, OpenCL
头像
paktc
渐入佳境
渐入佳境
帖子: 52
注册时间: 2016年07月21日 20:34
拥有现金: 锁定
储蓄: 锁定
Has thanked: 6 times
Been thanked: 5 times
联系:

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

帖子 #1 paktc » 2016年09月24日 12:10


头像
paktc
渐入佳境
渐入佳境
帖子: 52
注册时间: 2016年07月21日 20:34
拥有现金: 锁定
储蓄: 锁定
Has thanked: 6 times
Been thanked: 5 times
联系:

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

帖子 #2 paktc » 2016年09月24日 12:20

基于GL固定渲染管线的C代码

Code: [全选] [展开/收缩] [Download] (Untitled.c)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <GL/glut.h>
  4. #include <time.h>
  5. #include <math.h>
  6.  
  7. int winid;
  8. const double PI = M_PI;
  9. const double PI2 = M_PI * 2;
  10.  
  11. void display(void)
  12. {
  13.     float i,x,y;
  14.     float points = 300.0;
  15.     const double turn = PI2 * (137.5/360.0);
  16.  
  17.  
  18.     glClear(GL_COLOR_BUFFER_BIT);
  19.     glColor3f(0.3, 0.7, 0.6);
  20.  
  21.     glBegin(GL_POINTS);
  22.     for (i = 0.0; i < points; i += 1.0)
  23.     {
  24.         x=sqrt(points-i)*cos(i*turn);
  25.         y=sqrt(points-i)*sin(i*turn);
  26.         glVertex3f(x,y,0.0);
  27.     }
  28.     glEnd();
  29.     glutSwapBuffers();
  30. }
  31.  
  32. void idle(void)
  33. {
  34.     usleep(10000);
  35.     glutPostRedisplay();
  36. }
  37.  
  38. void reshape(int Width,int Height)
  39. {
  40.     float fa = 100.0;
  41.     glViewport(0,0,500,500);
  42.     glMatrixMode(GL_PROJECTION);
  43.     glLoadIdentity();
  44.     glOrtho(-20.0,20.0,-20.0,20.0,0.0,200.0);
  45.     glMatrixMode(GL_MODELVIEW);
  46.     glLoadIdentity();
  47.     gluLookAt(0.0,0.0,fa, 0.0,0.0,0.0, 0.0,1.0,fa);
  48. }
  49.  
  50. void init(void)
  51. {
  52.     glClearColor(0.0, 0.0, 0.0, 1.0);
  53.     glLineWidth(3.0);
  54.     glPointSize(16.0);
  55. }
  56.  
  57. void keypress(unsigned char key,int mousex,int mousey)
  58. {
  59.     switch (key) {
  60.     case 'q':
  61.         glutDestroyWindow(winid);
  62.         exit(0);
  63.         break;
  64.     }
  65. }
  66.  
  67. int main(int argc,char *argv[])
  68. {
  69.     glutInit(&argc,argv);
  70.     glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_MULTISAMPLE);
  71.     glutInitWindowSize(500,500);
  72.     glutInitWindowPosition(100,100);
  73.     winid=glutCreateWindow("Fib");
  74.     init();
  75.     glutReshapeFunc(reshape);
  76.     glutDisplayFunc(display);
  77.     glutIdleFunc(idle);
  78.     glutKeyboardFunc(keypress);
  79.     glutMainLoop();
  80.     return 0;
  81. }


Program.png
Program.png (44.95 KiB) 查看 835 次
Program.png
Program.png (44.95 KiB) 查看 835 次

头像
paktc
渐入佳境
渐入佳境
帖子: 52
注册时间: 2016年07月21日 20:34
拥有现金: 锁定
储蓄: 锁定
Has thanked: 6 times
Been thanked: 5 times
联系:

扩展

帖子 #3 paktc » 2016年09月24日 19:53

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


回到 “计算机图形”

在线用户

用户浏览此论坛: Baidu [Spider] 和 0 访客